Установка существующих приложений с помощью Helm в службе Azure Kubernetes
Helm — это средство упаковки с открытым кодом, которое помогает установить приложения Kubernetes и управлять их жизненным циклом. Как и диспетчеры пакетов Linux, такие как APT и Yum, можно использовать Helm для управления диаграммами Kubernetes, которые являются пакетами предварительно настроенных ресурсов Kubernetes.
В этой статье показано, как настроить и использовать Helm в кластере Kubernetes в Служба Azure Kubernetes (AKS).
Подготовка к работе
- В этой статье предполагается, что у вас есть существующий кластер AKS. Если вам нужен кластер AKS, создайте его с помощью Azure CLI, Azure PowerShell или портал Azure.
- Кластер AKS должен иметь интегрированный ACR. Дополнительные сведения о создании кластера AKS с интегрированным ACR см. в статье Аутентификация с помощью Реестр контейнеров Azure из Служба Azure Kubernetes.
- Также нужен установленный интерфейс командной строки Helm, представляющий собой клиент, выполняемый в вашей системе разработки. Он позволяет запускать и останавливать работу приложений, а также управлять ими с помощью Helm. Если вы используете Azure Cloud Shell, интерфейс командной строки Helm уже установлен. Инструкции по установке для вашей локальной платформы см. в разделе Установка Helm.
Внимание
Helm предназначен для работы на узлах Linux. Если в кластере есть узлы Windows Server, необходимо убедиться, что запуск объектов pod Helm запланирован только на узлах 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
Добавьте репозиторий ingress-nginx с помощью команды repo helm.
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
Поиск чартов Helm
Выполните поиск предварительно созданных диаграмм Helm с помощью команды поиска 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.
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
В этой статье используется чарт Helm контроллера объекта ingress NGINXing, в котором применяются три образа контейнеров.
Используйте
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 с помощью команды установки helm и укажите имя выпуска и имя диаграммы для установки.
Совет
В следующем примере для ресурсов Ingress создается пространство имен Kubernetes с именем ingress-basic, которое затем используется в этом примере. При необходимости укажите пространство имен для своего окружения.
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=""
В следующем кратком примере выходные данные содержат состояние развертывания ресурсов Kubernetes, созданное чартом Helm:
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' ...
Получите внешний IP-адрес службы с помощью
kubectl get services
команды.kubectl --namespace ingress-basic get services -o wide -w ingress-nginx-ingress-nginx-controller
В следующем примере выходных данных показан внешний IP-адрес для службы контроллера ingress-nginx-ingress-nginx-controller :
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 и укажите имя выпуска.
helm uninstall --namespace ingress-basic ingress-nginx
В следующем примере выходных данных показано, что выпуск с именем ingress-nginx удален:
release "nginx-ingress" uninstalled
Удалите все образец пространства имен вместе с ресурсами с помощью
kubectl delete
команды и укажите имя пространства имен.kubectl delete namespace ingress-basic
Следующие шаги
Дополнительные сведения об управлении развертываниями приложений Kubernetes с помощью Helm см. в документации по Helm.
Azure Kubernetes Service