k8s+jenkins完成自动化布置使用至k8s集群荐

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
URL=git@k8s.gitlab.cn: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

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集群荐