第四十四章 微服務CICD(6)- gitlab + jenkins + docker + k8s

- 在開發機開發程式碼後提交到gitlab
- 之後通過webhook外掛觸發jenkins進行構建,jenkins將程式碼打成docker映象,push到docker-registry
- 之後將在k8s-master上執行rc、service的建立,進而建立Pod,從私服拉取映象,根據該映象啟動容器


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
- Always:總是拉取映象,如果tag是lastest的話,該配置是預設值
- IfNotPresent:如果映象不存在,則拉取映象,如果tag不是lastest的話,該配置是預設值
- Never
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
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(提供對外訪問介面)
- git add --all
- git commit -m"test k8s cicd"
- git push origin HEAD:dev
總體流程:
在 ofollow,noindex" target="_blank">第四十三章 微服務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
說明:imagePullPolicy:
1.2、myservice1-docker-svc.yaml
2、在/data/script/目錄下建立service_start.sh指令碼
說明:
三、測試
1、本地:
2、檢視jenkins的console
3、瀏覽器訪問http://10.211.55.8:30001/docker/hello