1. 程式人生 > 其它 >K8s微服務自動化部署容器(Rancher流水線)

K8s微服務自動化部署容器(Rancher流水線)

一、背景

最近公司上線辦公網零信任安全網關係統,由我負責部署上線,在部署的時候同時也在想如何保障穩定性,以及後續部署的簡便性;

想起了k8s微服務的成熟方案,不僅可以自動重啟還可以監控容器執行狀態,也可以整合自動化部署,於是找了一些資料將之前接觸過的rancher用了起來,首先要做的就是簡化安裝方式,下面是我的一些過程,同時也可以給大家提供參考。

二、操作步驟

  1. 讓Rancher能訪問GitLab
  2. 在流水線新增專案
  3. 在倉庫新增必備檔案
  4. CICD自動部署除錯

三、gitlab新增oauth授權

在進入叢集的名稱空間中,可以在選單欄點選工具-流水線,然後就可以看到如下圖所示的介面

接下來開啟gitlab,然後開啟設定頁面http://xx.xx.xx.xx/admin/applications/4,如下圖所示

在上圖中將所需資訊填寫進去,然後點選儲存

儲存之後,gitlab會生成Application IdSecret,我們將它複製出來,

複製出來之後,切回rancher系統中,將其一一填寫進來,如下圖所示

點選完成後,會有一個彈窗進行授權,授權完成後rancher就可以訪問到gitlab倉庫了。

四、在rancher中新增程式碼倉庫

在確保rancher可以訪問gitlab倉庫之後,在rancher選單欄點選工具-流水線,將需要自動化部署的專案啟用並儲存,如下圖所示

儲存之後,回到CICD列表中,可以看到兩個已經啟用的專案,如下圖所示

五、新增部署必備個檔案

接下來就可以開始在程式碼中啟用CICD自動化部署了,需要在專案根目錄新增三個檔案,分別是:

  1. .rancher-pipeline.yml
  2. Dockerfile
  3. deployment.yaml

5.1 設定釋出流程

自動部署首先需要確定部署流程,主要用到檔案.rancher-pipeline.yml,這裡我是golang 的專案,使用了三個流程。

首先編譯專案;接著構建映象推送到rancher的映象倉庫中,最後使用容器編排檔案釋出專案,配置程式碼核心關注點如下圖紅色區域所示

stages:

- name: Build

steps:

- runScriptConfig:

image: golang:1.16

shellScript: |-

go env -w GO111MODULE=on && go env -w GOPROXY=https://goproxy.cn,direct

go mod tidy

pwd

go build -o ./bin/funfecenter

- name: Publish

steps:

- publishImageConfig:

dockerfilePath: ./Dockerfile

buildContext: .

tag: funfecenter:${CICD_EXECUTION_SEQUENCE}

- name: Deploy

steps:

- applyYamlConfig:

path: ./deployment.yaml

timeout: 60

notification: {}

5.2 構建映象

在上一步中已經將專案編譯好,接著就需要將編譯好的可執行檔案放入到映象中,這裡起作用的主要是Dockerfile檔案,配置程式碼比較簡單,如下所示

FROM golang:1.16

EXPOSE 1333

COPY ./bin/funfecenter /data/funfecenter/center

COPY ./init/ /

COPY script.py /root/

RUN apt update -y

RUN apt install -y python3

#CMD ["python3","/root/script.py"]

CMD ["/data/funfecenter/center"]

5.3容器編排

上一步已經將需要執行的映象推送到rancher的映象倉庫之後,接下來就需要構建pod來執行容器,這裡發揮作用的主要是deployment.yaml檔案。

這個檔案如果沒有接觸過k8s的同學可能會比較陌生,這裡我將每一行都寫了註釋,並將需要修改的地方用紅色標記圈出來了,如下圖所示

參考配置如下所示

kind: Service # 指定建立資源的角色/型別

apiVersion: v1 # 指定api版本,此值必須在kubectl api-versions

metadata: # 資源的元資料/屬性

name: funfe-center # 資源的名字,在同一個namespace中必須唯一

spec: # 資源規範字段

selector: # 選擇器

app: center

type: NodePort # 埠型別

ports:

- protocol: TCP # 協議

port: 80 # service

targetPort: 80 # 容器暴露的埠

---

apiVersion: apps/v1 # 指定api版本,此值必須在kubectl api-versions

kind: Deployment # 指定建立資源的角色/型別

metadata: # 資源的元資料/屬性

name: funfe-center # 資源的名字,在同一個namespace中必須唯一

namespace: default # 資源的名字,在同一個namespace中必須唯一

spec: # 資源規範字段

replicas: 1 # 宣告副本數目

selector: # 選擇器

matchLabels: # 匹配標籤

app: center

template: # 模版

metadata: # 資源的元資料/屬性

labels: # 設定資源的標籤

app: center

spec: # 資源規範字段

imagePullSecrets: # 映象倉庫拉取金鑰

- name: pipeline-docker-registry

containers:

- name: funfe # 容器的名字

image: ${CICD_IMAGE}:${CICD_EXECUTION_SEQUENCE} # 容器使用的映象地址

ports:

- containerPort: 80 # 容器開發對外的埠

六、修改程式碼自動部署

修改程式碼後會自動執行編譯、推送到映象庫、拉取程式碼部署

現在我修改程式碼倉庫的程式碼,回到rancher流水線中,就看到有一個任務在執行自動部署流程,如下圖所示

執行完成周,回到叢集的工作負載當中,就可以看到已經有一個服務自動化部署到K8s中

日期:2021-03-04

作者:湯青松

微信:songboy8888

轉自https://www.zhihu.com/column/c_1017361246676520960