您现在访问的是微软AZURE全球版技术文档网站,若需要访问由世纪互联运营的MICROSOFT AZURE中国区技术文档网站,请访问 https://docs.azure.cn.

使用 Helm 在 Azure Kubernetes 服务 (AKS) 中安装现有应用程序

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

本文介绍如何在 AKS 上的 Kubernetes 群集中配置和使用 Helm。

准备阶段

本文假定你拥有现有的 AKS 群集。 如果需要 AKS 群集,请参阅 AKS 快速入门使用 Azure CLI使用 Azure 门户

还需要安装 Helm CLI,这是在开发系统上运行的客户端。 它允许你使用 Helm 启动、停止和管理应用程序。 如果使用 Azure Cloud Shell,则已安装 Helm CLI。 有关本地平台上的安装说明,请参阅安装 Helm

重要

Helm 要在 Linux 节点上运行。 如果群集中有 Windows Server 节点,则必须确保 Helm Pod 仅计划在 Linux 节点上运行。 还需要确保所安装的所有 Helm 图表也计划在正确的节点上运行。 本文中的命令使用 [节点选择器][k8s-节点选择器],以确保将 Pod 安排到正确的节点,但并非所有 Helm 图表都可以公开节点选择器。 还可以考虑使用群集上的其他选项,例如排斥

验证 Helm 版本

使用 helm version 命令来验证已安装 Helm 3:

helm version

以下示例演示了安装的 Helm 版本 3.0.0:

$ helm version

version.BuildInfo{Version:"v3.0.0", GitCommit:"e29ce2a54e96cd02ccfce88bee4f58bb6e2a28b6", GitTreeState:"clean", GoVersion:"go1.13.4"}

使用 Helm v3 安装应用程序

添加 Helm 存储库

使用 helm repo 命令添加 ingress-nginx 存储库。

helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx

查找 Helm 图表

Helm 图表用来将应用程序部署到 Kubernetes 群集中。 若要搜索预创建的 Helm 图表,请使用 helm search 命令:

helm search repo ingress-nginx

以下精简示例输出显示了一些可供使用的 Helm 图表:

$ helm search repo ingress-nginx

NAME                            CHART VERSION   APP VERSION     DESCRIPTION                                       
ingress-nginx/ingress-nginx     2.12.0          0.34.1          Ingress controller for Kubernetes using NGINX a...

若要更新图表列表,请使用 helm repo update 命令。

helm repo update

以下示例显示了成功的存储库更新:

$ helm repo update

Hang tight while we grab the latest from your chart repositories...
...Successfully got an update from the "ingress-nginx" chart repository
Update Complete. ⎈ Happy Helming!⎈

运行 Helm 图表

若要使用 Helm 安装图表,请使用 helm install 命令并指定版本名称和要安装的图表的名称。 若要查看实际安装的 Helm 图表,让我们使用 Helm 图表安装基本的 nginx 部署。

helm install my-nginx-ingress ingress-nginx/ingress-nginx \
    --set controller.nodeSelector."beta\.kubernetes\.io/os"=linux \
    --set defaultBackend.nodeSelector."beta\.kubernetes\.io/os"=linux

以下精简示例输出显示了 Helm 图表创建的 Kubernetes 资源的部署状态:

$ helm install my-nginx-ingress ingress-nginx/ingress-nginx \
>     --set controller.nodeSelector."beta\.kubernetes\.io/os"=linux \
>     --set defaultBackend.nodeSelector."beta\.kubernetes\.io/os"=linux

NAME: my-nginx-ingress
LAST DEPLOYED: Fri Nov 22 10:08:06 2019
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
The nginx-ingress controller has been installed.
It may take a few minutes for the LoadBalancer IP to be available.
You can watch the status by running 'kubectl --namespace default get services -o wide -w my-nginx-ingress-ingress-nginx-controller'
...

使用 kubectl get services 命令获取服务的 EXTERNAL-IP

kubectl --namespace default get services -o wide -w my-nginx-ingress-ingress-nginx-controller

例如,下面的命令显示 my-nginx-ingress-ingress-nginx-controller 服务的 EXTERNAL-IP :

$ kubectl --namespace default get services -o wide -w my-nginx-ingress-ingress-nginx-controller

NAME                                        TYPE           CLUSTER-IP   EXTERNAL-IP      PORT(S)                      AGE   SELECTOR
my-nginx-ingress-ingress-nginx-controller   LoadBalancer   10.0.2.237   <EXTERNAL-IP>    80:31380/TCP,443:32239/TCP   72s   app.kubernetes.io/component=controller,app.kubernetes.io/instance=my-nginx-ingress,app.kubernetes.io/name=ingress-nginx

列出版本

若要查看群集上已安装的版本列表,请使用 helm list 命令。

helm list

以下示例显示了上一步中部署的 my-nginx-ingress 版本:

$ helm list

NAME                NAMESPACE   REVISION    UPDATED                                 STATUS      CHART                   APP VERSION
my-nginx-ingress    default     1           2019-11-22 10:08:06.048477 -0600 CST    deployed    nginx-ingress-1.25.0    0.26.1 

清理资源

在部署 Helm 图表时,会创建若干 Kubernetes 资源。 这些资源包括 pod、部署和服务。 若要清理这些资源,请使用 helm uninstall 命令并指定版本名称,如上一个 helm list 命令中所示。

helm uninstall my-nginx-ingress

下面的示例显示了已卸载的名为 my-nginx-ingress 的版本:

$ helm uninstall my-nginx-ingress

release "my-nginx-ingress" uninstalled

后续步骤

有关使用 Helm 管理 Kubernetes 应用程序部署的详细信息,请参阅 Helm 文档。