Helm 與 Kustomize 的支援

Azure Developer CLI 支援 Helm 與 Kustomize,以改善 Azure Kubernetes Service(AKS)的配置與部署流程。 Helm 和 Kustomize 是幫助你配置和管理 Kubernetes 應用程式的工具。 在接下來的章節中,你會學習如何在範本 azd 中啟用並自訂這些工具的支援。

啟用 Helm 支援

要啟用 Helm 支援,請確保你已安裝 Helm CLI。 透過執行azd指令啟用azd config舵手功能旗標:

azd config set alpha.aks.helm on

舵機配置與部署

azd Helm 支援讓你能為每個 azd 服務定義一套 Helm 圖表清單,安裝到每個服務。 利用helm檔案中的 k8sazure.yaml 設定區段,定義可安裝的 helm 倉庫或發佈清單。

name: todo-nodejs-mongo-aks
metadata:
  template: todo-nodejs-mongo-aks@0.0.1-beta
services:
  argocd:
    host: aks
    k8s:
      namespace: argo
      service:
        name: argocd-server
      helm:
        repositories:
          - name: argo
            url: https://argoproj.github.io/argo-helm
        releases:
          - name: argocd
            chart: argo/argo-cd
            version: 5.51.4
  jupyterhub:
    host: aks
    k8s:
      namespace: jupyterhub
      service:
        name: proxy-public
      helm:
        repositories:
          - name: jupyterhub
            url: https://hub.jupyter.org/helm-chart/
        releases:
          - name: jupyterhub
            chart: jupyterhub/jupyterhub
            version: 3.1.0

指令 azd deploy 可透過以下 helm 區段處理以下任務:

  • 將任何引用的 Helm 儲存庫新增和/或更新
  • 安裝參考的 Helm 圖表
  • 等待 Helm 版本轉換至部署狀態
  • 列出在已部署資源中定義的相關服務與入口

Helm 部署輸出的截圖。

啟用 Kustomize 支援

要啟用 Kustomize 支援,請確保你安裝了 Kustomize CLI。 使用azd config 命令啟用azd Kustomize 功能旗標:

azd config set alpha.aks.kustomize on

Kustomize 設定與部署

Kustomize 功能允許您將 Kustomize 作為 Kubernetes 部署的一部分,並提供以下功能:

  • 支援 basevariant 配置
  • edits 這些可以在部署前執行
  • configMapGeneratorazd 環境

請使用以下 azure.yaml 區塊配置 Kustomize 功能:

  • dir: 從服務到包含 kustomization.yaml 檔案的 Kustomize 目錄的相對路徑。
    • 支援環境變數替換。
  • edits: 部署前套用的編輯表達式陣列
    • 支援環境變數替換
  • env:部署前產生的鍵值對對照表
    • 映射值支援環境變數置換

使用案例

azd 支援以下 Kustomize 的使用案例。

部署 K8s 設定檔

以下設定會執行kubectl apply -k <dir>指令,該指令指向包含kustomization.yaml的清單資料夾。

# azure.yaml

name: todo-nodejs-mongo-aks
metadata:
  template: todo-nodejs-mongo-aks@0.0.1-beta
services:
  api:
    project: ./src/api
    language: js
    host: aks
    k8s:
      kustomize:
        dir: ./kustomize/base

使用覆蓋層來部署不同變體

此用例通常用於自訂配置以部署至不同階段或環境,例如 dev、 和 testprod。 在以下範例中,使用者可以在 kustomize 目錄中指定 ${AZURE_ENV_NAME} 環境變數,自動將 azd 環境作為預設的覆蓋慣例:

# azure.yaml

name: todo-nodejs-mongo-aks
metadata:
  template: todo-nodejs-mongo-aks@0.0.1-beta
services:
  api:
    project: ./src/api
    language: js
    host: aks
    k8s:
      kustomize:
        dir: ./kustomize/overlays/${AZURE_ENV_NAME}

部署前修改kustomization.yaml

修改 的 kustomization.yaml 常見用例是修改部署中容器 映像檔名稱或版本

以下範例指定一個 edits 配置並設定任何有效的 kustomize edit ... 指令。 azd 自動替換 edit 命令中引用的任何環境變數。

# azure.yaml

name: todo-nodejs-mongo-aks
metadata:
  template: todo-nodejs-mongo-aks@0.0.1-beta
services:
  api:
    project: ./src/api
    language: js
    host: aks
    k8s:
      kustomize:
        dir: ./kustomize/overlays/${AZURE_ENV_NAME}
        edits:
          - set image todo-api=${SERVICE_API_IMAGE_NAME}

在設定映射中使用 azd 環境變數

設定映射或秘密資料在配置 K8s 叢集時非常重要。 因為 Kustomize 不支援直接的環境變數替換 ,我們可以用 Kustomize configMapGenerator 搭配檔案 .env

kustomize配置區塊支援一個env區塊,其中可以定義一個或多個鍵值對。 此設定會自動在您的 kustomization 目錄中產生一個暫存 .env 檔案,供 configMapGenerator 使用。

以下配置將產生一個.env,其中包含指定的鍵值對。

# azure.yaml

name: todo-nodejs-mongo-aks
metadata:
  template: todo-nodejs-mongo-aks@0.0.1-beta
services:
  api:
    project: ./src/api
    language: js
    host: aks
    k8s:
      kustomize:
        dir: ./kustomize/overlays/${AZURE_ENV_NAME}
        edits:
          - set image todo-api=${SERVICE_API_IMAGE_NAME}
        env:
          AZURE_AKS_IDENTITY_CLIENT_ID: ${AZURE_AKS_IDENTITY_CLIENT_ID}
          AZURE_KEY_VAULT_ENDPOINT: ${AZURE_KEY_VAULT_ENDPOINT}
          APPLICATIONINSIGHTS_CONNECTION_STRING: ${APPLICATIONINSIGHTS_CONNECTION_STRING}

configMapGenerator 會產生一個具有指定名稱的 K8s 設定圖,並包含 .env 檔案中所有的鍵值對。

# kustomization.yaml

apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization

resources:
  - deployment.yaml
  - service.yaml
  - ingress.yaml

configMapGenerator:
  - name: todo-web-config
    envs:
      - .env