在 Azure Kubernetes Service (AKS) 中使用 Helm 安裝現有的應用程式
Helm 是開放原始碼的封裝工具,可協助您安裝和管理 Kubernetes 應用程式的生命週期。 類似於 APT 和 Yum 等 Linux 套件管理員,您可以使用 Helm 來管理 Kubernetes 圖表 (即預先設定的 Kubernetes 資源套件)。
本文示範如何在 Azure Kubernetes Service (AKS) 上的 Kubernetes 叢集中設定及使用 Helm。
開始之前
- 本文假設您目前具有 AKS 叢集。 如果您需要 AKS 叢集,請使用 Azure CLI (部分機器翻譯)、Azure PowerShell (部分機器翻譯) 或 Azure 入口網站來建立。
- 您的 AKS 叢集必須具有整合式 ACR。 如需搭配整合式 ACR 建立 AKS 叢集的詳細資料,請參閱從 Azure Kubernetes Service 對 Azure Container Registry 進行驗證 (部分機器翻譯)。
- 您也必須安裝 Helm CLI,這是在開發系統上執行的用戶端。 其可讓您透過 Helm 來啟動、停止和管理應用程式。 如果您使用 Azure Cloud Shell,則已安裝 Helm CLI。 如需本機平台的安裝指示,請參閱安裝 Helm。
重要
Helm 的目的是要在 Linux 節點上執行。 如果您的叢集中有 Windows Server 節點,您必須確定 Helm Pod 只排程在 Linux 節點上執行。 您也必須確定您安裝的任何 Helm 圖表也都已排程在正確的節點上執行。 本文中的命令會使用節點選取器,以確定 Pod 已排程至正確的節點,但並非所有的 Helm 圖表都可能會公開節點選取器。 您也可以考慮在叢集上使用其他選項,例如污點。
確認您的 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 v3 安裝應用程式
新增 Helm 存放庫
使用 helm repo (英文) 命令來新增 ingress-nginx 存放庫。
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
尋找 Helm 圖表
使用 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!⎈
將 Helm 圖表映像匯入您的 ACR
本文使用依賴三個容器映像的 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 圖表匯入至其中。 如需詳細資訊,請參閱將 Helm 圖表推送至 Azure 容器登錄。
執行 Helm 圖表
使用 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 文件。