快速入门:使用 Helm 在 Azure Kubernetes 服务 (AKS) 上进行开发

Helm 是一种开放源打包工具,有助于安装和管理 Kubernetes 应用程序的生命周期。 与 Linux 包管理器(如 APT 和 Yum)类似,Helm 管理 Kubernetes chart,这些 chart 是预配置的 Kubernetes 资源的包 。

在本快速入门中,你将使用 Helm 在 AKS 上打包并运行应用程序。 有关使用 Helm 安装现有应用程序的详细信息,请参阅在 AKS 中通过 Helm 安装现有应用程序

先决条件

创建 Azure 容器注册表

你需要将容器映像存储在 Azure 容器注册表 (ACR),才能使用 Helm 在 AKS 群集中运行应用程序。 注册表名称在 Azure 中必须唯一,并且包含 5-50 个字母数字字符。 仅允许小写字符。 “基本”SKU 是一个针对成本优化的入口点,适用于可以对存储和吞吐量进行均衡考虑的开发目的。

  1. 使用 az group create 命令创建 Azure 资源组。 以下示例在“eastus”位置创建名为“myResourceGroup”的资源组。

    az group create --name myResourceGroup --location chinaeast2
    
  2. 调用 az acr create 命令创建拥有唯一命名的 Azure 容器注册表。 以下示例使用 Basic 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.cn",
      "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 来拉取并运行容器映像。

  • 使用带有 --attach-acr 参数的 az aks create 命令创建 AKS 群集,以授予群集对 ACR 的访问权限。 以下示例创建名为 myAKSCluster 的 AKS 群集,并授予它访问 myhelmacr ACR 的权限。 确保将 myhelmacr 替换为 ACR 的名称。

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

连接到 AKS 群集

若要在本地连接 Kubernetes 群集,请使用 Kubernetes 命令行客户端 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 Vote 应用程序

  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,为 https://charts.bitnami.com/bitnami 图表存储库中的 redis 图表添加依赖项,并将 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.azk8s.cn
        repository: oss/bitnami/redis
        tag: 6.0.8
      fullnameOverride: azure-vote-backend
      auth:
        enabled: false
    
    image:
      repository: myhelmacr.azurecr.cn/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 chart 来安装应用程序。

    helm install azure-vote-front azure-vote-front/
    
  2. 服务可能需要几分钟才能返回公共 IP 地址。 使用带有 --watch 参数的 kubectl get service 命令来监视进度。

    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 命令删除资源组、AKS 群集、Azure 容器注册表、存储在 ACR 中的容器映像以及所有相关资源,其中 --yes 参数用于确认删除,--no-wait 参数用于返回到命令提示符,而无需等待操作完成。

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

注意

如果使用系统分配的托管标识(本快速入门中的默认标识选项)创建了 AKS 群集,则相应标识将由平台管理,不需要将其删除。

如果使用服务主体创建了 AKS 群集,则删除群集时不会删除该服务主体。 要删除服务主体,请参阅 AKS 服务主体的注意事项和删除

后续步骤

有关使用 Helm 的详细信息,请参阅 Helm 文档