zoukankan      html  css  js  c++  java
  • Jenkins+K8s实现持续集成

     一、Docker容器

    1、Docker介绍

    (1)Docker的介绍

    • Docker是一种容器技术。
    • 容器是什么-容器是一种轻量级、可移植、自包含的软件打包技术,使应用程序可以在几乎任何地方以相同的方式运行。
    • 开发在自己笔记本上创建并测试好的容器,无需任何修改就能够在生产系统的虚拟机、物理服务器或公有云主机上运行。

    (2)Docker的由来

    • 容器来源于集装箱,二者的英文都是Container,集装箱解决了运输的难题。
    • Docker的中文意思是码头工人。
    • Docker的图标是集装箱。

    (3)容器 VS 虚拟机

     (4)Docker的特点

    • Docker的特点:轻量级、可移植、资源占用少。
    • 对于开发人员-Build Once,Run Anywhere。
    • 对于运维人员-Configure Once,Run Anything。

    2、Docker安装配置

    (1)Docker安装

    • apt-get update
    • apt-get install -y docker.io

    (2)Docker配置

    • 阿里云加速器配置(https://cr.console.aliyun.com/)

    3、Docker基本使用

    (1)Docker基本使用

    docker pull mysql:5.6

    docker run -p 3306:3306 --name mymysql -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.6

    (2)Docker架构

     (3)Docker基本概念

    • 镜像(image)、容器(container)、仓库(registry)。
    • 仓库分公有和私有两种。Docker hub是默认的仓库。

     docker pull nginx

     docker rmi nginx

     (4)Docker基本使用

    • 版本查看、镜像拉取、镜像查询、镜像删除。
    • 容器运行、端口映射、挂存储卷、进入容器、查看容器日志、查询容器、设置环境变量、容器停止、容器删除。
    • 仓库登录。
    • 镜像构建、镜像打tag、镜像推送。
    • Dockerfile基本语法(FROM、RUN、CMD/ENTRYPOINT、EXPOSE)

    docker run -p 3306:3306 --name mymysql -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.6

    docker logs -f ce5307fc90b6

    docker ps -a

    docker stop ce5307fc90b6

    docker rm ce5307fc90b6

     

    docker push myregistry/mymysql:1.0

     

     二、必知必会的K8s

    1、k8s介绍

    Kubectl cerate -f test.yaml
    
    Kubectl apply -f /root/kube.yaml
    
    kubectl get services --all-namespaces

    •  基于容器技术的分布式架构领先方案。它是google严格保密十几年的秘密武器-Borg的一个开源版本。
    • Kubernetes是Google开源的一个容器编排引擎,它支持自动化部署、大规模可伸缩、应用容器化管理。

    2、k8s能做什么

    • 容器的自动化复制和部署。随时扩展或收缩容器规模,并提供负载均衡。
    • 方便地容器升级。
    • 提供容器弹性,如果失效就替换它。

    K8s对于测试能做什么

    • 测试服务器的集中化、自动化管理。将各种平台的服务器加入集群,按需部署或销毁。
    • 持续集成时方便地自动部署。

    k8s架构

     k8s基本概念

    • Master是主服务器,node是用于部署应用容器的服务器。
    • Pod基本操作单元,也是应用运行的载体。整个Kubernetes系统都是围绕着Pod展开的,比如如何部署运行Pod、如何保证Pod的数量、如何访问Pod等。
    • Deployment定义了pod部署的信息。
    • 若干个pod副本组成一个service,对外提供服务。
    • 副本是指一个pod的多个实例。
    • Namespace用于多租户的资源隔离。在测试环境中可以根据namespace划分成多套测试环境。默认有2个namespace:kubu-system/default

    k8s调度过程

    • Kubernetes Client将请求发送给API server。
    • API Server根据请求的类型,将处理的结果存入高可用键值存储系统Etcd中。
    • Scheduler将未分发的Pod绑定(bind)到可用的Nod节点上,存到etcd中。
    • Controller Manager根据etcd中的信息,调用node中的kubelet创建pod。
    • Controller Manager监控pod的运行状况并确保运行正常。

    3、k8s的安装

    k8s安装前的准备

    准备ke xue上网。在主机上安装,并配好服务器(服务器地址、密码需要自己想办法哦)

     k8s安装说明

    • 2台主机上都要安装docker。
    • 2台主机上都要安装kubeadm、kubelet和kubectl。
    • 2台主机上都要禁用虚拟内存。

    k8s安装以及配置

    安装kubeadm,kubelet和kubectl(一)

    apt-get update && apt-get install -y apt-transport-https curl
    
    curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add - 

    cat <<EOF >/etc/apt/sources.list.d/kubernetes.list
    deb
    http://apt.kubernetes.io/ kubernetes-xenial main
    EOF apt
    -get update && apt-get install -y kubelet kubeadm kubectl apt-mark hold kubelet kubeadm kubectl

    注意:curl如果连不上,则需要设置一下ke xue上网:export http_proxy=10.10.10.94:1087 && export https_proxy=10.10.10.94.1087

    操作步骤

    在ubuntu主机上:

    swapoff -a
    
    apt-get install apt-transport-https
    
    apt-get install curl

    在ubuntu-node主机上:

    swappff -a
    
    apt-get update
    
    apt-get install -y apt-transport-https
    
    apt-get install -y curl

    4、k8s的设置ke xue上网

    vim /etc/apt/source.list.d/kubernetes.list
    
    export http_proxy=192.168.0.186:1087 && export https_proxy=192.168.0.186:1087
    
    echo $http_proxy
    
    curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -
    
    
    cat <<EOF >/etc/apt/sources.list.d/kubernetes.list
    deb http://apt.kubernetes.io/ kubernetes-xenial main
    EOF

    5、k8s配置

     vim apt_proxy_conf

     apt-get -c apt_proxy_conf update

     apt-get -c apt_proxy_conf install -y kubelet kubeadm kubectl

    apt-mark hold kubelet kubeadm kubectl

    安装kubeadm、kubelet和kubectl(二)

    Apt安装这3个东东时,可能需要翻墙。Apt翻墙安装使用如下方式:

     初始化master(一)

    1. swapoff -a (禁用虚拟内存)
    2. kubeadm init --pod-network-cidr=10.244.0.0/16

     注意:这一步因为连不上Google的镜像库,会导致失败。记录下载失败的镜像,下一页中会告诉大家如何处理。

    6、k8s初始化master

    kubeadm init --pod-network-cidr=10.244.0.0/16 --ignore-preflight-errors=NumCPU

     注意:这一步因为连不上Google的镜像库,会导致失败。记录下载失败的镜像,下一页中会告诉大家如何处理。

     初始化master(二)

    1. 可以从keveon或mirrorgooglecontainers镜像库中下载,当其中一个镜像库找不到时,尝试另外一个。
    2. 再手工设置tag。

    7、k8s安装和配置

    docker pull mirrorgooglecontainers/kube-apiserver:v1.13.2
    
    docker tag mirrorgooglecontainers/kube-apiserver:v1.13.2 k8s.gcr.ioi/kube-apiserver:v1.13.2
    
    docker images | grep kube-apiserver
    
    docker rmi mirrorgooglecontainers/kube-apiserver:v1.13.2
    docker pull mirrorgooglecontainers/kube-controller-manager:v1.13.2
    
    docker tag mirrorgooglecontainers/kube-controller-manager:v1.13.2 k8s.gcr.ioi/kube-controller-manager:v1.13.2
    
    docker rmi mirrorgooglecontainers/kube-controller-manager:v1.13.2
    
    docker images | grep kube-controller
    docker pull mirrorgooglecontainers/kube-scheduler:v1.13.2
    
    docker tag mirrorgooglecontainers/kube-scheduler:v1.13.2 k8s.gcr.ioi/kube-scheduler:v1.13.2
    
    docker rmi mirrorgooglecontainers/kube-scheduler:v1.13.2
    
    docker images | grep kube-scheduler
    docker pull mirrorgooglecontainers/kube-proxy:v1.13.2
    
    docker tag mirrorgooglecontainers/kube-proxy:v1.13.2 k8s.gcr.ioi/kube-proxy:v1.13.2
    
    docker rmi mirrorgooglecontainers/kube-proxy:v1.13.2
    
    docker images | grep kube-proxy
    docker pull mirrorgooglecontainers/pause:3.1
    
    docker tag mirrorgooglecontainers/pause:3.1 k8s.gcr.ioi/pause:3.1
    
    docker rmi mirrorgooglecontainers/pause:3.1
    
    docker images | grep pause
    docker pull mirrorgooglecontainers/etcd:3.2.24
    
    docker tag mirrorgooglecontainers/etcd:3.2.24 k8s.gcr.ioi/etcd:3.2.24
    
    docker rmi mirrorgooglecontainers/etcd:3.2.24
    
    docker images | grep etcd
    docker pull keveon/coredns:1.2.6
    
    docker tag keveon/coredns:1.2.6 k8s.gcr.ioi/coredns:1.2.6
    
    docker rmi keveon/coredns:1.2.6
    
    docker images | grep coredns

     初始化master(三)

    1. 重新执行kubeadm init --pod-network-cidr=10.244.0.0/16。
    2. 记录下最后一条kubeadm join命令。

    kubeadm init --pod-network-cidr=10.244.0.0/16 --ignore-preflight-errors=NumCPU

     初始化master(四)

    1.  mkdir -p $HOME/.kube
    2. sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
    3. sudo chown $(id -u):$(id -g) $HOME/.kube/config

    8、k8s安装网络插件

    安装网络插件(只在master上执行)(一)

    •  sysctl net.bridge.bridge-nf-call-iptables=1
    • curl -O https://raw.githubusercontent.com/coreos/flannel/v0.10.0/Documentation/kube-flannel.yml

    安装网络插件(只在master上执行)(二)

    • 修改kube-flannel.ym文件,增加下图中红色的部分。

    • kubectl apply -f kube-flannel.yml

    添加node(只在node上执行)

    • 将之前记录下来的kubeadm join 命令执行。
    • swapoff -a
    • sysctl net.bridge.bridge-nf-call-iptables=1

    k8s检查安装配置

    • 检查node是否ready:kubectl get node

    •  检查所有pod是否正常:kubectl get pod --all-namespaces -o wide

     

    9、k8s安装异常处理

     

    •  在node上执行kubeadm reset可以断开node,然后重新join。
    • 在master上执行kubeadm reset后可以重新init。
    • 重新启动后,要执行如下命令:
    1. swapoff -a
    2. systemctl daemon-reload
    3. systemctl restart kubelet

    10、k8s基本使用

    k8s基本使用-Deployment创建、删除

    • kubectl create -f test.yaml
    • kubectl delete -f test.yaml

     k8s基本使用-Service创建及查看

    • kubectl create -f test.yaml
    • kubectl get service --all-namespaces

     k8s基本使用-Pod查看、删除

    • kubectl get pod --all-namespaces -o wide
    • kubectl describe pod xxxxxx -n kube-system
    • kubectl delete pod xxxxxx -n kube-system

    三、持续集成与Jenkins

    1、持续集成

    • 持续集成(CI)是一种软件开发实践。
    • 团队开发成员经常集成他们的工作,每个成员每天至少集成一次。
    • 每天可能会发生多次集成。
    • 每次集成都通过自动化的构建(包括编译、打包、部署、自动化测试)来验证。
    • 从而尽早地发现集成错误。

    持续集成过程

     持续集成优势

    • 快速集成、快速反馈、快速解决。
    • 团队信心更强。
    • 发布效率更高

    2、Jenkins介绍

    • 持续集成工具
    • 任务调度平台

     

     

    3、Jenkins安装以及配置

    Jenkins安装

    • jdk安装以及配置环境变量

     

     

    •  tomcat下载并解压

     

     

     

    •  jenkins war包下载,并放到tomcat的app目录,启动tomcat。

     

     

     

     

     

     

     jenkins服务器安装

    • 安装git

    •  安装maven

     

     

     

     

     

    • 修改maven镜像,使用阿里云镜像,修改maven的conf目录下的settings.xml文件。

     

     jenkins配置

    • 浏览器访问Jenkins url:xxx.xxx.xxx.xxx:8080/jenkins
    • 按提示创建用户

    • 按提示安装插件:ssh/publish over ssh/git parameter/Maven Integration

     

     

     

     

     Jenkins配置

    • Jenkins全局工具配置,配置jdk/git/maven

     

     

    四、Jenkins+k8s发布实例

    1、Jenkins+k8s发布实例

    2、registry安装配置和使用

    Registry安装配置

    • docker pull registry
    • docker run -p 5000:5000 -v /home/registry_images:/var/lib/registry -d registry

    Registry使用

    • 修改/etc/docker/daemon.json文件
    • docker pull nginx
    • docker tag nginx 10.10.10.71:5000/nginx:test
    • docker pull 10.10.10.71:5000/nginx:test

     

     

     

     

     

    3、Jenkins项目创建与配置

    Jenkins项目创建

    • 创建maven项目

     

     

    • 设置参数化构建

    •  Jenkins项目配置-设置代码源

    当前使用的是github上的一个public项目,你也可以使用

    •  设置maven构建命令

    •  设置构建后操作,将jar包打包成docker镜像,并推送registry

    注意:对应脚本要放到对应目录。

     

     

     

     

     

     

    4、Jenkins项目构建

     Jenkins项目配置

    • 设置jenkins服务器到k8s master ssh 免密登录

     

     

     

     

    •  设置构建后操作,将yaml文件拷贝到k8s master上并运行应用。

     

     Jenkins项目构建-参数化构建

    Jenkins查看日志

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    jenkins访问验证

    • 浏览器访问任一node的IP加上nodePort。

     

    总结

    • Registry安装配置和使用(使用docker安装)
    • Jenkins项目创建与配置
    • Jenkins项目构建

    来源:慕课网免费课程地址:http://www.imooc.com/learn/1112

  • 相关阅读:
    无废话WCF入门教程六[一个简单的Demo]
    MVC分页
    用于查询的日期类型转换帮助类
    无废话SharePoint入门教程五[创建SharePoint页面布局]
    一天内“被喷”7.5小时后感
    无废话SharePoint入门教程四[创建SharePoint母版页]
    无废话SharePoint入门教程三[创建网站集和网站]
    无废话SharePoint入门教程二[SharePoint发展、工具及术语]
    MTK USER版本禁止log输出
    MTK 音量加减键修改为默认控制媒体音量
  • 原文地址:https://www.cnblogs.com/it-deepinmind/p/13229234.html
Copyright © 2011-2022 走看看