Установка существующих приложений с помощью 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

  1. Выполните поиск предварительно созданных диаграмм 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...
    
  2. Обновите список диаграмм с помощью команды обновления репозитория 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

  1. Установите диаграммы 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'
    ...
    
  2. Получите внешний 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.