30

k8s+jenkins实现自动化部署应用至k8s集群-Jie

 3 years ago
source link: https://blog.51cto.com/14234542/2495985
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

1.jenkins环境准备并启动jenkins服务

1)jdk环境配置

[root@centos7 ~]# ll /app/
k8s+jenkins实现自动化部署应用至k8s集群

[root@centos7 ~]# cat /etc/profile | tail -n3 #jdk的环境变量
export JAVA_HOME=/app/jdk
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
export CLASSPATH=$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$JAVA_HOME/lib/tools.jar

2)准备好jenkins启动的war包

[root@centos7 war]# ll
k8s+jenkins实现自动化部署应用至k8s集群

3)查看jenkins的启动脚本

[root@centos7 war]# cat start.sh

k8s+jenkins实现自动化部署应用至k8s集群

4)启动jenkins

[root@centos7 war]# ./start.sh && tailf test.log
k8s+jenkins实现自动化部署应用至k8s集群

5)在数据目录修改hudson更新url,改为国内url,避免jenkins无法启动

[root@centos7 ~]# cat .jenkins/hudson.model.UpdateCenter.xml
k8s+jenkins实现自动化部署应用至k8s集群

6)准备好主机解析或添加到DNS服务器

[root@centos7 ~]# cat /etc/hosts
k8s+jenkins实现自动化部署应用至k8s集群

7)web端访问jenkins界面

k8s+jenkins实现自动化部署应用至k8s集群

8)创建一个jenkins_project项目,并编辑配置

k8s+jenkins实现自动化部署应用至k8s集群
k8s+jenkins实现自动化部署应用至k8s集群

9)在jenkins的后端准备好自动化部署脚本k8s_auto_deploy.sh,事先做好公私钥认证,使得jenkins能够访问k8s-master-1

[root@centos7 ~]# cat /data/script/k8s_auto_depoy.sh
#!/bin/bash
[email protected]:middle-supoort-project/middle-compose-service.git
Starttime=`date +"%Y-%m-%d_%H-%M-%S"`
Method=$1
Branch=$2
t1=`date +"%Y-%m-%d %H:%M:%S"`

     #代码克隆至jenkins后端
clone_code(){
    cd /root/.jenkins/workspace/jenkins_project && git clone -b $Branch ${URL}&& echo "Clone Finished"
}

 #代码打包压缩并远程推送至k8s-master-1的nginx镜像制作目录
Pack_scp(){
    cd /root/.jenkins/workspace/jenkins_project/middle-compose-service/ && tar cvzf nginx.tar.gz * && echo Package Finished
    scp nginx.tar.gz root@k8s-master-1:/data/Dockerfile/nginx/ && ssh root@k8s-master-1 'cd /data/Dockerfile/nginx/ && tar xvf nginx.tar.gz &&rm -f nginx.tar.gz' 
}

 #远程操作k8s-master-1节点,进行镜像制作并推送至harbor镜像仓库
build_iamge(){
    ssh root@k8s-master-1 "cd /data/Dockerfile/nginx/ && ./build.sh ${Starttime} && echo 'build_image and push_harbor success!'"
}

    #对k8s集群中的nginx的pod应用进行升级
app_update(){
    ssh root@k8s-master-1 "sed -ri 's@image: .*@image: k8s.harbor.cn/base_application/nginx:${Starttime}@g'  /data/mainfest/nginx.yaml"
    ssh root@k8s-master-1 "kubectl set image deployment/nginx-deployment nginx-container=k8s.harbor.cn/base_application/nginx:${Starttime} -n default --record=true"
                t2=`date +"%Y-%m-%d %H:%M:%S"`
    start_T=`date --date="${t1}" +%s`
    end_T=`date --date="${t2}" +%s`
    total_time=$((end_T-start_T))
    echo "deploy success,it has been spent ${total_time} seconds"   
}

    #k8s集群中的pod应用进行回滚
app_rollback(){
    ssh root@k8s-master-1 'kubectl rollout undo deployment/nginx-deployment  -n default'
}

    #进行k8s集群自动部署的主函数
main(){
    case $Method in 
    deploy)
        clone_code
        Pack_scp
        build_iamge
        app_update
    ;;
    rollback)
        app_rollback
    ;;
    esac
}

#执行主函数命令
main $1 $2

10)将jenkins的公钥配置到gitlab服务的web端,使得jenkins可以直接拉取代码无需认证

