總體流程:
- 在開發機開發代碼后提交到gitlab
- 之后通過webhook插件觸發jenkins進行構建,jenkins將代碼打成docker鏡像,push到docker-registry
- 之后將在k8s-master上執行rc、service的創建,進而創建Pod,從私服拉取鏡像,根據該鏡像啟動容器
在第四十三章 微服務CICD(5)- gitlab + jenkins + docker中,實現了前兩步。本節實現第三步
一、打通jenkins與k8s-master兩台機器之間的ssh無密碼訪問
參考:第四十二章 微服務CICD(4)- jenkins + gitlab + webhooks + publish-over-ssh(2)
添加ssh server:
說明:由於不需要拷貝jenkins機器上的文件到10.211.55.6,所以Remote Directory不填。
二、jenkins服務配置
選擇機器,執行命令。
三、k8s-master(10.211.55.6)
1、在/data/目錄下創建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
說明:imagePullPolicy:
- Always:總是拉取鏡像,如果tag是lastest的話,該配置是默認值
- IfNotPresent:如果鏡像不存在,則拉取鏡像,如果tag不是lastest的話,該配置是默認值
- 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-docker
2、在/data/script/目錄下創建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
說明:
- 首先刪除相應service的rc,service,以及擁有app=${service_name}標簽的所有pods
- 第一次執行該腳本的時候,由於rc、service、pod不存在,刪除的話,會打出error日志,無所謂(沒任何影響)。
- 之后,睡3s
- 最后,創建rc(此時會創建pod,並從registry拉取鏡像,最后根據該鏡像啟動容器),創建service(提供對外訪問接口)
三、測試
1、本地:
- git add --all
- git commit -m"test k8s cicd"
- git push origin HEAD:dev
2、查看jenkins的console
3、瀏覽器訪問http://10.211.55.8:30001/docker/hello