第四十四章 微服务CICD(6)- gitlab + jenkins + docker + k8s
總體流程:
- 在開發(fā)機(jī)開發(fā)代碼后提交到gitlab
- 之后通過(guò)webhook插件觸發(fā)jenkins進(jìn)行構(gòu)建,jenkins將代碼打成docker鏡像,push到docker-registry
- 之后將在k8s-master上執(zhí)行rc、service的創(chuàng)建,進(jìn)而創(chuàng)建Pod,從私服拉取鏡像,根據(jù)該鏡像啟動(dòng)容器
在第四十三章 微服務(wù)CICD(5)- gitlab + jenkins + docker中,實(shí)現(xiàn)了前兩步。本節(jié)實(shí)現(xiàn)第三步
?
一、打通jenkins與k8s-master兩臺(tái)機(jī)器之間的ssh無(wú)密碼訪問(wèn)
參考:第四十二章 微服務(wù)CICD(4)- jenkins + gitlab + webhooks + publish-over-ssh(2)
添加ssh server:
說(shuō)明:由于不需要拷貝jenkins機(jī)器上的文件到10.211.55.6,所以Remote Directory不填。
?
二、jenkins服務(wù)配置
選擇機(jī)器,執(zhí)行命令。
?
三、k8s-master(10.211.55.6)
1、在/data/目錄下創(chuàng)建rc和svc文件
1.1、myservice1-docker-rc.yaml
1 apiVersion: v1 2 kind: ReplicationController 3 metadata: 4 name: myservice1-docker 5 spec: 6 replicas: 2 7 selector: 8 app: myservice1-docker 9 template: 10 metadata: 11 labels: 12 app: myservice1-docker 13 spec: 14 containers: 15 - name: myservice1-docker 16 image: 10.211.55.4:5000/com.xxx/myservice1-docker:1.0-SNAPSHOT 17 imagePullPolicy: Always 18 ports: 19 - containerPort: 8080說(shuō)明:imagePullPolicy:
- Always:總是拉取鏡像,如果tag是lastest的話,該配置是默認(rèn)值
- IfNotPresent:如果鏡像不存在,則拉取鏡像,如果tag不是lastest的話,該配置是默認(rèn)值
- Never
1.2、myservice1-docker-svc.yaml
1 apiVersion: v1 2 kind: Service 3 metadata: 4 name: myservice1-docker 5 spec: 6 type: NodePort 7 ports: 8 - port: 8080 9 nodePort: 30001 10 selector: 11 app: myservice1-docker2、在/data/script/目錄下創(chuàng)建service_start.sh腳本
1 #!/bin/bash 2 export service_name=$1 3 sleep_second=3 4 5 echo 'kubectl delete rc ${service_name}' 6 kubectl delete rc ${service_name} 7 8 echo 'kubectl delete service ${service_name}' 9 kubectl delete service ${service_name} 10 11 echo 'kubectl delete pods -l app=${service_name}' 12 kubectl delete pods -l app=${service_name} 13 14 sleep ${sleep_second} 15 16 echo 'create rc' 17 kubectl create -f /data/${service_name}-rc.yaml 18 19 echo 'create service' 20 kubectl create -f /data/${service_name}-svc.yaml說(shuō)明:
- 首先刪除相應(yīng)service的rc,service,以及擁有app=${service_name}標(biāo)簽的所有pods
- 第一次執(zhí)行該腳本的時(shí)候,由于rc、service、pod不存在,刪除的話,會(huì)打出error日志,無(wú)所謂(沒(méi)任何影響)。
- 之后,睡3s
- 最后,創(chuàng)建rc(此時(shí)會(huì)創(chuàng)建pod,并從registry拉取鏡像,最后根據(jù)該鏡像啟動(dòng)容器),創(chuàng)建service(提供對(duì)外訪問(wèn)接口)
?
三、測(cè)試
1、本地:
- git add --all
- git commit -m"test k8s cicd"
- git push origin HEAD:dev
2、查看jenkins的console
3、瀏覽器訪問(wèn)http://10.211.55.8:30001/docker/hello
轉(zhuǎn)載于:https://www.cnblogs.com/java-zhao/p/6065268.html
總結(jié)
以上是生活随笔為你收集整理的第四十四章 微服务CICD(6)- gitlab + jenkins + docker + k8s的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。