Краткое руководство. Разработка в Службе Azure Kubernetes (AKS) с помощью Helm

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

В этом кратком руководстве вы используете Helm для упаковки и запуска приложения в AKS. Сведения об установке существующего приложения с помощью Helm см. в статье "Установка существующих приложений с помощью Helm" в AKS.

Необходимые компоненты

Создание реестра в Реестре контейнеров Azure

Вам нужно хранить образы контейнеров в Реестр контейнеров Azure (ACR), чтобы запустить приложение в кластере AKS с помощью Helm. Имя реестра должно быть уникальным в Azure и содержать 5–50 буквенно-цифровых символов. Разрешены только строчные символы. SKU Базовый — это оптимизированная по стоимости точка входа для целей разработки, обеспечивающая баланс ресурсов хранения и пропускной способности.

  1. Создайте группу ресурсов Azure с помощью команды az group create . В следующем примере создается группа ресурсов с именем myResourceGroup в расположении eastus.

    az group create --name myResourceGroup --location eastus
    
  2. Создайте Реестр контейнеров Azure с уникальным именем, вызвав команду az acr create. В следующем примере создается ACR с именем myhelmacr с номером SKU уровня "Базовый".

    az acr create --resource-group myResourceGroup --name myhelmacr --sku Basic
    

    Выходные данные должны выглядеть примерно так, как в приведенном ниже примере выходных данных. Запишите значение сервера входа для ACR, которое будет использоваться на следующем шаге.

    {
      "adminUserEnabled": false,
      "creationDate": "2023-12-26T22:36:23.998425+00:00",
      "id": "/subscriptions/<ID>/resourceGroups/myResourceGroup/providers/Microsoft.ContainerRegistry/registries/myhelmacr",
      "location": "eastus",
      "loginServer": "myhelmacr.azurecr.io",
      "name": "myhelmacr",
      "networkRuleSet": null,
      "provisioningState": "Succeeded",
      "resourceGroup": "myResourceGroup",
      "sku": {
        "name": "Basic",
        "tier": "Basic"
      },
      "status": null,
      "storageAccount": null,
      "tags": {},
      "type": "Microsoft.ContainerRegistry/registries"
    }
    

Создание кластера AKS

Новому кластеру AKS требуется доступ к ACR для извлечения образов контейнеров и их запуска.

  • Создайте кластер AKS с помощью команды az aks create с --attach-acr параметром, чтобы предоставить кластеру доступ к ACR. В следующем примере создается кластер AKS с именем myAKSCluster и предоставляет ему доступ к ACR myhelmacr . Убедитесь, что вы замените myhelmacr имя ACR.

    az aks create --resource-group myResourceGroup --name myAKSCluster --location eastus --attach-acr myhelmacr --generate-ssh-keys
    

Подключение к кластеру AKS

Чтобы подключить кластер Kubernetes локально, используйте клиент командной строки Kubernetes, kubectl. Если вы используете Azure Cloud Shell, kubectl уже установлен.

  1. Установите kubectl локально с помощью команды az aks install-cli .

    az aks install-cli
    
  2. Настройте в kubectl подключение к кластеру Kubernetes, выполнив команду az aks get-credentials. Следующая команда получает учетные данные для кластера AKS с именем myAKSCluster в myResourceGroup.

    az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
    

Загрузка примера приложения

В этом кратком руководстве рассматривается приложение Azure Vote.

  1. Клонируйте приложение из GitHub с помощью git clone команды.

    git clone https://github.com/Azure-Samples/azure-voting-app-redis.git
    
  2. Перейдите к каталогу azure-votecd с помощью команды.

    cd azure-voting-app-redis/azure-vote/
    

Создание и отправка примера приложения в ACR

  • Создайте и отправьте образ в ACR с помощью команды az acr build . В следующем примере создается образ с именем azure-vote-front:v1 и отправляет его в ACR myhelmacr . Убедитесь, что вы замените myhelmacr имя ACR.

    az acr build --image azure-vote-front:v1 --registry myhelmacr --file Dockerfile .
    

Примечание.

Вы также можете импортировать диаграммы Helm в ACR. Дополнительные сведения см. в статье Отправка и извлечение чартов Helm в Реестре контейнеров Azure.

