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


Создание и развертывание в службе Azure Kubernetes с помощью Azure Pipelines

Azure DevOps Services

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

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

Prerequisites

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

Форкните следующий репозиторий, содержащий образец приложения и 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. Установите флажок "Включить приложение для обзора Pull Requests" для включения приложения для обзора, связанного с автоматически сгенерированным YAML-конвейером на следующих шагах.

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

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

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

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

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

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

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

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

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

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

Note

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

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

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

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

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

  4. Перейдите на вкладку "Службы ".

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

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

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

Как строится конвейер обработки данных

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

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

- 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 для создания элементов, необходимых узлам кластера Kubernetes для извлечения из ресурса реестра контейнеров Azure. Затем файлы манифеста используются задачей Kubernetes, работающей с манифестами, для развертывания в кластере Kubernetes. Файлы service.yml манифеста и deployment.yml были созданы при использовании шаблона Deploy to Azure Kubernetes Service.

- 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@1
            displayName: Create imagePullSecret
            inputs:
              action: 'createSecret'
              connectionType: 'kubernetesServiceConnection'
              kubernetesServiceConnection: 'myapp-default' #customize for your Kubernetes service connection
              secretType: 'dockerRegistry'
              secretName: '$(imagePullSecret)'
              dockerRegistryEndpoint: '$(dockerRegistryServiceConnection)'

          - task: KubernetesManifest@1
            displayName: Deploy to Kubernetes cluster
            inputs:
              action: 'deploy'
              connectionType: 'kubernetesServiceConnection'
              kubernetesServiceConnection: 'myapp-default' #customize for your Kubernetes service connection
              manifests: |
                $(Pipeline.Workspace)/manifests/deployment.yml
                $(Pipeline.Workspace)/manifests/service.yml
              containers: '$(containerRegistry)/$(imageRepository):$(tag)'
              imagePullSecrets: '$(imagePullSecret)'

Очистите ресурсы

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

az group delete --name myapp-rg

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