做者 | 存誠 阿里雲彈性計算團隊git
本文整理自《Serverless 技術公開課》,「Serverless」公衆號後臺回覆「入門」,便可獲取系列文章 PPT。github
**導讀:**本節課程爲您介紹如何基於阿里雲 Serverless Kubernetes(簡稱 ASK)服務,來快速構建 GitLab 持續集成環境。web
ASK 介紹
首先,ASK 是什麼?ASK 是阿里雲推出的無服務器版 Kubernetes 容器服務。與傳統的 Kubernetes 服務相比,ASK最大的特色就是經過虛擬節點接入 Kubernetes 集羣,而 Kubernetes 的 Master 節點也徹底由阿里雲容器服務託管。所以,在整個 ASK 集羣中,用戶無需管理和運維真實節點,只用關心 Pod 資源便可,ASK 中的 Pod 則由阿里雲彈性容器實例 ECI 承載。docker
ASK 的優點主要有如下幾點:shell
- 下降用戶使用 Kubernetes 的門檻,無需管理 Node 節點;
- 無需考慮節點的容量規劃;
- 以 Pod 爲單位按需計費;
- 宕機故障影響面小,Pod 級別。
同時,ASK 主要適用的場景有:api
- 在線業務彈性(視頻直播、在線教育);
- 大數據計算(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 集羣中。app
其中涉及到的知識點主要有:less
- 經過 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/serverless
Serverless 公衆號,發佈 Serverless 技術最新資訊,聚集 Serverless 技術最全內容,關注 Serverless 趨勢,更關注你落地實踐中的遇到的困惑和問題。