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


總體流程:

  • 在開發機開發代碼后提交到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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM