Установка существующих приложений с помощью 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 с помощью команды helm repo .
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 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
В этой статье используется чарт 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 install и укажите имя выпуска и имя устанавливаемой диаграммы.
Совет
В следующем примере создается пространство имен Kubernetes с именем ingress-basic для ресурсов ingress, которые затем используют это пространство имен. При необходимости укажите пространство имен для своей среды.
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' ...
Получите EXTERNAL-IP службы с помощью
kubectl get services
команды .kubectl --namespace ingress-basic get services -o wide -w ingress-nginx-ingress-nginx-controller
В следующем примере выходных данных показан external-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 uninstall и укажите имя выпуска.
helm uninstall --namespace ingress-basic ingress-nginx
В следующем примере выходных данных показан удаленный выпуск с именем ingress-nginx :
release "nginx-ingress" uninstalled
Удалите весь пример пространства имен вместе с ресурсами с помощью
kubectl delete
команды и укажите имя пространства имен.kubectl delete namespace ingress-basic
Дальнейшие действия
Дополнительные сведения об управлении развертываниями приложений Kubernetes с помощью Helm см. в документации по Helm.