gitlab + jenkins + docker + k8s

整體流程:html

  • 在開發機開發代碼後提交到gitlab
  • 以後經過webhook插件觸發jenkins進行構建,jenkins將代碼打成docker鏡像,push到docker-registry
  • 以後將在k8s-master上執行rc、service的建立,進而建立Pod,從私服拉取鏡像,根據該鏡像啓動容器

第四十三章 微服務CICD(5)- gitlab + jenkins + docker中,實現了前兩步。本節實現第三步java

 

1、打通jenkins與k8s-master兩臺機器之間的ssh無密碼訪問node

參考:第四十二章 微服務CICD(4)- jenkins + gitlab + webhooks + publish-over-ssh(2)git

添加ssh server:web

說明:因爲不須要拷貝jenkins機器上的文件到10.211.55.6,因此Remote Directory不填。docker

 

2、jenkins服務配置api

選擇機器,執行命令。瀏覽器

 

3、k8s-master(10.211.55.6)bash

一、在/data/目錄下建立rc和svc文件app

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.二、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
複製代碼

二、在/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(提供對外訪問接口)

 

3、測試

一、本地:

  • git add --all
  • git commit -m"test k8s cicd"
  • git push origin HEAD:dev

二、查看jenkins的console

三、瀏覽器訪問http://10.211.55.8:30001/docker/hello

相關文章
相關標籤/搜索