最近公司上線辦公網零信任安全網關係統,由我負責部署上線,在部署的時候同時也在想如何保障穩定性,以及後續部署的簡便性;python
想起了k8s微服務的成熟方案,不只能夠自動重啓還能夠監控容器運行狀態,也能夠集成自動化部署,因而找了一些資料將以前接觸過的rancher用了起來,首先要作的就是簡化安裝方式,下面是個人一些過程,同時也能夠給你們提供參考。git
在進入集羣的命名空間中,能夠在菜單欄點擊工具-流水線,而後就能夠看到以下圖所示的界面
接下來打開gitlab,而後打開設置頁面http://xx.xx.xx.xx/admin/applications/4
,以下圖所示golang
在上圖中將所需信息填寫進去,而後點擊保存docker
保存以後,gitlab會生成Application Id
和Secret
,咱們將它複製出來,shell
複製出來以後,切回rancher系統中,將其一一填寫進來,以下圖所示api
點擊完成後,會有一個彈窗進行受權,受權完成後rancher就能夠訪問到gitlab倉庫了。安全
在確保rancher能夠訪問gitlab倉庫以後,在rancher菜單欄點擊工具-流水線,將須要自動化部署的項目啓用並保存,以下圖所示微信
保存以後,回到CICD列表中,能夠看到兩個已經啓用的項目,以下圖所示app
接下來就能夠開始在代碼中啓用CICD自動化部署了,須要在項目根目錄添加三個文件,分別是:微服務
自動部署首先須要肯定部署流程,主要用到文件.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: {}
在上一步中已經將項目編譯好,接着就須要將編譯好的可執行文件放入到鏡像中,這裏起做用的主要是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"]
上一步已經將須要運行的鏡像推送到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