你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

快速入门:使用 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 是一个针对成本优化的入口点,适用于可以对存储和吞吐量进行均衡考虑的开发目的。

以下示例使用 az acr create 命令在 myResourceGroup 中创建使用基本 SKU 的名为 myhelmacr 的 ACR。

备注

你选择的 ACR 名称必须在 azurecr.io 域中是唯一的。 如果你指定了现有的 ACR 名称,则会返回错误,且不会创建 ACR。

az group create --name myResourceGroup --location eastus
az acr create --resource-group MyResourceGroup --name myhelmacr --sku Basic

输出类似于以下示例输出。 请记下 ACR 的 loginServer 值,因为稍后的步骤会用到它。

{
  "adminUserEnabled": false,
  "creationDate": "2019-06-11T13:35:17.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 命令创建名为 myAKSCluster 的 AKS 群集,并使用 --attach-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 Vote 应用程序。 从 GitHub 克隆应用程序,并使用以下命令导航到 azure-vote 目录:

git clone https://github.com/Azure-Samples/azure-voting-app-redis.git
cd azure-voting-app-redis/azure-vote/

生成并将示例应用程序推送到 ACR

使用前面的 Dockerfile,运行 az acr build 命令来生成映像并将该映像推送到注册表。 命令末尾的 . 提供源代码目录路径的位置(在本例中为当前目录)。 --file 参数使用 Dockerfile 相对于此源代码目录路径的路径。

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

注意

除了将容器映像导入 ACR 之外,还可以将 Helm 图表导入 ACR。 有关详细信息,请参阅将 Helm 图表推送和拉取到 Azure 容器注册表

创建 Helm 图表

  1. 使用 helm create 命令生成 Helm 图表。
helm create azure-vote-front
  1. 更新 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
  1. 使用 helm dependency update 命令更新 Helm 图表依赖项。
helm dependency update azure-vote-front
  1. 使用以下更改更新 azure-vote-front/values.yaml:
  • 添加 redis 部分,以设置映像详细信息、容器端口和部署名称。
  • 添加 backendName,将前端部分连接到 redis 部署 。
  • 将 image.repository 更改为 <loginServer>/azure-vote-front
  • 将 image.tag 更改为 v1
  • 将 service.type 更改为 LoadBalancer 。

例如:

# Default values for azure-vote-front.
# This is a YAML-formatted file.
# Declare variables to be passed into your templates.

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
...
  1. 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/
  1. 服务可能需要几分钟才能返回公共 IP 地址。 使用带有 --watch 参数的 kubectl get service 命令来监视进度。
$ kubectl get service azure-vote-front --watch
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
  1. 使用 <EXTERNAL-IP> 在浏览器中导航到应用程序的负载均衡器,以查看示例应用程序。

删除群集

使用 az group delete 命令来删除资源组、AKS 群集、容器注册表和 ACR 中存储的容器映像,以及所有相关资源。

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

注意

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

如果改为使用服务主体作为标识选项来创建了 AKS 群集,则在删除群集时,不会删除 AKS 群集使用的服务主体。 有关如何删除服务主体的步骤,请参阅 AKS 服务主体的注意事项和删除

后续步骤

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