Сборка и развертывание в Службе Azure Kubernetes с помощью Azure Pipelines | Документация Майкрософт.

Azure DevOps Services

Конвейеры Azure Pipelines предназначены для автоматизации развертывания в Службе Azure Kubernetes (AKS). Azure Pipelines позволяет создавать, тестировать и развертывать ресурсы с использованием технологий непрерывной интеграции (CI) и непрерывной поставки (CD) в Azure DevOps.

В этой статье вы узнаете, как создать конвейер, который непрерывно собирает и развертывает ваши приложения. Каждый раз при изменении кода в репозитории, содержащем Dockerfile, образы отправляются в Реестр контейнеров Azure, а манифесты развертываются в кластере AKS.

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

Получение кода

Создайте вилку следующего репозитория, содержащего пример приложения и Dockerfile:

https://github.com/MicrosoftDocs/pipelines-javascript-docker

Создание ресурсов Azure

Войдите на портал Azure, а затем нажмите кнопку Cloud Shell в правом верхнем углу. Используйте Azure CLI или PowerShell для создания кластера AKS.

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

# Create a resource group
az group create --name myapp-rg --location eastus

# Create a container registry
az acr create --resource-group myapp-rg --name mycontainerregistry --sku Basic

# Create a Kubernetes cluster
az aks create \
    --resource-group myapp-rg \
    --name myapp \
    --node-count 1 \
    --enable-addons monitoring \
    --generate-ssh-keys

Вход в Azure Pipelines

Войдите в Azure Pipelines. После входа в браузере откроется https://dev.azure.com/my-organization-name и отобразится панель мониторинга Azure DevOps.

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

Создание конвейера

Подключение и выбор репозитория

  1. Войдите в свою организацию Azure DevOps и откройте нужный проект.

  2. Выберите Конвейеры, а затем — Новый конвейер.

  3. Выполните все шаги мастера, выбрав GitHub в качестве расположения исходного кода.

  4. Возможно, вам придется выполнить вход в GitHub. Для этого введите учетные данные GitHub.

  5. Когда появится список репозиториев, выберите свой.

  6. Вы можете перенаправиться на GitHub, чтобы установить приложение Azure Pipelines. В этом случае выберите " Утвердить" и "Установить".

  7. Выберите Развернуть в Службе Azure Kubernetes.

  8. При появлении запроса выберите подписку, в которой были созданы реестр и кластер.

  9. Выберите кластер myapp.

  10. В качестве пространства имен выберите существующее, а затем — По умолчанию.

  11. Выберите имя своего реестра контейнеров.

  12. Можно оставить имя образа по умолчанию.

  13. Задайте для порта службы значение 8080.

  14. Установите флажок "Включить приложение проверки для запросов на вытягивание" для проверки конфигурации приложения, связанной с конвейером YAML, автоматически сформированного в последующих шагах.

  15. Выберите " Проверить и настроить".

    Процесс создания конвейера в Azure Pipelines будет следующим:

    • Создайте подключение к службе реестра Docker, чтобы позволить конвейеру отправлять образы в реестр контейнеров.

    • Создайте среду и ресурс Kubernetes в этой среде. Для кластера с поддержкой RBAC созданный ресурс Kubernetes неявно создает в кластере объекты ServiceAccount и RoleBinding, чтобы созданные учетная запись ServiceAccount не могла выполнять операции вне выбранного пространства имен.

    • Создайте файл azure-pipelines.yml, который определяет ваш конвейер.

    • Создайте файлы манифеста Kubernetes. Эти файлы создаются путем заполнения шаблонов deployment.yml и service.yml на основе выбранных параметров. Когда будете готовы, выберите Сохранить и запустить.

  16. Выберите Сохранить и выполнить.

  17. Вы можете изменить сообщение о фиксации на что-то наподобие Добавление конвейера в наш репозиторий. Когда будете готовы, выберите Сохранить и запустить, чтобы зафиксировать новый конвейер в репозитории, после чего можно будет запустить новый конвейер в первый раз.

Отслеживание развертывания приложения

По мере выполнения конвейера наблюдайте за тем, как этап сборки, а затем этап развертывания переходят от синего цвета (выполняется) к зеленому (завершено). Вы можете выбирать этапы и задания для отслеживания конвейера в действии.

Примечание.

