你当前正在访问 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 订阅,可以创建一个免费帐户。
- 已安装 Azure CLI 或 Azure PowerShell。
- 已安装 Helm v3。
创建 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
已安装。
使用
az aks install-cli
命令在本地安装kubectl
。az aks install-cli
使用
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 图表
- 使用
helm create
命令生成 Helm 图表。
helm create azure-vote-front
- 更新 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
- 使用
helm dependency update
命令更新 Helm 图表依赖项。
helm dependency update azure-vote-front
- 使用以下更改更新 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
...
- 将
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 图表
- 通过
helm install
命令使用 Helm chart 来安装应用程序。
helm install azure-vote-front azure-vote-front/
- 服务可能需要几分钟才能返回公共 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
- 使用
<EXTERNAL-IP>
在浏览器中导航到应用程序的负载均衡器,以查看示例应用程序。
删除群集
使用 az group delete
命令来删除资源组、AKS 群集、容器注册表和 ACR 中存储的容器映像,以及所有相关资源。
az group delete --name myResourceGroup --yes --no-wait
注意
如果 AKS 群集是使用系统分配的托管标识(本快速入门中使用的默认标识选项)创建的,则标识由平台管理,无需删除。
如果改为使用服务主体作为标识选项来创建了 AKS 群集,则在删除群集时,不会删除 AKS 群集使用的服务主体。 有关如何删除服务主体的步骤,请参阅 AKS 服务主体的注意事项和删除。
后续步骤
有关使用 Helm 的详细信息,请参阅 Helm 文档。