快速入門:使用 Helm 開發 Azure Kubernetes Service (AKS)

Helm 是開放原始碼的封裝工具,可協助您安裝和管理 Kubernetes 應用程式的生命週期。 Helm 類似於 APTYum 等 Linux 套件管理員,可用於管理 Kubernetes 圖表,即預先設定的 Kubernetes 資源套件。

在本快速入門中,您將使用 Helm 在 AKS 上封裝和執行應用程式。 如需使用 Helm 安裝現有應用程式的詳細資訊,請參閱在 AKS 中使用 Helm 安裝現有的應用程式

必要條件

建立 Azure Container Registry

您必須將容器映像儲存在Azure Container Registry(ACR) 中,才能使用 Helm 在 AKS 叢集中執行您的應用程式。 登錄名稱在 Azure 內必須是唯一的,且包含 5-50 個英數字元。 只允許小寫字元。 基本 SKU 對開發用途而言是最符合成本效益的進入點,可在儲存體和輸送量之間取得平衡。

  1. 使用 az group create 命令建立 Azure 資源群組。 下列範例會在 eastus 位置建立名為 myResourceGroup 的資源群組。

    az group create --name myResourceGroup --location eastus
    
  2. 藉由呼叫 az acr create 命令,建立具有唯一名稱的 Azure Container Registry。 下列範例會使用基本 SKU 建立名為 myhelmacr 的 ACR。

    az acr create --resource-group myResourceGroup --name myhelmacr --sku Basic
    

    您的輸出看起來應該類似下列壓縮的範例輸出。 記下 ACR 的 LoginServer 值,以便在稍後的步驟中使用。

    {
      "adminUserEnabled": false,
      "creationDate": "2023-12-26T22:36:23.998425+00:00",
      "id": "/subscriptions/<ID>/resourceGroups/myResourceGroup/providers/Microsoft.ContainerRegistry/registries/myhelmacr",
      "location": "eastus",
      "loginServer": "myhelmacr.azurecr.io",
      "name": "myhelmacr",
      "networkRuleSet": null,
      "provisioningState": "Succeeded",
      "resourceGroup": "myResourceGroup",
      "sku": {
        "name": "Basic",
        "tier": "Basic"
      },
      "status": null,
      "storageAccount": null,
      "tags": {},
      "type": "Microsoft.ContainerRegistry/registries"
    }
    

建立 AKS 叢集

您的新 AKS 叢集需要存取您的 ACR,以提取容器映像並加以執行。

  • 使用 az aks create 命令搭配 --attach-acr 參數建立 AKS 叢集,以便將 ACR 的存取權授與叢集。 下列範例會建立名為 myAKSCluster 的 AKS 叢集,並授與 myhelmacr ACR 的存取權。 確定將 myhelmacr 取代為 ACR 的名稱。

    az aks create --resource-group myResourceGroup --name myAKSCluster --location eastus --attach-acr myhelmacr --generate-ssh-keys
    

連線至您的 AKS 叢集

若要在本機連線 Kubernetes 叢集,請使用 Kubernetes 命令列用戶端 kubectl。 如果您使用 Azure Cloud Shell,則 kubectl 已安裝。

  1. 使用 az aks install-cli 命令,在本機安裝 kubectl

    az aks install-cli
    
  2. 使用 az aks get-credentials 命令,設定 kubectl 連線到 Kubernetes 叢集。 下列命令會為 myResourceGroup 中名為 myAKSCluster 的 AKS 叢集取得認證。

    az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
    

下載範例應用程式

本快速入門會使用 Azure 投票應用程式

  1. 使用 git clone 命令從 GitHub 複製應用程式。

    git clone https://github.com/Azure-Samples/azure-voting-app-redis.git
    
  2. 使用 cd 命令瀏覽至 azure-vote 目錄。

    cd azure-voting-app-redis/azure-vote/
    

建置範例應用程式並將其推送至 ACR

  • 使用 az acr build 命令,建置映像並將其推送至您的 ACR。 下列範例會建置名為 azure-vote-front:v1 的映像,並將它推送至 myhelmacr ACR。 確定將 myhelmacr 取代為 ACR 的名稱。

    az acr build --image azure-vote-front:v1 --registry myhelmacr --file Dockerfile .
    