[root@centos7 ~]# cat .ssh/id_rsa.pub
k8s+jenkins实现自动化部署应用至k8s集群

k8s+jenkins实现自动化部署应用至k8s集群

2.k8s的master节点的准备

1)准备存放nginx应用镜像制作的路径,当前目录为空,其代码配置文件均已放在gitlab服务器中

[root@k8s-master-1 ~]# ll /data/Dockerfile/nginx
total 0

2)拉取harbor中的镜像的认证文件

[root@k8s-master-1 ~]# ll /etc/docker/certs.d/k8s.harbor.cn/harbor_ca.crt
k8s+jenkins实现自动化部署应用至k8s集群

3)k8s集群中nginx的yaml清单文件

[root@k8s-master-1 data]# vim /data/mainfest/nginx.yaml
k8s+jenkins实现自动化部署应用至k8s集群

4)通过nginx.yaml文件启动pod资源和service资源

[root@k8s-master-1 ~]# kubectl apply -f /data/mainfest/nginx.yaml
k8s+jenkins实现自动化部署应用至k8s集群

5)查看nginx的pod应用以及service资源是否启动

[root@k8s-master-1 ~]# kubectl get pod -n default

k8s+jenkins实现自动化部署应用至k8s集群

6)查看service资源

[root@k8s-master-1 ~]# kubectl get service -n default
k8s+jenkins实现自动化部署应用至k8s集群

7)web端访问

k8s+jenkins实现自动化部署应用至k8s集群

3.将nginx的镜像构建等相关配置文件上传到gitlab

1)以下为nginx的镜像配置文件,均在develop分支下

k8s+jenkins实现自动化部署应用至k8s集群

2)制作nginx镜像的Dockerfile文件

k8s+jenkins实现自动化部署应用至k8s集群

3)build.sh镜像的构建及自动推送至harbor的脚本

k8s+jenkins实现自动化部署应用至k8s集群

4)index.html页面文件

k8s+jenkins实现自动化部署应用至k8s集群

5)nginx的主配置文件

k8s+jenkins实现自动化部署应用至k8s集群

6)nginx的server访问路径配置文件

k8s+jenkins实现自动化部署应用至k8s集群

3.立即构建jenkins工程,实现自动化部署nginx应用至k8s集群

1)以上均准备完毕,开始构建jenkins工程

k8s+jenkins实现自动化部署应用至k8s集群

2)选择相应的分支后构建方法

k8s+jenkins实现自动化部署应用至k8s集群

3)开始构建工程

k8s+jenkins实现自动化部署应用至k8s集群

4)查看控制输出

k8s+jenkins实现自动化部署应用至k8s集群

5)查看k8s当前正在运行nginx的pod容器

[root@k8s-master-1 ~]# kubectl get pod -n default 
k8s+jenkins实现自动化部署应用至k8s集群

6)再查看当前正在运行pod的镜像源地址,可见被自动更新

[root@k8s-master-1 ~]# kubectl describe pod nginx-deployment-b856886fb-9mzrm -n default
k8s+jenkins实现自动化部署应用至k8s集群

7)查看nginx的yaml清单文件,也被自动修改

[root@k8s-master-1 ~]# cat /data/mainfest/nginx.yaml | grep "image:.*"

k8s+jenkins实现自动化部署应用至k8s集群

8)查看harbor镜像仓库,查看构建的新镜像是否成功推送到此harbor仓库中

k8s+jenkins实现自动化部署应用至k8s集群

9)web端访问更新的nginx版本,可见实现自动化更新

k8s+jenkins实现自动化部署应用至k8s集群

10)假设开发人员将gitlab中的index.html的版本更新为1.13版

k8s+jenkins实现自动化部署应用至k8s集群

11)再次构建发布更新

k8s+jenkins实现自动化部署应用至k8s集群

12)查看控制台输出结果

k8s+jenkins实现自动化部署应用至k8s集群

13)web端访问nginx应用

k8s+jenkins实现自动化部署应用至k8s集群

4.若当前版本有问题,需要回滚,执行以下回滚操作

1)jenkins的控制台选择rollback回滚

k8s+jenkins实现自动化部署应用至k8s集群

2)回滚过程的日志查看

k8s+jenkins实现自动化部署应用至k8s集群

3)web端验证访问,可见回滚成功

k8s+jenkins实现自动化部署应用至k8s集群

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK