Поделиться через


Установка существующих приложений с помощью Helm в службе Azure Kubernetes Service (AKS)

Helm — это средство упаковки с открытым кодом, которое помогает установить приложения Kubernetes и управлять их жизненным циклом. Как и диспетчеры пакетов Linux, такие как APT и Yum, можно использовать Helm для управления диаграммами Kubernetes, которые являются пакетами предварительно настроенных ресурсов Kubernetes.

В этой статье показано, как настроить и использовать Helm в кластере Kubernetes в Службе Kubernetes в Azure (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 запускаются на правильных узлах. Команды в этой статье используют узловые селекторы, чтобы убедиться, что pods запланированы на правильные узлы, но не все диаграммы 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 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 с именем 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, такие как поды, развертывания и службы.

  • Очистите ресурсы с помощью команды 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.