Развертывание в Kubernetes
Azure DevOps Services | Azure DevOps Server 2022
Azure Pipelines можно использовать для развертывания в Служба Azure Kubernetes и кластерах Kubernetes, предлагаемых другими поставщиками облачных служб. Azure Pipelines имеет две задачи для работы с Kubernetes:
- Задача KubernetesManifest: создание и развертывание манифестов в кластерах Kubernetes с помощью Helm, Kompose или Kustomize
- Задача Kubectl: развертывание, настройка и обновление кластера Kubernetes в службе контейнеров Azure путем выполнения команд kubectl
Если вы используете Служба Azure Kubernetes с любой задачей, тип подключения службы Azure Resource Manager является лучшим способом подключения к частному кластеру или кластеру с отключенными локальными учетными записями.
Чтобы улучшить отслеживание развертывания, используйте ресурс Kubernetes в средах с задачей Kubernetes.
Сведения о том, как начать работу с Azure Pipelines и службой Azure Kubernetes Service, см. в статье "Сборка и развертывание в службу Azure Kubernetes Service с помощью Azure Pipelines". Чтобы начать работать с Azure Pipelines, Kubernetes и канареечной стратегией развертывания, см. статью “Использование канарной стратегии развертывания для развертываний Kubernetes с помощью Azure Pipelines”.
Задача KubernetesManifest
Задача KubernetesManifest проверяет стабильность объектов перед маркировкой задачи как успешной или неудачной. Задача также может выполнять подстановку артефактов, добавлять аннотации, связанные с трассируемостью конвейера, упрощать создание и ссылку на imagePullSecrets, подготавливать манифесты и содействовать развёртыванию стратегий развертывания.
Примечание.
Хотя конвейер на основе YAML поддерживает триггеры в одном репозитории Git, если вам нужен триггер для файла манифеста, хранящегося в другом репозитории Git, или если триггеры необходимы для Реестр контейнеров Azure или Docker Hub, следует использовать классический конвейер вместо конвейера на основе YAML.
Вы можете использовать действие компоновки в задаче манифеста Kubernetes для интеграции шаблонов в файлы манифеста Kubernetes. Это действие позволяет использовать такие инструменты, как Helm, Kustomize и Kompose. Процесс подготовки задачи манифеста Kubernetes обеспечивает видимость преобразования между входными шаблонами и конечными файлами манифеста, используемыми в развертываниях. В качестве входных данных для действия развертывания задачи манифеста Kubernetes можно использовать подготовленные файлы манифестов (в последующих задачах).
Вы можете нацелиться на ресурсы Kubernetes, которые являются частью сред, с помощью заданий развертывания. Использование сред и развертывания ресурсов даёт вам доступ к более надёжной трассировке конвейера, чтобы вы могли диагностировать проблемы с развертыванием. Кроме того, вы можете развернуть в кластерах Kubernetes с обычными заданиями без функций мониторинга состояния.
Следующий код YAML является примером создания файлов манифеста из диаграмм Helm
steps:
- task: KubernetesManifest@0
name: bake
displayName: Bake K8s manifests from Helm chart
inputs:
action: bake
helmChart: charts/sample
overrides: 'image.repository:nginx'
- task: KubernetesManifest@0
displayName: Deploy K8s manifests
inputs:
kubernetesServiceConnection: someK8sSC
namespace: default
manifests: $(bake.manifestsBundle)
containers: |
nginx: 1.7.9
Задача команды kubectl
В качестве альтернативы задаче KubernetesManifest можно использовать задачу Kubectl для развертывания, настройки и обновления кластера Kubernetes в службе контейнеров Azure, выполнив для этого команды kubectl.
В следующем примере показано, как подключение к службе используется для ссылки на кластер Kubernetes.
- task: Kubernetes@1
displayName: kubectl apply
inputs:
connectionType: Kubernetes Service Connection
kubernetesServiceEndpoint: Contoso
задача скрипта
Вы также можете использовать kubectl
с задачей скрипта.
В следующем примере используется скрипт для выполнения kubectl
.
- script: |
kubectl apply -f manifest.yml
Стратегии развертывания Kubernetes
В настоящее время задача манифеста Kubernetes поддерживает стратегию канареечного развертывания. Используйте стратегию канареечного внедрения для частичного внедрения новых изменений, чтобы они сосуществовали с текущими внедрениями до полного развертывания.
Дополнительные сведения о канареечных развертываниях с помощью конвейеров см. в документе "Использование стратегии канареечного развертывания для развертываний Kubernetes с помощью Azure Pipelines".
Развертывания Kubernetes в мультиоблачной среде
Kubernetes работает одинаково для всех поставщиков облачных служб. Azure Pipelines можно использовать для развертывания в Службе Azure Kubernetes (AKS), Google Kubernetes Engine (GKE), Amazon Elastic Kubernetes Service (EKS) или кластерах других поставщиков облачных услуг.
Чтобы настроить многооблачное развертывание, создайте среду и добавьте ресурсы Kubernetes, связанные с пространствами имен кластеров Kubernetes.
- Служба Azure Kubernetes
- Универсальный поставщик с использованием существующей учетной записи сервиса
Универсальный подход к поставщику на основе существующей учетной записи службы работает с кластерами от любого поставщика облачных служб, включая Azure. Преимущество использования параметра Azure Kubernetes Service вместо этого заключается в том, что он создает новые объекты ServiceAccount и RoleBinding (вместо повторного использования существующего объекта ServiceAccount), чтобы созданный объект RoleBinding мог ограничить операции ServiceAccount только в пределах выбранного пространства имен.
При использовании универсального подхода поставщика убедитесь, что RoleBinding существует и предоставляет разрешения в edit
нужной учетной записи службы. Необходимо предоставить разрешения нужной учетной записи службы, чтобы она могла использоваться Azure Pipelines для создания объектов в выбранном пространстве имен.
Параллельные развёртывания на нескольких облаках
В следующем примере показано, как выполнять параллельные развертывания в кластерах в нескольких облаках. В этом примере существуют развертывания в кластерах AKS, GKE, EKS и OpenShift. Эти четыре пространства имен связаны с ресурсами Kubernetes в contoso
среде.
trigger:
- main
jobs:
- deployment:
displayName: Deploy to AKS
pool:
vmImage: ubuntu-latest
environment: contoso.aksnamespace
strategy:
runOnce:
deploy:
steps:
- checkout: self
- task: KubernetesManifest@0
displayName: Deploy to Kubernetes cluster
inputs:
action: deploy
kubernetesServiceConnection: serviceConnection #replace with your service connection
namespace: aksnamespace
manifests: manifests/*
- deployment:
displayName: Deploy to GKE
pool:
vmImage: ubuntu-latest
environment: contoso.gkenamespace
strategy:
runOnce:
deploy:
steps:
- checkout: self
- task: KubernetesManifest@0
displayName: Deploy to Kubernetes cluster
inputs:
action: deploy
kubernetesServiceConnection: serviceConnection #replace with your service connection
namespace: gkenamespace
manifests: manifests/*
- deployment:
displayName: Deploy to EKS
pool:
vmImage: ubuntu-latest
environment: contoso.eksnamespace
strategy:
runOnce:
deploy:
steps:
- checkout: self
- task: KubernetesManifest@0
displayName: Deploy to Kubernetes cluster
inputs:
action: deploy
kubernetesServiceConnection: serviceConnection #replace with your service connection
namespace: eksnamespace
manifests: manifests/*
- deployment:
displayName: Deploy to OpenShift
pool:
vmImage: ubuntu-latest
environment: contoso.openshiftnamespace
strategy:
runOnce:
deploy:
steps:
- checkout: self
- task: KubernetesManifest@0
displayName: Deploy to Kubernetes cluster
inputs:
action: deploy
kubernetesServiceConnection: serviceConnection #replace with your service connection
namespace: openshiftnamespace
manifests: manifests/*
- deployment:
displayName: Deploy to DigitalOcean
pool:
vmImage: ubuntu-latest
environment: contoso.digitaloceannamespace
strategy:
runOnce:
deploy:
steps:
- checkout: self
- task: KubernetesManifest@0
displayName: Deploy to Kubernetes cluster
inputs:
action: deploy
kubernetesServiceConnection: serviceConnection #replace with your service connection
namespace: digitaloceannamespace
manifests: manifests/*