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

  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 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

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