Если вы используете размещенный агент Microsoft, необходимо добавить диапазон IP-адресов этого агента в брандмауэр. Еженедельный список диапазонов IP-адресов доступен в файле JSON, который публикуется каждую среду. Новые диапазоны IP-адресов вступают в силу со следующего понедельника. Дополнительные сведения см. в разделе Агенты, размещенные на сервере Microsoft. Чтобы найти диапазоны IP-адресов, которые необходимы вашей организации Azure DevOps, узнайте, как определить возможные диапазоны IP-адресов для агентов, размещенных на сервере Microsoft.

После выполнения конвейера проанализируйте результаты, а затем посмотрите, как было развернуто ваше приложение. Из сводки по конвейеру:

  1. Перейдите на вкладку Среды.

  2. Выберите Просмотр среды.

  3. Выберите экземпляр своего приложения для пространства имен, в которое вы его развернули. Если вы использовали значения по умолчанию, это приложение myapp в пространстве имен по умолчанию .

  4. Откройте вкладку Службы.

  5. Выберите общедоступный IP-адрес и скопируйте его в буфер обмена.

  6. Откройте новую вкладку или окно браузера и введите <IP-адрес>:8080.

Если вы создаете пример приложения, в браузере появится сообщение Hello world.

Как выполняется построение конвейера

После выбора параметров и перехода к проверке и настройке служба Azure Pipelines создает для вас конвейер на основе шаблона развертывания в Службе Azure Kubernetes.

На этапе сборки для сборки и отправки образа в Реестр контейнеров Azure используется задача Docker.

- stage: Build
  displayName: Build stage
  jobs:  
  - job: Build
    displayName: Build job
    pool:
      vmImage: $(vmImageName)
    steps:
    - task: Docker@2
      displayName: Build and push an image to container registry
      inputs:
        command: buildAndPush
        repository: $(imageRepository)
        dockerfile: $(dockerfilePath)
        containerRegistry: $(dockerRegistryServiceConnection)
        tags: |
          $(tag)

    - task: PublishPipelineArtifact@1
      inputs:
        artifactName: 'manifests'
        path: 'manifests'

Задание развертывания использует задачу манифеста Kubernetes, чтобы создать объект imagePullSecret, необходимый узлам кластера Kubernetes для извлечения данных из ресурса Реестра контейнеров Azure. Файлы манифеста затем используются задачей манифеста Kubernetes для развертывания в кластере Kubernetes. Файлы service.yml манифеста и deployment.ymlбыли созданы при использовании шаблона Deploy для Служба Azure Kubernetes.

- stage: Deploy
  displayName: Deploy stage
  dependsOn: Build
  jobs:
  - deployment: Deploy
    displayName: Deploy job
    pool:
      vmImage: $(vmImageName)
    environment: 'myenv.aksnamespace' #customize with your environment
    strategy:
      runOnce:
        deploy:
          steps:
          - task: DownloadPipelineArtifact@2
            inputs:
              artifactName: 'manifests'
              downloadPath: '$(System.ArtifactsDirectory)/manifests'

          - task: KubernetesManifest@0
            displayName: Create imagePullSecret
            inputs:
              action: createSecret
              secretName: $(imagePullSecret)
              namespace: $(k8sNamespace)
              dockerRegistryEndpoint: $(dockerRegistryServiceConnection)

          - task: KubernetesManifest@0
            displayName: Deploy to Kubernetes cluster
            inputs:
              action: deploy
              namespace: $(k8sNamespace)
              manifests: |
                $(System.ArtifactsDirectory)/manifests/deployment.yml
                $(System.ArtifactsDirectory)/manifests/service.yml
              imagePullSecrets: |
                $(imagePullSecret)
              containers: |
                $(containerRegistry)/$(imageRepository):$(tag)

Очистка ресурсов

Завершив работу с созданными ресурсами, вы можете удалить их с помощью следующей команды:

az group delete --name myapp-rg

Введите y при появлении запроса.

Azure DevOps Services | Azure DevOps Server 2020 | Azure DevOps Server 2019

Конвейеры Azure Pipelines предназначены для автоматизации развертывания в Службе Azure Kubernetes (AKS). Azure Pipelines позволяет создавать, тестировать и развертывать ресурсы с использованием технологий непрерывной интеграции (CI) и непрерывной поставки (CD) в Azure DevOps.

