Развертывание в 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 см. в статье "Сборка и развертывание в Служба Azure Kubernetes с помощью 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, которые являются частью сред с заданиями развертывания. Использование сред и ресурсов позволяет получить доступ к более эффективной трассировки конвейера, чтобы диагностировать проблемы с развертыванием. Кроме того, вы можете развернуть в кластерах 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 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 в настоящее время поддерживает стратегию развертывания канарной версии. Используйте стратегию развертывания canary для частичного развертывания новых изменений, чтобы новые изменения сосуществовали с текущими развертываниями до полного развертывания.
Дополнительные сведения о канареарных развертываниях с конвейерами см. в статье "Использование канарной стратегии развертывания для развертываний Kubernetes с помощью Azure Pipelines".
Развертывания Multicloud Kubernetes
Kubernetes работает одинаково для всех поставщиков облачных служб. Azure Pipelines можно использовать для развертывания в Служба Azure Kubernetes (AKS), Google Kubernetes Engine (GKE), Amazon Elastic Kubernetes Service (EKS) или кластеров от любых других поставщиков облачных служб.
Чтобы настроить многооблачное развертывание, создайте среду и добавьте ресурсы Kubernetes, связанные с пространствами имен кластеров Kubernetes.
Универсальный подход к поставщику на основе существующей учетной записи службы работает с кластерами от любого поставщика облачных служб, включая Azure. Преимущество использования параметра Служба Azure Kubernetes вместо этого заключается в том, что он создает новые объекты ServiceAccount и RoleBinding (вместо повторного использования существующего объекта ServiceAccount), чтобы созданный объект RoleBinding может ограничить операции ServiceAccount только для выбранного пространства имен.
При использовании универсального подхода поставщика убедитесь, что roleBinding существует, который предоставляет разрешения в edit
ClusterRole
нужной учетной записи службы. Необходимо предоставить разрешения для правильной учетной записи служб, чтобы учетная запись службы использовалась 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/*