TT 語音落地 Zadig:開源共創 Helm 接入場景,環境治理搞得定!
TTChat 是趣丸科技(TT語音)旗下的一款針對海外使用者的遊戲社交產品,包含實時語聊房、IM、開黑交友、賽事等一系列業務場景。團隊對雲原生技術非常推崇,加之在國內的 TT 語音產品上也有了一定的技術探索與積累,所以在新業務創立之初,我們就全面使用了 Kubernetes 與 Istio 進行服務治理。
本文作者:吳畏 TTChat 技術負責人 @趣丸
01 回望過去
起初在團隊規模較小的時候,我們簡單使用 GitLab CI 搭建了流水線,實現完全容器化的構建和部署,維護了開發與生產兩套環境。經過了一年多的產品迭代,團隊“創造”出了近兩百個微服務,也因為團隊規模變多,不斷產生出了協作問題,比如多分支開發與單一共享環境經常引起的服務覆蓋問題、缺少不同功能的環境以便提供給不同角色的人使用等等。這就催生出了多套環境的需求,面對如此多的服務,亟需一個合適的工具/平臺來幫助我們快速地“複製”多套新環境出來,正當我們一籌莫展的時候,我們看到了號稱具有「強大的雲原生多環境能力」的 Zadig。
02 共創之路
從去年的 10 月開始,我們開始嘗試進行 Zadig 的接入,彼時 Zadig 在使用 Kubernetes YAML 來管理與部署服務時,能夠很好的工作,而對於我們所使用 Helm Chart,卻仍然處於一個很初級的階段,加上我們自身對於 Helm Chart 使用姿勢不佳,導致在接入的過程中也遇到了許多困難。通過與 Zadig 團隊多次在廣滬兩地的面對面交流和思想碰撞,打磨出了不少針對 Helm Chart 場景的需求點。
Zadig 團隊也逐漸豐富了 Helm Chart 場景的支援,我簡單列一些我認為非常能夠體現 Zadig「強大的雲原生多環境能力」的功能點:
環境全域性變數
通過該能力,我們可以結合自己的 Helm Chart 模板,為所有服務提供環境級別的 Values 覆蓋,例如:
-
掛載公共配置至所有的 Pod 中,如特性開關配置、業務區域配置
-
Istio Virtual Service 中的 Gateway、Host 配置
-
全域性生效的環境變數
-
全域性注入的 annotations
環境配置
這個目前我們通常是結合環境全域性變數一起來使用的,比如用它來託管公共配置(前面提到的特性開關配置、業務區域配置等),也可以用來管理一些不適合放在服務配置中的敏感資訊(如密碼、證書)等。
環境複製
我們從 Git 中匯入的 Helm Values,其中所包含映象很可能是不可用的,或是一個非常古早的版本,建立環境後,經常面臨的問題就是服務無法啟動,或是某個服務版本過舊,無法正常工作,當時的做法是在環境建立之後,立刻執行一個工作流,對所有的服務進行重新構建,這無疑是非常消耗時間和構建資源的。環境複製功能則通過直接複製一個現有的穩定環境,從而實現快速構建新環境並且能直接投入使用,切實解決了痛點。
基於這些環境能力,我們現在能夠在短短的一二十分鐘內,快速地建立起一套擁有幾百個服務的全新環境。
除了環境能力,我們在和 Zadig 的接入過程中也解決了不少非常痛的問題:
從 Git 中批量匯入:
對於擁有幾百個存量服務的業務來說,這項功能極大程度解放了雙手,最終我們可以順利地在短短的十幾分鍾內,完成所有服務的匯入。可以說這是我們能夠堅持下來的一個重要原因。
服務編排:
通過管理服務的啟動順序,這項能力幫助我們有效地解決了服務部署時對配置、金鑰等強依賴的問題。此外,還可以使用 Zadig 託管部署測試環境的資料庫、Redis 等進行一些初始資料的匯入工作,這也是我們計劃中但一直還沒來得及做的事情。
03 落地與探索
在業務交付過程中,不同角色的人員對環境有著不同的訴求,例如開發人員需要一個統一的環境進行整合、聯調,測試人員需要一個獨立穩定的環境用於功能測試、驗收、實施自動化測試。
我們期望能夠結合 Zadig 的多環境管理以及可定製化的 Workflow,非常快速地拉起一套完整的環境,並且儘可能實現自動化,這也是雲原生文化所非常倡導的價值觀之一。因此除了託管常規的服務之外,我們也用 Zadig 託管了很多環境所依賴的底層資源:
-
環境啟動所依賴的 ConfigMaps、Secrets
-
提供訪問入口配置的 Istio Gateway CR
-
用於自動化生成 TLS 證書的 Certificate CR(結合 CertManager & Let's Encrypt)
在 TTChat 主專案中,由於服務數量較多,存在一定的環境維護成本,我們使用 Zadig 管理了 dev 和 qa 兩套標準環境。
下圖以 Zadig 為界分為了兩個部分,上半部分是業務執行時的一個視角,我們在業務架構上面使用了 istio-ingressgateway 作為七層閘道器對 TTChat App 提供了 HTTP/2 和 HTTP/3 的接入能力,因此使用了不同的域名將流量路由到不同的環境中(PS:圖中域名為示例);
下半部分則描繪了我們現階段在交付中,從程式碼提交或者合併觸發工作流,然後部署到兩套環境中的過程。圖中的紅色區域的自測環境是我們目前基於 Zadig 新發布的子環境能力進行的一項新的嘗試,希望能夠給研發人員提供更加好的開發體驗。
目前我們一共有六個活躍的專案執行在了 Zadig 之上,共計管理了 16 套開發&測試環境,近 300 個服務,每週進行數百次的構建部署,構建成功率 >96%,自接入以來累計產生的交付物 12000 多個,部署 20000 餘次。
04 期待與展望
Zadig 作為完整的持續交付方案,我們團隊目前只發揮了它不到 50% 的有效價值;現今,團隊正在進行主幹開發與主幹釋出的嘗試,我們也希望發揮 Zadig 的「測試管理」這一差異化價值,結合自身的自動化測試建設,能夠實現更加順暢的持續交付。
另外,最近的幾個版本中,出現了一些基於 Service Mesh 的非常有意思的新功能,比如執行部分服務的環境、自測(沙盒)環境。可以看到,經過了半年,我們所期待的一些餅都逐一實現出來了,這些功能的完善解決了不少我們目前面臨的痛點,可以幫助我們緩解甚至解決在大體量業務場景下,多環境管理時的高資源成本和開發者對獨立環境的訴求之間的矛盾。
非常期待未來繼續與 Zadig 一起,幫助工程師更好地專注價值創造。
Zadig,讓工程師更專注創造!
歡迎加入 開源吐槽群🔥
- 基於 Zadig 的 GitOps 實踐
- 極速 Zadig 構建效率是這樣煉成的
- 主機基礎設施如何使用 Zadig 做持續交付
- Zadig 環境負載均衡:0 人工干預,極速部署
- 打通了!Jira Zadig 實現需求與研發過程追蹤
- 雲原生 DevOps 現狀調研問卷徵集:KodeRover 聯合 OSCHINA 推出
- Zadig v1.13.0 相信開放的力量,工作流連通一切價值
- 飛書影片會議端到端整合測試工程實踐經驗總結 - Zadig 應用案例
- 在解決了 2961 個使用者反饋後,我做出了這樣的改變...
- 基於 Ingress Controller 在叢集外訪問 Zadig 自測環境(最佳實踐)
- iMile 利用 Zadig 多雲環境周部署千次,跨雲跨地域持續交付全球業務
- 穩!上千微服務接入 Zadig 的最佳姿勢(Helm Chart 篇)
- 穩!上千微服務接入 Zadig 的最佳姿勢(K8s YAML 篇)
- Zadig 洞態 IAST:讓安全溶於持續交付
- TT 語音落地 Zadig:開源共創 Helm 接入場景,環境治理搞得定!
- 00後雲工程師用 Zadig 為企業研發開源節流
- Zadig 構建究竟有何強大?一起來實踐
- 妙盈科技全面實施 Zadig 擁抱雲原生
- Zadig SonarQube,為開發過程安全保駕
- Zadig v1.12.0 推出 VS Code 外掛,全面支援 GitOps ,好工具就要到最後一公里