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檔案中的 k8s 和 azure.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 版本轉換至部署狀態
- 列出在已部署資源中定義的相關服務與入口
啟用 Kustomize 支援
要啟用 Kustomize 支援,請確保你安裝了 Kustomize CLI。 使用azd config 命令啟用azd Kustomize 功能旗標:
azd config set alpha.aks.kustomize on
Kustomize 設定與部署
Kustomize 功能允許您將 Kustomize 作為 Kubernetes 部署的一部分,並提供以下功能:
- 支援
base與variant配置 -
edits這些可以在部署前執行 -
configMapGenerator與azd環境
請使用以下 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