培训
学习路径
Azure 上的 Kubernetes 简介 - Training
了解 Docker 容器的基础知识、通过 Kubernetes 实现的容器编排,以及 Azure Kubernetes 服务上的托管群集。
认证
Microsoft Certified: Azure Administrator Associate - Certifications
演示在 Microsoft Azure 中配置、管理、保护和管理关键专业功能的关键技能。
你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
Helm 是一种开放源打包工具,有助于安装和管理 Kubernetes 应用程序的生命周期。 与诸如 APT 和 Yum 的 Linux 包管理器类似,可以使用 Helm 管理 Kubernetes 图表,它们是预配置的 Kubernetes 资源包。
本文介绍如何在 Azure Kubernetes 服务 (AKS) 上的 Kubernetes 群集中配置和使用 Helm
重要
Helm 要在 Linux 节点上运行。 如果群集中有 Windows Server 节点,则必须确保 Helm Pod 仅计划在 Linux 节点上运行。 还需要确保所安装的所有 Helm 图表也计划在正确的节点上运行。 本文中的命令使用节点选择器,确保将 Pod 安排到正确的节点,但并非所有 Helm 图表都可以公开节点选择器。 还可以考虑使用群集上的其他选项,例如排斥。
使用 helm version
命令来验证你已安装 Helm 3。
helm version
以下示例输出显示了安装的 Helm 版本 3.0.0:
version.BuildInfo{Version:"v3.0.0", GitCommit:"e29ce2a54e96cd02ccfce88bee4f58bb6e2a28b6", GitTreeState:"clean", GoVersion:"go1.13.4"}
使用 helm repo 命令添加 ingress-nginx 存储库。
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
使用 helm search 命令搜索预创建的 Helm 图表。
helm search repo ingress-nginx
以下精简示例输出显示了一些可供使用的 Helm 图表:
NAME CHART VERSION APP VERSION DESCRIPTION
ingress-nginx/ingress-nginx 4.7.0 1.8.0 Ingress controller for Kubernetes using NGINX a...
使用 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!⎈
本文使用 NGINX 入口控制器 Helm 图表,它依赖于三个容器映像。
使用 az acr import
将 NGINX 入口控制器映像导入 ACR。
REGISTRY_NAME=<REGISTRY_NAME>
CONTROLLER_REGISTRY=registry.k8s.io
CONTROLLER_IMAGE=ingress-nginx/controller
CONTROLLER_TAG=v1.8.0
PATCH_REGISTRY=registry.k8s.io
PATCH_IMAGE=ingress-nginx/kube-webhook-certgen
PATCH_TAG=v20230407
DEFAULTBACKEND_REGISTRY=registry.k8s.io
DEFAULTBACKEND_IMAGE=defaultbackend-amd64
DEFAULTBACKEND_TAG=1.5
az acr import --name $REGISTRY_NAME --source $CONTROLLER_REGISTRY/$CONTROLLER_IMAGE:$CONTROLLER_TAG --image $CONTROLLER_IMAGE:$CONTROLLER_TAG
az acr import --name $REGISTRY_NAME --source $PATCH_REGISTRY/$PATCH_IMAGE:$PATCH_TAG --image $PATCH_IMAGE:$PATCH_TAG
az acr import --name $REGISTRY_NAME --source $DEFAULTBACKEND_REGISTRY/$DEFAULTBACKEND_IMAGE:$DEFAULTBACKEND_TAG --image $DEFAULTBACKEND_IMAGE:$DEFAULTBACKEND_TAG
备注
除了将容器映像导入 ACR 之外,还可以将 Helm 图表导入 ACR。 有关详细信息,请参阅将 Helm 图表推送和拉取到 Azure 容器注册表。
使用 helm install 命令安装 Helm 图表,并指定版本名称和要安装的图表的名称。
提示
以下示例为名为 ingress-basic 的入口资源创建 Kubernetes 命名空间,目的是在该命名空间内执行操作。 根据需要为你自己的环境指定一个命名空间。
ACR_URL=<REGISTRY_URL>
# Create a namespace for your ingress resources
kubectl create namespace ingress-basic
# Use Helm to deploy an NGINX ingress controller
helm install ingress-nginx ingress-nginx/ingress-nginx \
--version 4.0.13 \
--namespace ingress-basic \
--set controller.replicaCount=2 \
--set controller.nodeSelector."kubernetes\.io/os"=linux \
--set controller.image.registry=$ACR_URL \
--set controller.image.image=$CONTROLLER_IMAGE \
--set controller.image.tag=$CONTROLLER_TAG \
--set controller.image.digest="" \
--set controller.admissionWebhooks.patch.nodeSelector."kubernetes\.io/os"=linux \
--set controller.service.annotations."service\.beta\.kubernetes\.io/azure-load-balancer-health-probe-request-path"=/healthz \
--set controller.admissionWebhooks.patch.image.registry=$ACR_URL \
--set controller.admissionWebhooks.patch.image.image=$PATCH_IMAGE \
--set controller.admissionWebhooks.patch.image.tag=$PATCH_TAG \
--set defaultBackend.nodeSelector."kubernetes\.io/os"=linux \
--set defaultBackend.image.registry=$ACR_URL \
--set defaultBackend.image.image=$DEFAULTBACKEND_IMAGE \
--set defaultBackend.image.tag=$DEFAULTBACKEND_TAG \
--set defaultBackend.image.digest=""
以下精简示例输出显示了 Helm 图表创建的 Kubernetes 资源的部署状态:
NAME: nginx-ingress
LAST DEPLOYED: Wed Jul 28 11:35:29 2021
NAMESPACE: ingress-basic
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
The ingress-nginx 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 ingress-basic get services -o wide -w nginx-ingress-ingress-nginx-controller'
...
使用 kubectl get services
命令获取服务的 EXTERNAL-IP。
kubectl --namespace ingress-basic get services -o wide -w ingress-nginx-ingress-nginx-controller
以下示例输出显示了 ingress-nginx-ingress-nginx-controller 服务的 EXTERNAL-IP:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR
nginx-ingress-ingress-nginx-controller LoadBalancer 10.0.254.93 <EXTERNAL_IP> 80:30004/TCP,443:30348/TCP 61s app.kubernetes.io/component=controller,app.kubernetes.io/instance=nginx-ingress,app.kubernetes.io/name=ingress-nginx
使用 helm list
命令获取群集上已安装的版本列表。
helm list --namespace ingress-basic
以下示例输出显示了上一步中部署的 ingress-nginx 版本:
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
ingress-nginx ingress-basic 1 2021-07-28 11:35:29.9623734 -0500 CDT deployed ingress-nginx-3.34.0 0.47.0
部署 Helm 图表后,会创建 Kubernetes 资源,例如 Pod、部署和服务。
使用 helm uninstall 命令清理资源,并指定版本名称。
helm uninstall --namespace ingress-basic ingress-nginx
下面的示例输出显示了名为 ingress-nginx 的版本已卸载:
release "nginx-ingress" uninstalled
使用 kubectl delete
命令来删除整个示例命名空间和资源,并指定命名空间名称。
kubectl delete namespace ingress-basic
有关使用 Helm 管理 Kubernetes 应用程序部署的详细信息,请参阅 Helm 文档。
培训
学习路径
Azure 上的 Kubernetes 简介 - Training
了解 Docker 容器的基础知识、通过 Kubernetes 实现的容器编排,以及 Azure Kubernetes 服务上的托管群集。
认证
Microsoft Certified: Azure Administrator Associate - Certifications
演示在 Microsoft Azure 中配置、管理、保护和管理关键专业功能的关键技能。