В этой статье вы узнаете, как создать конвейер, который непрерывно собирает и развертывает ваши приложения. Каждый раз при изменении кода в репозитории, содержащем Dockerfile, образы отправляются в Реестр контейнеров Azure, а манифесты развертываются в кластере AKS.

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

Получение кода

Создайте вилку следующего репозитория, содержащего пример приложения и Dockerfile:

https://github.com/MicrosoftDocs/pipelines-javascript-docker

Создание ресурсов Azure

Войдите на портал Azure, а затем нажмите кнопку Cloud Shell в правом верхнем углу. Используйте Azure CLI или PowerShell для создания кластера AKS.

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

# Create a resource group
az group create --name myapp-rg --location eastus

# Create a container registry
az acr create --resource-group myapp-rg --name mycontainerregistry --sku Basic

# Create a Kubernetes cluster
az aks create \
    --resource-group myapp-rg \
    --name myapp \
    --node-count 1 \
    --enable-addons monitoring \
    --generate-ssh-keys 

Настройка проверки подлинности

При использовании Реестра контейнеров Azure (ACR) со Службой Azure Kubernetes (AKS) необходимо установить механизм аутентификации. Это можно сделать двумя способами:

  1. Предоставить AKS доступ к ACR. См. раздел Аутентификация с помощью Реестра контейнеров Azure из Службы Azure Kubernetes.

  2. Использовать секрет для извлечения образа Kubernetes. Секрет для извлечения образа можно создать с помощью задачи развертывания Kubernetes.

Создание конвейера выпуска

Конвейер сборки, используемый для настройки CI, уже создал образ Docker и отправил его в Реестр контейнеров Azure. Он также упаковал и опубликовал диаграмму Helm в качестве артефакта. В конвейере выпуска мы развернем образ контейнера как приложение Helm в кластере AKS.

  1. В Azure Pipelines открыть сводку для своей сборки.

  2. В сводке сборки щелкните значок Выпуск, чтобы запустить новый конвейер выпуска.

    Если вы ранее создали конвейер выпуска, использующий эти артефакты сборки, вам будет предложено создать новый выпуск. В этом случае перейдите на страницу Выпуски и запустите из него новый конвейер выпуска, выбрав значок +.

  3. Выберите шаблон Пустое задание.

  4. Откройте страницу Задачи и выберите Задание агента.

  5. Выберите +, чтобы добавить новую задачу, и добавьте задачу Установщик средства Helm. В результате на агенте, выполняющем последующие задачи, будут установлены Helm и Kubectl.

  6. Снова выберите команду + и добавьте задачу Упаковка и развертывание диаграмм Helm. Настройте параметры для этой задачи следующим образом:

    • Тип подключения: выберите Azure Resource Manager, чтобы подключиться к кластеру AKS с использованием подключения к службе Azure. Кроме того, если вы хотите подключиться к какому-либо кластеру Kubernetes с помощью kubeconfig или учетной записи службы, можно выбрать Подключение к службе Kubernetes. В этом случае для следующего параметра вместо подписки Azure необходимо создать и выбрать подключение к службы Kubernetes.

    • Подписка Azure: выберите подключение из списка Доступные подключения к службе Azure или создайте подключение с ограниченными разрешениями к вашей подписке Azure. Если рядом с полем ввода появится кнопка Авторизовать, используйте ее для авторизации подключения к подписке Azure. Если нужная подписка Azure не отображается в списке подписок, настройте подключение вручную с помощью раздела Создание подключения к службе Azure.

    • Группа ресурсов: введите или выберите группу ресурсов, содержащую ваш кластер AKS.

    • Кластер Kubernetes: введите или выберите созданный вами кластер AKS.

    • Команда: выберите init в качестве команды Helm. Это устанавливает Тиллер в запущенный кластер Kubernetes. Также будет настроена необходимая локальная конфигурация. Чтобы установить последнюю предварительную версию Тиллера, используйте версию канарского образа. Вы также можете обновить Тиллер, если он предварительно установлен, нажав кнопку "Обновить Тиллер". Если эти параметры включены, задача выполняется helm init --canary-image --upgrade

  7. Выберите + в задании агента и добавьте еще одну задачу Упаковка и развертывание диаграмм Helm. Настройте параметры для этой задачи следующим образом:

    • Кластер Kubernetes: введите или выберите созданный вами кластер AKS.

    • Пространство имен: укажите пространство имен своего кластера Kubernetes, в котором требуется развернуть приложение. Kubernetes поддерживает возможность создания нескольких виртуальных кластеров на базе одного физического. Эти виртуальные кластеры называются пространствами имен. Пространства имен можно использовать для создания в одном кластере разных сред, например для разработки, тестирования и промежуточного хранения.

    • Команда: выберите upgrade в качестве команды Helm. С помощью этой задачи вы можете выполнить любую команду Helm и передать ей параметры в качестве аргументов. При выборе варианта upgrade в задаче появится еще несколько полей:

      • Тип диаграммы: выберите Путь к файлу. Кроме того, можно указать имя диаграммы, если необходимо задать для нее URL-адрес или название. Например, если имя диаграммы имеется stable/mysql, задача выполняется helm upgrade stable/mysql

      • Путь к диаграмме: это может быть путь к упакованной диаграмме или к каталогу распакованной диаграммы. В этом примере выполняется публикация диаграммы с помощью сборки CI, поэтому выберите файловый пакет с помощью средства выбора файлов или введите $(System.DefaultWorkingDirectory)/**/*.tgz.

      • Имя выпуска: введите имя выпуска, например azuredevops.

      • Повторное создание модулей pod. Установите этот флажок, если во время выпуска изменится конфигурация, и вы хотите заменить запущенный модуль pod новой конфигурацией.

      • Сброс значений: установите этот флажок, если хотите, чтобы встроенные в диаграмму значения переопределяли все значения, предоставленные задачей.

      • Применить: установите этот флажок, если в случае конфликтов необходимо выполнять обновление и откат для удаления, повторного создания и повторной установки всего выпуска. Это полезно в случаях, когда применение исправлений может завершиться неудачей (например, для служб, так как IP-адрес кластера не меняется).

      • Аргументы: введите аргументы команды Helm и их значения; для этого примера --set image.repository=$(imageRepoName) --set image.tag=$(Build.BuildId) Причины для использования этих аргументов описаны в этом разделе.

      • Включить TLS: установите этот флажок, чтобы включить надежное подключение на основе TLS между Helm и Tiller.

      • Сертификат ЦС: укажите сертификат ЦС, который будет отправлен и использован для выпуска сертификатов для клиента Tiller и Helm.

      • Сертификат: укажите сертификат Tiller или сертификат клиента Helm.

      • Ключ: укажите ключ Tiller или ключ клиента Helm.

  8. На странице Переменные конвейера добавьте переменную с именем imageRepoName и установите в качестве значения имя репозитория образов Helm. Обычно это значение имеет формат example.azurecr.io/coderepository

  9. Сохраните конвейер выпуска.

