穩!上千微服務接入 Zadig 的最佳姿勢(Helm Chart 篇)

語言: CN / TW / HK

Helm 作為雲原生領域優秀的 Kubernetes 應用的包管理工具,被廣泛應用。然而當環境增多時,需要針對不同環境(開發環境、測試環境、預釋出環境...)定製不同的 Helm Chart 配置,傳統的指令碼管理方式極易出錯;且當臨時測試環境生命週期結束後,對應的 Helm Chart 配置便失去價值,投入產出低。

Zadig 提供了三種高效管理 Helm Chart 配置的姿勢:

  1. 從程式碼庫批量同步配置:將 Helm Chart 配置組織在程式碼庫中,從程式碼庫同步配置,實現服務的批量建立。
  2. 使用 Helm Chart 模板建立服務:抽象 Helm Chart 配置模板,在 values 檔案中支援變數,指定少許變數即可快速建立服務,且一套模板可複用到多套環境中。
  3. 使用 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 內容進行預覽。

同樣的步驟快速建立服務 service2service3

本例中 service2service3的埠分別是 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 on Github
Zadig on Gitee