用 Zadig 為研發開源節流完成廣州公交系統的數字化轉型
思創科技作為一家公交行業的互聯網轉型企業,在規模較小的時候開發人員能夠擔任“全棧工程師”。所有的研發步驟節點都可以由開發人員參與完成項目迭代上線。但是隨著公司的發展,項目的增長和需求的繁多。研發人員在進行代碼驗證的時候,花費了太多的時間。無法全身心投入到研發過程當中。
同時針對于研發人員天馬行空的想法驗證也有著局限性。一個行業的創新,必定是需要驗證眾多天馬行空的想法,才能最終實現突破性的創造。但如果依舊按照之前傳統的研發體系,那么軟件研發創新的可能性就會隨著時間的發展,研發人員的精神疲憊,無法獲取靈感創新。
IT 技術發展自身技術的跟進和變革(虛擬化無法滿足現有狀態)
傳統的虛擬化在項目中已經逐步地感到“疲憊”。在項目申報中,服務器一般都會有著部分的冗余空間,但是恰恰就是這部分的冗余空間,在某些時刻就是浪費。我們需要做到一個變革,一場能夠將 IT 利用率達到最好的變革。
DevOps 和容器化隨著研發瓶頸逐漸出現在我們后續的工作中。
DevOps 的探索
為什么選擇 Zadig?
起初我們選擇的是 Jenkins ,因為 Jenkins 在業內太有名。隨意在馬路邊上拉上一個 IT 從業者,你問他 Jenkins 是什么,他肯定知道。哈哈。隨后的落地中,我們也確實是使用著 Jenkins 去做一個探索。起初想做到如下,但是效果不太理想。
- Jenkins 首先創立的初衷是針對于主機服務,在創立的時候并沒有為 Kubernetes 留下一道方便之門。
- Jenkins 做持續集成部署有著繁多的 Pipeline 和 Jenkinsfile,Dockerfile 以及各類 K8s 服務 Yaml 文件。在文件管理上略顯雜亂。這些東西都是比較有規律的文件,缺乏統一管理。且如果 Jenkins 是包括了以往傳統的主機部署項目的話是可以說是繼續探索下去的,但是在大規模實現容器化編排的現在 Jenkins 在我們這就有點乏力。
- 但是 Jenkins 有著靈活的插件和 Pipeline ,可以實現人工介入發布,這是我們比較喜歡的一點。但隨著項目的上線和使用,發現他的并發構建在現有環境下較慢故暫時擱置。
- Jenkins Pipeline 在微服務發布項目中,需要修改 Pipeline ,造成不必要的麻煩。
- Jenkins 無法對服務的發布順序做改變,只能通過腳本的形式手動選擇順序發布。
在后續的工作中,發現了 Zadig ,他成為了我們高效研發的“尚方寶劍”。
初識 Zadig
Zadig 其實我覺得接觸起來非常容易,前提是你要了解基本的 K8s 概念和你需要構建服務的語言基本情況,這樣你使用起來就是直接起飛。
Zadig 在我們這有著高效的研發流程,具體體現在:
- 高效管理 K8s 服務 Yaml,Helm,微服務的 Dockerfile 的模版,完美解決了 Jenkins 中繁多的文件問題
- Zadig 完美支持云原生項目和主機項目,可以實現魚和熊掌,我都要!
- 在我們扁平化的環境下, Zadig 的效能能夠完美覆蓋我們的所有場景
- Zadig 環境管理能力很強大,能夠提供其他工具無法提供的環境復制功能,在不同環境下支持不同的 Configmap,環境變量等
- Zadig 進行 CI 提速較為明顯
- 具有強大的統計數據模塊
我們從 1.6 版本就開始使用 Zadig ,那個時候 Zadig 還是一個比較稚嫩的 CI/CD 工具,但是現在都已經發版到 1.12 了,具有太多有用的功能了。
那個時候我們就是十分看重 Zadig 對 Kubernetes CI/CD 的管控力。只需要定義好相關服務的 Yaml ,這個 Yaml 可以從模板庫中提取,就十分的 Nice。填寫相關的服務參數,就可以實現運行了。并且他可以自定義運行順序,可以說非常棒。
在后續對 Zadig 的關注中,我們發現他逐步的推出了新的產品。我們對 Zadig 也十分充滿信心。在后續我們也嘗試過升級,但是那個時候自己電腦上 VMware 做虛擬化升級測試是可以,信心滿滿的去生產做升級。好家伙,什么服務都起來了,但就是無法訪問 UI 界面。只能回退,后續我們在和官方接觸后才發現是 Istio 和 Zadig 的網關沖突,在升級的時候關閉了相關的參數后才正常升級,體驗到了更好的產品。通過這個事件我也體會到了開源產品社區和用戶之間的聯系更緊,那么問題定位也能更方便,不斷的使用產品,不斷的反饋,社區不斷的打磨,鑄就一個更為強大的產品誕生,未嘗不是一件美事。
怎么判斷 Zadig 是否適合你
如果你們公司的是和我們一樣在推動數字化轉型,容器化編排,那么 Zadig 十分適合你。
如果你們公司用著 Jenkins 做傳統的主機發布管理,這個時候要上 Kubernetes 實現容器化,那么 Zadig 同樣適合你們,可以做到 Jenkins 和 Zadig 的集成發布。
如果你們公司的項目較為扁平化,那么 Zadig 可以基本覆蓋 95% 的場景,加上 Zadig 眾多的優勢,何樂不為呢?
如果你們公司剛剛開始進行云原生探索,那么 Zadig 是你們的不二之選,上手快,社區活躍度高。問題響應之快,絕對可以為貴公司 DevOps 理念的落地提供技術支撐。
Zadig 實現的價值
Zadig 不僅僅是一個優秀的 CI/CD 工具,他更是 DevOps 文化的踐行者。通過 Zadig 我們實現了高效研發,在研發人員的每日研發利用率上對比以往做到了更大的提升,省出寶貴時間去創造更多產品價值。
- 針對需求迭代,做到了每日服務需求有更新
- 針對開發驗證,可以做到集成環境資源的收縮自如
- Zadig 不僅實現了自身的企業價值,還幫助解決了我們這些軟件企業發展中的許多瓶頸問題。
使用情況總結
- 當前思創科技產品業務線 5 條,其中 3 條業務線都已完全接入 Zadig,其余 2 條業務線屬于傳統業務,更新頻率較低。
- 通過 Zadig 管理了3個集群,其中 2 套集群為遠端業務集群。部分環境無法通過 Kubernetes 去編排容器實現遠程發布,通過zadig的主機項目,實現遠程容器發布,方便后續的業務遷移。
- 運行環境 17 個其中 12 個測試、5 個生產,共計 200+ 個應用程序,實現了 4000+ 次自動化構建和部署,部署成功率 99% 以上 從發布頻率上看,以往都是有開發人員主動介入發布,在本地通過打包的形式部署在服務器上,發布。一天發布的頻率大約在 10 次上下。在接入 Zadig 之后代碼更新迭代的頻率得以飛速提升,慢的一天也是30 左右,快的一天 70 余次。