Создание чарта Helm

  1. Создайте чарт Helm с помощью команды helm create.

    helm create azure-vote-front
    
  2. Обновите azure-vote-front/Chart.yaml , чтобы добавить зависимость для диаграммы redis из https://charts.bitnami.com/bitnami репозитория диаграммы и обновить appVersion его, v1как показано в следующем примере:

    Примечание.

    Версии образа контейнера, показанные в этом руководстве, были протестированы для работы с этим примером, но могут быть не последней доступной версией.

    apiVersion: v2
    name: azure-vote-front
    description: A Helm chart for Kubernetes
    
    dependencies:
      - name: redis
        version: 17.3.17
        repository: https://charts.bitnami.com/bitnami
    
    ...
    # This is the version number of the application being deployed. This version number should be
    # incremented each time you make changes to the application.
    appVersion: v1
    
  3. Обновите зависимости диаграммы Helm с помощью helm dependency update команды.

    helm dependency update azure-vote-front
    
  4. Обновите azure-vote-front/values.yaml следующими изменениями.

    • Добавьте раздел redis, чтобы определить сведения об образе, порт контейнера и имя развертывания.
    • Добавьте backendName для подключения интерфейсной части к развертыванию redis.
    • Измените image.repository на <loginServer>/azure-vote-front.
    • Измените image.tag на v1.
    • Измените service.type на LoadBalancer.

    Например:

    replicaCount: 1
    backendName: azure-vote-backend-master
    redis:
      image:
        registry: mcr.microsoft.com
        repository: oss/bitnami/redis
        tag: 6.0.8
      fullnameOverride: azure-vote-backend
      auth:
        enabled: false
    
    image:
      repository: myhelmacr.azurecr.io/azure-vote-front
      pullPolicy: IfNotPresent
      tag: "v1"
    ...
    service:
      type: LoadBalancer
      port: 80
    ...
    
  5. env Добавьте раздел в azure-vote-front/templates/deployment.yaml, чтобы передать имя развертывания Redis.

    ...
          containers:
            - name: {{ .Chart.Name }}
              securityContext:
                {{- toYaml .Values.securityContext | nindent 12 }}
              image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}"
              imagePullPolicy: {{ .Values.image.pullPolicy }}
              env:
              - name: REDIS
                value: {{ .Values.backendName }}
    ...
    

Запуск чарта Helm

  1. Установите приложение с использованием чарта Helm с помощью команды helm install.

    helm install azure-vote-front azure-vote-front/
    
  2. Возвращение общедоступного IP-адреса службы займет несколько минут. Отслеживайте ход выполнения с помощью команды с kubectl get service аргументом --watch .

    kubectl get service azure-vote-front --watch
    

    Когда служба будет готова, EXTERNAL-IP значение изменяется с <pending> IP-адреса. Нажмите, CTRL+C чтобы остановить kubectl процесс наблюдения.

      NAME               TYPE           CLUSTER-IP    EXTERNAL-IP     PORT(S)        AGE
      azure-vote-front   LoadBalancer   10.0.18.228   <pending>       80:32021/TCP   6s
      ...
      azure-vote-front   LoadBalancer   10.0.18.228   52.188.140.81   80:32021/TCP   2m6s
    
  3. Перейдите к подсистеме балансировки нагрузки приложения в браузере, используя <EXTERNAL-IP> для просмотра примера приложения.

Удаление кластера

  • Удалите группу ресурсов, кластер AKS, реестр контейнеров Azure, образы контейнеров, хранящиеся в ACR, и все связанные ресурсы с помощью команды az group delete с --yes параметром, чтобы подтвердить удаление и --no-wait параметр, чтобы вернуться в командную строку, не ожидая завершения операции.

    az group delete --name myResourceGroup --yes --no-wait
    

Примечание.

Если вы создали кластер AKS с управляемым удостоверением, назначаемым системой (параметр удостоверения по умолчанию в этом кратком руководстве), удостоверение управляется платформой и не требует удаления.

Если вы создали кластер AKS с субъектом-службой, субъект-служба не удаляется при удалении кластера. Чтобы удалить субъект-службу, ознакомьтесь с рекомендациями и удалением субъекта-службы AKS.

Следующие шаги

Дополнительные сведения об использовании Helm см. в документации Helm.