我們爲什麼選擇使用分佈式持續交付新星 Zadig
本文原創作者 Alan Wang - 閃電出行工程師,已授權本站轉發
持續交付作爲運維工作裏極其重要的一個環節,本身就存在一些歷史悠久的工具,拿 Jenkins 來說,可以通過插件實現各種各樣複雜的功能;隨着雲原生、devops、gitops 等理念的不斷普及,也湧現出不少新生力量,比如說 Gitlab CI、KubeVela、ArgoCD、雲效等,在 CI 或者 CD 環節中大展身手,合理使用的情況下都能顯著的提升效率;但是今天我們的主角不是上面的這些選手,而是另一個極具潛力的黑馬:Zadig。
簡介
Zadig 是一款分佈式持續交付產品,由 KodeRover 公司基於 Kubernetes 自主設計研發,具有產品持續交付、持續測試、持續追蹤的全流程能力,業務架構圖:
爲什麼選擇 Zadig?
原來是使用 Jenkins 做的交付,結合 kustomize 也能實現基於 k8s 編排應用的絲滑交付。我們考慮其他工具的出發點一方面是:新增一個環境的話配置對應的交付任務也比較複雜;另一方面是:爲了方便測試和開發同學,作爲一個交付系統來說,Jenkins 是足夠勝任的,但是並不能很好的展示被交付應用的運行狀態、日誌等,還需要其他工具或者系統去看應用運行是不是正常、查看日誌等,所以考慮是否有開源的產品可以滿足需求,經過一頓找找找,Zadig 憑藉着出色的能力,在一衆選手中殺出重圍,另一個有力的競爭者是雲效,雲效是阿里雲的 PaaS 應用,基於阿里雲能力棧可完整覆蓋整個應用的生命週期,簡單說明如下:
-
zadig 核心優勢:併發工作流(雲效併發任務大於 6 的話需額外購買)、更靈活 & 維護成本更低(構建與部署過程可高度個性化定製,公共配置可複用)、100% 開源(私有化部署,不強耦合指定雲廠商);
-
雲效核心優勢:產品線更全(覆蓋應用全生命週期)、功能開箱即用、更完善的發佈策略(分批發布、灰度發佈、藍綠髮布,且發佈過程可控);
結合需求和當前運維現狀,權衡後選擇了 Zadig,可用的核心功能:
-
高併發的工作流:基於雲原生實現多環境、多服務的高效併發交付;
-
靈活的集成環境:跨環境共享服務配置,通過參數化實現隔離業務數據和訪問入口區分,可以在數分鐘內創建一套隔離的全新測試環境;
-
兼容性好:無縫集成 GitHub/GitLab、Jenkins、多家雲廠商等;
-
無侵入的自動化測試:支持對接已有的自動化測試框架,通過 GitHub/GitLab WebHook 自動觸發測試任務;
-
開發本地聯調 CLI:支持通過 IDE 插件遠程調試本地代碼、日誌查看等功能;
落地過程
安裝
-
Zadig 提供雲上測試環境(非常 Nice):https://os.koderover.com/[1]
-
官方提供完善的安裝文檔 [2],並且有微信羣進行全方位技術支持 👍👍👍,這裏只提一下推薦使用外部高可用的數據庫、存儲來提高部署安全性。
使用
官方提供了很多案例幫助用戶熟悉 Zadig 能力棧和具體配置,這裏就不展開細說,只說明一下我們在落地過程中做了哪些關鍵的事情
-
集成外部系統:ldap(用戶管理)、gitlab(代碼管理)、oss(保存緩存文件)、鏡像倉庫(保存鏡像製品);
-
將業務線的各個環境拆成不同的項目隔離管理;
-
項目初始化流程:項目 >> 服務 >> 環境 >> 構建 >> 工作流交付。
價值
-
併發工作流顯著提高了發佈效率;
-
很好的滿足了落盤和 Stdout 日誌查看的需求;
-
使拉起一個新環境的成本大幅度降低;
-
自測模式使低成本高效率的開發聯調成爲可能。
不足
Zadig 目前還處於快速迭代的階段,難免存在一些功能和易用性問題,但每次更新都能顯著看到改善,分享下我們落地過程中的遇到的部分心得。
- 在 v1.11.0 版本中,存在以下略影響使用體驗的點:
-
zadig 暫不兼容 kustomize,提供了模板庫功能實現公共配置抽離和複用,缺點是隻適合服務初始化使用,更新模板後需要逐個手動應用到服務(批量更新功能預計 v1.12.0 上線);
-
構建配置目前不支持複用(服務和代碼倉庫強關聯),每個服務就需要單獨創建一個構建,同類服務的構建過程其實就一個代碼倉庫不同其他完全一致,也就是說 90% 的配置工作都是多餘的;相關優化功能 zadig 開發團隊已經在計劃中,後續版本會解決這個問題;
-
服務編排裏任何改動都會重建 deployment 的 rs、重建 pod,一些資源對象比如 pdb、hpa 這種仍傾向於手動維護。
展望
我們目前已經接入了多個環境的數百個前後端微服務的交付,順利進行了數千次部署交付,Zadig 漂亮的界面(可強 Jenkins 太多了~)和易用性也得到了測試和研發同學的肯定。作爲一個懶人,希望 Zadig 在配置複用上再改善一些,雖然可以自己開發腳本通過 API 實現很多重複配置的自動化,我們落地過程中就開發了腳本實現:服務、構建、用戶權限分配等功能的批量管理,極大降低了配置成本;但還是希望 Zadig 能提供原生功能實現,降低大家的使用成本。服務編排裏面的改動會造成不必要的 pod 重啓的問題,也希望 Zadig 後面能有解決方案。
Zadig 已經很出色了,未來可期,共勉。
Git 倉庫:https://github.com/koderover/zadig
參考資料
[1]
Zadig 雲上測試環境: https://os.koderover.com/
[2]
安裝文檔: https://docs.koderover.com/zadig/v1.11.0/install/overview/
本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源:https://mp.weixin.qq.com/s/9eAfG-huYK-sFfDQZCnLQw