注意

您也可以將 Helm 圖表匯入至 ACR。 如需詳細資訊,請參閱 將 Helm 圖表推送並提取至 Azure 容器登錄

建立您的 Helm 圖表

  1. 使用 helm create 命令產生 Helm 圖表。

    helm create azure-vote-front
    
  2. 更新 azure-vote-front/Chart.yaml,以從圖表存放庫新增 redis 圖表的 https://charts.bitnami.com/bitnami 相依性,並將 appVersion 更新為 v1,如下列範例所示:

    注意

    本指南中顯示的容器映像版本已經過測試以使用此範例,但可能不是最新的可用版本。

    apiVersion: v2
    name: azure-vote-front
    description: A Helm chart for Kubernetes
    
    dependencies:
      - name: redis
        version: 17.3.17
        repository: https://charts.bitnami.com/bitnami
    
    ...
    # This is the version number of the application being deployed. This version number should be
    # incremented each time you make changes to the application.
    appVersion: v1
    
  3. 使用 helm dependency update 命令更新 Helm 圖表相依性。

    helm dependency update azure-vote-front
    
  4. 使用下列變更更新 azure-vote-front/values.yaml

    • 新增 redis 區段以設定映像詳細資料、容器連接埠和部署名稱。
    • 新增 backendName,以將前端部分連線到 redis 部署。
    • image.repository 變更為 <loginServer>/azure-vote-front
    • image.tag 變更為 v1
    • service.type 變更為 LoadBalancer

    例如:

    replicaCount: 1
    backendName: azure-vote-backend-master
    redis:
      image:
        registry: mcr.microsoft.com
        repository: oss/bitnami/redis
        tag: 6.0.8
      fullnameOverride: azure-vote-backend
      auth:
        enabled: false
    
    image:
      repository: myhelmacr.azurecr.io/azure-vote-front
      pullPolicy: IfNotPresent
      tag: "v1"
    ...
    service:
      type: LoadBalancer
      port: 80
    ...
    
  5. env 區段新增至 azure-vote-front/templates/deployment.yaml,以傳遞 redis 部署的名稱。

    ...
          containers:
            - name: {{ .Chart.Name }}
              securityContext:
                {{- toYaml .Values.securityContext | nindent 12 }}
              image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}"
              imagePullPolicy: {{ .Values.image.pullPolicy }}
              env:
              - name: REDIS
                value: {{ .Values.backendName }}
    ...
    

執行您的 Helm 圖表

  1. 使用 helm install 命令,以 Helm 圖表安裝您的應用程式。

    helm install azure-vote-front azure-vote-front/
    
  2. 需要幾分鐘的時間,服務才能傳回公用 IP 位址。 使用 kubectl get service 命令搭配 --watch 引數來監視進度。

    kubectl get service azure-vote-front --watch
    

    服務就緒時,EXTERNAL-IP 值會從 <pending> 變更為 IP 位址。 按下 CTRL+C 以停止 kubectl 監看流程。

      NAME               TYPE           CLUSTER-IP    EXTERNAL-IP     PORT(S)        AGE
      azure-vote-front   LoadBalancer   10.0.18.228   <pending>       80:32021/TCP   6s
      ...
      azure-vote-front   LoadBalancer   10.0.18.228   52.188.140.81   80:32021/TCP   2m6s
    
  3. 使用 <EXTERNAL-IP> 瀏覽至瀏覽器中的應用程式負載平衡器,以查看範例應用程式。

選取叢集

  • 使用 az group delete 命令搭配 --yes 參數確認刪除,移除您的資源群組、AKS 叢集、Azure 容器登錄、儲存在 ACR 中的容器映像,並將 --no-wait 參數傳回命令提示字元,而不需要等待作業完成。

    az group delete --name myResourceGroup --yes --no-wait
    

注意

如果您使用系統指派的受控識別建立 AKS 叢集 (本快速入門使用的預設身分識別選項),則身分識別是由平台管理,而且不需要移除。

如果您使用服務主體建立 AKS 叢集,則刪除叢集時不會移除服務主體。 若要移除服務主體的步驟,請參閱 AKS 服務主體的考量和刪除

下一步

如需使用 Helm 的詳細資訊,請參閱 Helm 文件