穩!上千微服務接入 Zadig 的最佳姿勢(Helm Chart 篇)
Helm 作為雲原生領域優秀的 Kubernetes 應用的包管理工具,被廣泛應用。然而當環境增多時,需要針對不同環境(開發環境、測試環境、預釋出環境...)定製不同的 Helm Chart 配置,傳統的指令碼管理方式極易出錯;且當臨時測試環境生命週期結束後,對應的 Helm Chart 配置便失去價值,投入產出低。
Zadig 提供了三種高效管理 Helm Chart 配置的姿勢:
- 從程式碼庫批量同步配置:將 Helm Chart 配置組織在程式碼庫中,從程式碼庫同步配置,實現服務的批量建立。
- 使用 Helm Chart 模板建立服務:抽象 Helm Chart 配置模板,在 values 檔案中支援變數,指定少許變數即可快速建立服務,且一套模板可複用到多套環境中。
- 使用 Helm Chart 模板批量建立服務:抽象 Helm Chart 配置模板,建立服務時指定 values 檔案覆蓋模板,便可批量建立服務,且一套模板可複用到多套環境中。
下面將詳細闡述這些場景的使用方法。
從程式碼庫批量同步配置
適用:使用 Helm Chart 管理多個 K8s YAML 服務配置,每個服務有單獨的 YAML 配置。
將多個服務的 YAML 配置組織在一個 Helm Chart 中,使用 Zadig 批量匯入,下面以 voting-demo
專案為例演示說明:
- 原始碼:zadig/voting-app [1]
- 服務:包括 5 個微服務(
db
/redis
/result
/vote
/worker
) - Helm Chart 配置:位於原始碼下的
chart
目錄,目錄結構如下所示。values.yaml
中包括所有服務的映象資訊,templates
目錄下包括所有服務的配置,並引用{{ .Values.services.服務名.image }}
作為容器映象資訊
zadig/examples/voting-app/chart
├── Chart.yaml
├── templates
│ ├── db.yaml
│ ├── redis.yaml
│ ├── result.yaml
│ ├── vote.yaml
│ └── worker.yaml
└── values.yaml
從程式碼庫同步
進入專案的服務模組 -> 點選從程式碼庫同步
-> 選擇程式碼庫以及 Helm Chart 所在檔案目錄,點選載入
(本例中即為 Zadig 庫的 examples/voting-app/chart
目錄)。
同步後,系統會自動分析 values.yaml,解析出多個服務元件。
將服務加入到環境
點選加入環境
-> 選擇環境,快速將多個服務一鍵加入到已有環境中。
使用 Helm Chart 模板建立服務
適用:使用 Helm Chart 管理 K8s YAML 服務配置,各服務的配置結構同構,不同服務配置的值存在細微差異(比如:不同服務的映象名稱不同、埠不同、所需 CPU/Memory 資源限制不同...)。將配置抽象為包括變數的 Helm Chart 模板,建立服務時只需配置少量變數即可。
下面以 multi-service-demo
案例[2]進行實踐,和實踐相關的部分目錄結構說明如下:共包括三個服務 service1
/service2
/service3
,通過對完整的服務配置( k8s-yaml
目錄)進行分析,抽象出通用的 Helm Chart 服務模板(general-chart
目錄)。
zadig/examples/multi-service-demo/
├── general-chart # Helm Chart 服務模板
│ ├── Chart.yaml
│ ├── templates
│ │ ├── _helpers.tpl
│ │ ├── deployment.yaml
│ │ └── service.yaml
│ └── values.yaml
├── k8s-yaml # 各服務完整的 K8s YAML 配置
│ ├── service1
│ │ ├── deployment.yaml
│ │ └── service.yaml
│ ├── service2
│ │ ├── deployment.yaml
│ │ └── service.yaml
│ ├── service3
│ │ ├── deployment.yaml
│ │ └── service.yaml
可以看到模板的 values.yaml
檔案中使用了自定義變數 port
和系統內建變數 T-Service
,在使用模板建立服務後,此處的變數會被渲染替換。
fullnameOverride: $T-Service$
replicaCount: 1
port: {{.port}}
imagePullSecretsName: "default-registry-secret"
image:
repository: "ccr.ccs.tencentyun.com/koderover-public/$T-Service$"
tag: "latest"
resources:
requests:
cpu: 10m
mem: 10Mi
limits:
cpu: 20m
mem: 20Mi
建立 Helm Chart 模板
在專案預覽頁點選右上角的 模板庫
-> Helm Chart
進入 Helm Chart 模板管理頁面。
點選 +
新建模板 -> 填寫模板名稱 multi-service-demo-template
-> 選擇模板所在的程式碼庫及目錄 -> 點選載入
儲存模板。
本例中即為 Zadig 庫的
examples/multi-service-demo/general-chart
目錄
匯入模板成功後效果如下,點選模板中具體的檔案可檢視其內容,可對模板中自定義變數賦預設值。
使用模板新建服務
進入專案的服務模組 -> 點選使用模板新建
-> 填寫服務名稱並選擇模板,根據服務的實際配置情況,對模板中的變數賦值 -> 點選匯入
。
匯入成功後效果如下所示,選中服務後可在 Zadig 平臺中對其 values 內容進行預覽。
同樣的步驟快速建立服務 service2
、service3
。
本例中
service2
、service3
的埠分別是 20222、20223。
將服務加入環境
進入專案的環境中 -> 點選新增服務
-> 選擇新建的服務即可將服務加入到已有環境中。
使用 Helm Chart 模板批量建立服務
適用:現有服務配置使用獨立的 Helm Chart 來管理(一個一個的接入會導致效率低下)。此時將服務配置抽象為 Helm Chart 模板,建立服務時使用各服務的 values 來覆蓋模板中的配置,可將服務批量接入 Zadig。
同樣以 multi-service-demo
案例[2]進行實踐,和實踐相關的部分目錄結構說明如下:共包括三個服務 service1
/service2
/service3
,通過對各服務完整的 Helm Chart 配置( full-charts
目錄)進行分析,抽象出 Helm Chart 模板(base-chart
目錄),以及對應每個服務的 values(values
目錄)。
zadig/examples/multi-service-demo/
├── base-chart # Helm Chart 服務模板
│ ├── Chart.yaml
│ ├── templates
│ │ ├── _helpers.tpl
│ │ ├── deployment.yaml
│ │ └── service.yaml
│ └── values.yaml
├── full-charts # 各服務完整、獨立的 Helm Chart 配置
│ ├── service1
│ │ ├── Chart.yaml
│ │ ├── templates
│ │ └── values.yaml
│ ├── service2
│ │ ├── Chart.yaml
│ │ ├── templates
│ │ └── values.yaml
│ └── service3
│ ├── Chart.yaml
│ ├── templates
│ └── values.yaml
└── values # 對應各服務的 values
├── service1.yaml
├── service2.yaml
└── service3.yaml
建立 Helm Chart 模板
前文中已有同類操作,此處不再贅述。
本例中建立的模板名稱為
multi-service-demo-base-template
,來源於 Zadig 庫的examples/multi-service-demo/base-chart
目錄。
使用模板批量新建服務
進入專案的服務模組 -> 點選使用模板新建
-> 點選批量建立
-> 選擇模板以及多個服務的 values 所在檔案路徑,點選匯入
。
本例中即為 Zadig 庫的
examples/multi-service-demo/values
目錄![]()
匯入成功後效果如下所示,選中服務後可在 Zadig 平臺中對其 values 內容進行預覽。
將服務加入環境
進入專案的環境中 -> 點選新增服務
-> 選擇新建的服務即可將服務批量加入到已有環境中。
以上三種方式成功將服務接入 Zadig,接下來便可以使用 Zadig 強大的環境治理和工作流能力對服務進行構建部署、測試驗證、持續交付等,推薦閱讀:
結語
從程式碼庫同步 Helm Chart 配置可快速在 Zadig 中批量建立服務拉起環境,快速對業務進行驗證;模板功能將服務配置統一化管理,降低 Helm Chart 的維護負擔,讓工程師從繁瑣的配置管理“髒活累活”中解放出來,進入雲原生持續交付快車道,更多時間創造業務價值。
參考連結:
[1] https://github.com/koderover/zadig/tree/main/examples/voting-app
[2] https://github.com/koderover/zadig/tree/main/examples/multi-service-demo/
[3] https://docs.koderover.com/zadig/v1.12.0/project/workflow/
[4] https://docs.koderover.com/zadig/v1.12.0/project/env/helm/chart/
[5] https://docs.koderover.com/zadig/v1.12.0/project/version/#k8s-helm-chart-專案
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 ,好工具就要到最後一公里
- 鈦動科技:我們的 Zadig 落地之路
- 眾樂邦就這樣與 Zadig 結緣了