
作者 | 存誠 阿裡雲彈性計算團隊
本文整理自
《Serverless 技術公開課》,“Serverless”公衆号背景回複“入門”,即可擷取系列文章 PPT。
導讀:本節課程為您介紹如何基于阿裡雲 Serverless Kubernetes(簡稱 ASK)服務,來快速建構 GitLab 持續內建環境。
ASK 介紹
首先,ASK 是什麼?ASK 是阿裡雲推出的無伺服器版 Kubernetes 容器服務。與傳統的 Kubernetes 服務相比,ASK最大的特點就是通過虛拟節點接入 Kubernetes 叢集,而 Kubernetes 的 Master 節點也完全由阿裡雲容器服務托管。是以,在整個 ASK 叢集中,使用者無需管理和運維真實節點,隻用關心 Pod 資源即可,ASK 中的 Pod 則由阿裡雲彈性容器執行個體 ECI 承載。
ASK 的優勢主要有以下幾點:
- 降低使用者使用 Kubernetes 的門檻,無需管理 Node 節點;
- 無需考慮節點的容量規劃;
- 以 Pod 為機關按需計費;
- 當機故障影響面小,Pod 級别。
同時,ASK 主要适用的場景有:
- 線上業務彈性(視訊直播、線上教育);
- 大資料計算(Spark);
- 定時任務;
- CI/CD 持續內建。
GitLab CI on ASK 的優勢
說到 CI/CD,大家最熟悉的兩個工具,一個是 Jenkins,另一個是 GitLab CI,随着 Devops 角色的流行,越來越多的企業采用 GitLab CI 作為持續內建的工具,下面給大家介紹下 GitLab CI on ASK。gitlab-runner 以 Pod 形式注冊到 ASK 叢集中,每個 CI/CD stage 也對應一個 Pod。
這麼做的優勢有以下幾點:
- 服務高可用(Deployment+PVC);
- 無需維護 K8s Master、Node 節點,在沒有任何建構任務的情況下,隻需要運作一個 Pod(gitlab-runner);
- 觸發一個建構任務,啟動一個 Pod,按需計費;
- 當機故障隻會影響以 Pod 為機關。
實踐示範
接下來給大家示範如何在阿裡雲 ASK 叢集上部署 gitlab-runner,并且通過 gitlab CICD Pipeline 部署 Java 應用到 ASK 叢集中。
其中涉及到的知識點主要有:
- 通過 configMap 儲存 gitlab runner 和 executor 的配置;
- 通過 secret 儲存 ASK 叢集的通路憑證和鏡像倉庫的密鑰;
- 通過 PVC 緩存 runner cache 和 maven 倉庫;
- 通過 imageCache 緩存容器鏡像。
本節課程涉及到的所有的配置檔案(yaml)都已經上傳到 github 供大家下載下傳【
下載下傳連結】。
下面開始示範,視訊版課程請點選【
觀看連結1. 準備 ASK 叢集
- 在【 容器服務控制台 】建立标準 Serverless K8s 叢集
- 叢集建立完成後,基本資訊中有 API server 公網連結位址
- 連接配接資訊中有 ASK 叢集通路憑證
2. 準備 PV/PVC
準備兩個 nas 盤,一個做 gitlab runner cache,一個做 maven 倉庫,請自行替換 nas server 位址和path
kubectl apply -f mvn-pv.yaml
kubectl apply -f mvn-pvc.yaml
kubectl apply -f nas-pv.yaml
kubectl apply -f nas-pvc.yaml
3. 準備 Secret
- kubeconfig 裡的證書公私鑰拷貝到 secret 中,secret.yaml
kubectl apply -f secret.yaml
- docker-registry 的認證資訊,ECI 支援免密拉取,但是 push docker image 還是要用到
kubectl create secret docker-registry registry-auth-secret --docker-server=registry.cn-hangzhou.aliyuncs.com --docker-username=${xxx} --docker-password=${xxx}
- 檢視生成的 secret 可以用以下指令
kubectl get secret registry-auth-secret --output=yaml
4. 準備 ConfigMap
把 gitlab runner 的 url、token,ASK 叢集的 api server 位址拷貝到 config.yaml
kubectl apply -f config-map.yaml
5. 準備 imageCache(可選,節省鏡像拉取時間)
目前 AS K預設安裝了 imagecache-crd,可以用以下指令查詢,如果沒有可以自己安裝
# 檢視image cache crd 是否安轉
kubectl get crd
# 安裝image cache crd
kubectl apply -f imagecache-crd.yaml
# 制作imagecache
kubectl apply -f imagecache.yaml
6. 部署 gitlab runner
kubectl apply -f gitlab-runner-deployment.yaml
7. 進行一個簡單的 CI 任務
git repo 中的 .gitlab-ci.yml 類似 Jenkinsfile,定義了建構任務的工作流。我們修改 demo 項目中的 src/main/webapp/index.jsp 檔案,然後 git commit -m "change index info" 送出。 gitlab 中的流水線任務即被觸發,整個流程涉及到編譯、打包、部署。
成本
使用 ASK 與一台預付費 ECS 的成本對比:
從上述成本計算可以看出,當您每天的 CI/CD 任務少于 126 個時,使用 ASK+ECI 會比購買一台包年包月的 ECS 更加劃算。在享受按需付費的同時,也降低了運維成本,更加重要的是,當業務規模擴大、CI/CD 任務數量陡增時,不再需要擔心 Node 節點的擴容。ASK+ECI 的方案,可以被認為是 CI/CD 持續內建場景的量身标配。
課程推薦
為了更多開發者能夠享受到 Serverless 帶來的紅利,這一次,我們集結了 10+ 位阿裡巴巴 Serverless 領域技術專家,打造出最适合開發者入門的 Serverless 公開課,讓你即學即用,輕松擁抱雲計算的新範式——Serverless。
點選即可免費觀看課程:https://developer.aliyun.com/learning/roadmap/serverlessServerless 公衆号 ,釋出 Serverless 技術最新資訊,彙集 Serverless 技術最全内容,關注 Serverless 趨勢,更關注你落地實踐中的遇到的困惑和問題。