Аргументы, используемые в задаче обновления Helm

В конвейере сборки образ контейнера помечается тегом $(Build.BuildId) и передается в Реестр контейнеров Azure. На диаграмме Helm можно параметризовать сведения об образе контейнера, такие как имя и тег, так как одну и ту же диаграмму можно использовать для развертывания в разных средах. Эти значения также можно указать в файле values.yaml или переопределить с помощью предоставленного пользователем файла значений, который, в свою очередь, может быть переопределен параметрами --set во время установки или обновления Helm.

В этом примере мы передаем следующие аргументы:

--set image.repository=$(imageRepoName) --set image.tag=$(Build.BuildId)

Значение $(imageRepoName) было задано на странице Переменные (или в разделе Variables файла YAML). Кроме того, можно напрямую заменить его именем репозитория образов в значении аргумента --set или в файле values.yaml. Например:

  image:
    repository: VALUE_TO_BE_OVERRIDDEN
    tag: latest

Альтернативный вариант — передать в параметре Установить значения задачи список значений аргументов в виде пар "ключ-значение" через6 запятую.

Создание выпуска для развертывания приложения

Теперь все готово для создания выпуска — запуска конвейера выпуска с артефактами, созданными определенной сборкой. Это приводит к развертыванию сборки:

  1. Щелкните + Выпуск и выберите Создать выпуск.

  2. На панели Создание нового выпуска убедитесь, что выбрана нужная версия артефакта, и нажмите кнопку Создать.

  3. Перейдите по ссылке на выпуск в сообщении на информационной панели. Пример: "Создан выпуск Release-1".

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