一伏蚊、背景
最近公司上線辦公網(wǎng)零信任安全網(wǎng)關(guān)系統(tǒng),由我負責(zé)部署上線格粪,在部署的時候同時也在想如何保障穩(wěn)定性躏吊,以及后續(xù)部署的簡便性;
想起了k8s微服務(wù)的成熟方案帐萎,不僅可以自動重啟還可以監(jiān)控容器運行狀態(tài)比伏,也可以集成自動化部署,于是找了一些資料將之前接觸過的rancher用了起來疆导,首先要做的就是簡化安裝方式赁项,下面是我的一些過程,同時也可以給大家提供參考澈段。
二悠菜、操作步驟
- 讓Rancher能訪問GitLab
- 在流水線添加項目
- 在倉庫添加必備文件
- CICD自動部署調(diào)試
三、gitlab添加oauth授權(quán)
在進入集群的命名空間中败富,可以在菜單欄點擊工具-流水線悔醋,然后就可以看到如下圖所示的界面
接下來打開gitlab,然后打開設(shè)置頁面
http://xx.xx.xx.xx/admin/applications/4
囤耳,如下圖所示
在上圖中將所需信息填寫進去,然后點擊保存
保存之后,gitlab會生成Application Id
和Secret
,我們將它復(fù)制出來充择,
復(fù)制出來之后德玫,切回rancher系統(tǒng)中,將其一一填寫進來椎麦,如下圖所示
點擊完成后宰僧,會有一個彈窗進行授權(quán),授權(quán)完成后rancher就可以訪問到gitlab倉庫了观挎。
四琴儿、在rancher中添加代碼倉庫
在確保rancher可以訪問gitlab倉庫之后,在rancher菜單欄點擊工具-流水線嘁捷,將需要自動化部署的項目啟用并保存造成,如下圖所示
保存之后,回到CICD列表中雄嚣,可以看到兩個已經(jīng)啟用的項目晒屎,如下圖所示
五、添加部署必備個文件
接下來就可以開始在代碼中啟用CICD自動化部署了缓升,需要在項目根目錄添加三個文件鼓鲁,分別是:
- .rancher-pipeline.yml
- Dockerfile
- deployment.yaml
5.1 設(shè)置發(fā)布流程
自動部署首先需要確定部署流程,主要用到文件.rancher-pipeline.yml
港谊,這里我是golang 的項目骇吭,使用了三個流程。
首先編譯項目歧寺;接著構(gòu)建鏡像推送到rancher的鏡像倉庫中燥狰,最后使用容器編排文件發(fā)布項目,配置代碼核心關(guān)注點如下圖紅色區(qū)域所示
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 構(gòu)建鏡像
在上一步中已經(jīng)將項目編譯好成福,接著就需要將編譯好的可執(zhí)行文件放入到鏡像中碾局,這里起作用的主要是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 容器編排
上一步已經(jīng)將需要運行的鏡像推送到rancher的鏡像倉庫之后净当,接下來就需要構(gòu)建pod來運行容器,這里發(fā)揮作用的主要是deployment.yaml
文件蕴潦。
這個文件如果沒有接觸過k8s的同學(xué)可能會比較陌生像啼,這里我將每一行都寫了注釋,并將需要修改的地方用紅色標(biāo)記圈出來了潭苞,如下圖所示
參考配置如下所示
kind: Service # 指定創(chuàng)建資源的角色/類型
apiVersion: v1 # 指定api版本忽冻,此值必須在kubectl api-versions中
metadata: # 資源的元數(shù)據(jù)/屬性
name: funfe-center # 資源的名字,在同一個namespace中必須唯一
spec: # 資源規(guī)范字段
selector: # 選擇器
app: center
type: NodePort # 端口類型
ports:
- protocol: TCP # 協(xié)議
port: 80 # service 端口
targetPort: 80 # 容器暴露的端口
---
apiVersion: apps/v1 # 指定api版本此疹,此值必須在kubectl api-versions中
kind: Deployment # 指定創(chuàng)建資源的角色/類型
metadata: # 資源的元數(shù)據(jù)/屬性
name: funfe-center # 資源的名字僧诚,在同一個namespace中必須唯一
namespace: default # 資源的名字遮婶,在同一個namespace中必須唯一
spec: # 資源規(guī)范字段
replicas: 1 # 聲明副本數(shù)目
selector: # 選擇器
matchLabels: # 匹配標(biāo)簽
app: center
template: # 模版
metadata: # 資源的元數(shù)據(jù)/屬性
labels: # 設(shè)定資源的標(biāo)簽
app: center
spec: # 資源規(guī)范字段
imagePullSecrets: # 鏡像倉庫拉取密鑰
- name: pipeline-docker-registry
containers:
- name: funfe # 容器的名字
image: ${CICD_IMAGE}:${CICD_EXECUTION_SEQUENCE} # 容器使用的鏡像地址
ports:
- containerPort: 80 # 容器開發(fā)對外的端口
六、修改代碼自動部署
修改代碼后會自動執(zhí)行編譯湖笨、推送到鏡像庫旗扑、拉取代碼部署
現(xiàn)在我修改代碼倉庫的代碼,回到rancher流水線中慈省,就看到有一個任務(wù)在執(zhí)行自動部署流程臀防,如下圖所示
執(zhí)行完成周,回到集群的工作負載當(dāng)中边败,就可以看到已經(jīng)有一個服務(wù)自動化部署到K8s中
日期:2021-03-04
作者:湯青松
微信:songboy8888