KubernetesManifest@0. Задача "Развертывание в Kubernetes v0"

Используйте задачу манифеста Kubernetes в конвейере сборки или выпуска для создания и развертывания манифестов в кластерах Kubernetes с помощью диаграмм Helm.

Синтаксис

# Deploy to Kubernetes v0
# Use Kubernetes manifest files to deploy to clusters or even bake the manifest files to be used for deployments using Helm charts.
- task: KubernetesManifest@0
  inputs:
    #action: 'deploy' # 'bake' | 'createSecret' | 'delete' | 'deploy' | 'patch' | 'promote' | 'scale' | 'reject'. Action. Default: deploy.
    #kubernetesServiceConnection: # string. Required when action != bake. Kubernetes service connection. 
    #namespace: # string. Namespace. 
    #strategy: 'none' # 'canary' | 'none'. Optional. Use when action = deploy || action = promote || action = reject. Strategy. Default: none.
    #trafficSplitMethod: 'pod' # 'pod' | 'smi'. Optional. Use when strategy = canary. Traffic split method. Default: pod.
    #percentage: '0' # string. Required when strategy = Canary && action = deploy. Percentage. Default: 0.
    #baselineAndCanaryReplicas: '1' # string. Required when strategy = Canary && action = deploy && trafficSplitMethod = SMI. Baseline and canary replicas. Default: 1.
    #manifests: # string. Required when action = deploy || action = promote || action = reject. Manifests. 
    #containers: # string. Optional. Use when action = deploy || action = promote || action = bake. Containers. 
    #imagePullSecrets: # string. Optional. Use when action = deploy || action = promote. ImagePullSecrets. 
    #renderType: 'helm' # 'helm' | 'kompose' | 'kustomize'. Optional. Use when action = bake. Render Engine. Default: helm.
    #dockerComposeFile: # string. Required when action = bake && renderType = kompose. Path to docker compose file. 
    #helmChart: # string. Required when action = bake && renderType = helm. Helm Chart. 
    #releaseName: # string. Optional. Use when action = bake && renderType = helm. Helm Release Name. 
    #overrideFiles: # string. Optional. Use when action = bake && renderType = helm. Override Files. 
    #overrides: # string. Optional. Use when action = bake && renderType = helm. Overrides. 
    #kustomizationPath: # string. Optional. Use when action = bake && renderType = kustomize. Kustomization Path. 
    #resourceToPatch: 'file' # 'file' | 'name'. Required when action = patch. Resource to patch. Default: file.
    #resourceFileToPatch: # string. Required when action = patch && resourceToPatch = file. File path. 
    #kind: # 'deployment' | 'replicaset' | 'statefulset'. Required when action = scale || resourceToPatch = name. Kind. 
    #name: # string. Required when action = scale || resourceToPatch = name. Name. 
    #replicas: # string. Required when action = scale. Replica count. 
    #mergeStrategy: 'strategic' # 'json' | 'merge' | 'strategic'. Required when action = patch. Merge Strategy. Default: strategic.
    #arguments: # string. Optional. Use when action = delete. Arguments. 
    #patch: # string. Required when action = patch. Patch. 
    #secretType: 'dockerRegistry' # 'dockerRegistry' | 'generic'. Required when action = createSecret. Type of secret. Default: dockerRegistry.
    #secretName: # string. Optional. Use when action = createSecret. Secret name. 
    #secretArguments: # string. Optional. Use when action = createSecret && secretType = generic. Arguments. 
    #dockerRegistryEndpoint: # string. Optional. Use when action = createSecret && secretType = dockerRegistry. Docker registry service connection. 
    #rolloutStatusTimeout: '0' # string. Optional. Use when action = deploy || action = patch || action = scale || action = promote. Timeout for rollout status. Default: 0.
# Deploy Kubernetes manifests v0
# Use Kubernetes manifest files to deploy to clusters or even bake the manifest files to be used for deployments using Helm charts.
- task: KubernetesManifest@0
  inputs:
    #action: 'deploy' # 'bake' | 'createSecret' | 'delete' | 'deploy' | 'patch' | 'promote' | 'scale' | 'reject'. Action. Default: deploy.
    #kubernetesServiceConnection: # string. Required when action != bake. Kubernetes service connection. 
    #namespace: 'default' # string. Required when action != bake. Namespace. Default: default.
    #strategy: 'none' # 'canary' | 'none'. Optional. Use when action = deploy || action = promote || action = reject. Strategy. Default: none.
    #percentage: '0' # string. Required when strategy = Canary && action = deploy. Percentage. Default: 0.
    #manifests: # string. Required when action = deploy || action = promote || action = reject. Manifests. 
    #containers: # string. Optional. Use when action = deploy || action = promote. Containers. 
    #imagePullSecrets: # string. Optional. Use when action = deploy || action = promote. ImagePullSecrets. 
    #renderType: 'helm2' # 'helm2'. Optional. Use when action = bake. Render Engine. Default: helm2.
    #helmChart: # string. Required when action = bake && renderType = helm2. Helm Chart. 
    #releaseName: # string. Optional. Use when action = bake && renderType = helm2. Helm Release Name. 
    #overrideFiles: # string. Optional. Use when action = bake && renderType = helm2. Override Files. 
    #overrides: # string. Optional. Use when action = bake && renderType = helm2. Overrides. 
    #resourceToPatch: 'file' # 'file' | 'name'. Required when action = patch. Resource to patch. Default: file.
    #resourceFileToPatch: # string. Required when action = patch && resourceToPatch = file. File path. 
    #kind: # 'deployment' | 'replicaset' | 'statefulset'. Required when action = scale || resourceToPatch = name. Kind. 
    #name: # string. Required when action = scale || resourceToPatch = name. Name. 
    #replicas: # string. Required when action = scale. Replica count. 
    #mergeStrategy: 'strategic' # 'json' | 'merge' | 'strategic'. Required when action = patch. Merge Strategy. Default: strategic.
    #arguments: # string. Optional. Use when action = delete. Arguments. 
    #patch: # string. Required when action = patch. Patch. 
    #secretType: 'dockerRegistry' # 'dockerRegistry' | 'generic'. Required when action = createSecret. Type of secret. Default: dockerRegistry.
    #secretName: # string. Optional. Use when action = createSecret. Secret name. 
    #secretArguments: # string. Optional. Use when action = createSecret && secretType = generic. Arguments. 
    #dockerRegistryEndpoint: # string. Optional. Use when action = createSecret && secretType = dockerRegistry. Docker registry service connection.

Входные данные

action - Действий
string. Допустимые значения: bake, createSecret (создать секрет), delete, deploy, patch, promote, scale, . reject Значение по умолчанию: deploy.

Указывает действие, подлежащее выполнению.


kubernetesServiceConnection - Подключение службы Kubernetes
string. Требуется при .action != bake

Указывает подключение к службе Kubernetes.


namespace - Пространства имен
string.

Задает пространство имен для команд с помощью флага –namespace . Если пространство имен не указано, команды будут выполняться в пространстве имен по умолчанию.


namespace - Пространства имен
string. Требуется при .action != bake Значение по умолчанию: default.

Задает пространство имен для команд с помощью флага –namespace . Если пространство имен не указано, команды будут выполняться в пространстве имен по умолчанию.


strategy - Стратегии
string. Необязательный элемент. Используйте при action = deploy || action = promote || action = reject. Допустимые значения: canary, none. Значение по умолчанию: none.

Указывает стратегию развертывания, используемую в действии deploy перед действием или reject действиемpromote. В настоящее canary время является единственной приемлемой стратегией развертывания.


trafficSplitMethod - Метод разделения трафика
string. Необязательный элемент. Используйте при strategy = canary. Допустимые значения: pod, smi. Значение по умолчанию: pod.

Для значения smiразделение трафика в процентах выполняется на уровне запроса с помощью сетки служб. Сетка служб должна быть настроена администратором кластера. Эта задача обрабатывает оркестрацию объектов SMI TrafficSplit .

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


percentage - Процент
string. Требуется при .strategy = Canary && action = deploy Значение по умолчанию: 0.

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

Для указанных входных данных в процентах вычислите:

(процент × число реплик) / 100

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

Например, предположим, что развертывание hello-world находится во входном файле манифеста, а во входных данных задачи находятся следующие строки:

replicas: 4
strategy: canary
percentage: 25

В этом случае развертывания hello-world-baseline и hello-world-canary создаются с одним реплика каждого. Базовый вариант создается с тем же образом и тегом, что и стабильная версия, которая является вариантом с четырьмя реплика перед развертыванием. Вариант canary создается с изображением и тегом, соответствующими только что развернутых изменений.


baselineAndCanaryReplicas - Базовые и канарееарные реплики
string. Требуется при .strategy = Canary && action = deploy && trafficSplitMethod = SMI Значение по умолчанию: 1.

Если задано значение trafficSplitMethodsmi, разделение трафика в процентах контролируется в плоскости сетки служб. Фактическое количество реплик для канареечного и базового вариантов можно управлять независимо от разбиения трафика.

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

strategy: canary
trafficSplitMethod: smi
percentage: 20
baselineAndCanaryReplicas: 1

В этом случае стабильный вариант получает 80 % трафика, а базовый и канаречного вариантов — половину от указанных 20 %. Базовые и канарееарные варианты не получают по три реплики. Вместо этого они получают указанное количество реплик, что означает, что каждая из них получает по одной реплика.


manifests - Манифесты
string. Требуется при .action = deploy || action = promote || action = reject

Указывает путь к файлам манифеста, которые будут использоваться для развертывания. Каждая строка представляет один путь. Шаблон сопоставления файлов — это допустимое значение для каждой строки.


containers - Контейнеры
string. Необязательный элемент. Используйте при action = deploy || action = promote || action = bake.

Указывает полный URL-адрес ресурса изображения, используемого для подстановок в файлах манифеста. Примером является URL-адрес contosodemo.azurecr.io/helloworld:test .


containers - Контейнеры
string. Необязательный элемент. Используйте при action = deploy || action = promote.

Указывает полный URL-адрес изображения, используемого для подстановок в файлах манифеста. Эти входные данные принимают спецификацию нескольких подстановок артефактов в форме с разделителями новой строкой. Ниже приведен пример:

containers: |
  contosodemo.azurecr.io/foo:test1
  contosodemo.azurecr.io/bar:test2

В этом примере поиск всех ссылок на contosodemo.azurecr.io/foo и contosodemo.azurecr.io/bar выполняется в поле изображения входных файлов манифеста. Для каждого найденного соответствия тег test1 или test2 заменяет сопоставленную ссылку.


imagePullSecrets - ImagePullSecrets
string. Необязательный элемент. Используйте при action = deploy || action = promote.

Указывает многострочный вход, где каждая строка содержит имя секрета реестра Docker, который уже настроен в кластере. Каждое имя секрета добавляется в для imagePullSecrets рабочих нагрузок, которые находятся во входных файлах манифеста.


renderType - Модуль отрисовки
string. Необязательный элемент. Используйте при action = bake. Допустимые значения: helm, kompose, kustomize. Значение по умолчанию: helm.

Указывает тип отрисовки, используемый для создания файлов манифеста.


renderType - Модуль отрисовки
string. Необязательный элемент. Используйте при action = bake. Допустимые значения: helm2 (Helm 2). Значение по умолчанию: helm2.

Указывает тип отрисовки, используемый для создания файлов манифеста.


dockerComposeFile - Путь к файлу docker compose
string. Требуется при .action = bake && renderType = kompose

Указывает путь к файлу docker-compose.


helmChart - Диаграмма Helm
string. Требуется при .action = bake && renderType = helm

Указывает путь к диаграмме Helm для выпечки.


helmChart - Диаграмма Helm
string. Требуется при .action = bake && renderType = helm2

Указывает путь к диаграмме Helm для выпечки.


releaseName - Название выпуска Helm
string. Необязательный элемент. Используйте при action = bake && renderType = helm.

Указывает используемое имя выпуска Helm.


releaseName - Название выпуска Helm
string. Необязательный элемент. Используйте при action = bake && renderType = helm2.

Указывает используемое имя выпуска Helm.


overrideFiles - Переопределение файлов
string. Необязательный элемент. Используйте при action = bake && renderType = helm.

Указывает многострочного ввода, который принимает путь к переопределенным файлам. Файлы используются при испечении файлов манифеста из диаграмм Helm.


overrideFiles - Переопределение файлов
string. Необязательный элемент. Используйте при action = bake && renderType = helm2.

Указывает многострочного ввода, который принимает путь к переопределенным файлам. Файлы используются при испечении файлов манифеста из диаграмм Helm.


overrides - Переопределения
string. Необязательный элемент. Используйте при action = bake && renderType = helm.

Задает значения переопределения, которые необходимо задать.


overrides - Переопределения
string. Необязательный элемент. Используйте при action = bake && renderType = helm2.

Указывает дополнительные значения переопределения, используемые с помощью параметра --set командной строки при создании файлов манифеста с помощью Helm.

Укажите значения переопределения в виде key-value пар в формате key:value. При использовании нескольких переопределяющих key-value пар укажите каждую key-value пару в отдельной строке. Используйте символ новой строки в качестве разделителя между разными key-value парами.


kustomizationPath - Путь kustomization
string. Необязательный элемент. Используйте при action = bake && renderType = kustomize.

Указывает аргумент , который должен быть путем к каталогу, содержателю файла, или URL-адресом репозитория Git с суффиксом пути, указывающим относительно корневого каталога репозитория same .


resourceToPatch - Ресурс для исправления
string. Требуется при .action = patch Допустимые значения: file, name. Значение по умолчанию: file.

Указывает один из следующих методов исправления:

  • Файл манифеста идентифицирует объекты для исправления.
  • Отдельный объект определяется по типу и имени в качестве целевого объекта исправления.

Допустимыми значениями являются файл и имя.


resourceFileToPatch - Путь к файлу
string. Требуется при .action = patch && resourceToPatch = file

Указывает путь к файлу, используемому для исправления.


kind - Вид
string. Требуется при .action = scale || resourceToPatch = name Допустимые значения: deployment, replicaset, statefulset.

Указывает тип объекта K8s, например deployment, replicaSet и многое другое.


name - Имя
string. Требуется при .action = scale || resourceToPatch = name

Указывает имя объекта K8s.


replicas - Число реплик
string. Требуется при .action = scale

Указывает количество реплик для масштабирования.


mergeStrategy - Стратегия слияния
string. Требуется при .action = patch Допустимые значения: json, merge, strategic. Значение по умолчанию: strategic.

Указывает тип предоставляемого исправления.


arguments - Аргументы
string. Необязательный элемент. Используйте при action = delete.

Указывает аргументы для kubectl delete команды. Пример: arguments: deployment hello-world foo-bar


patch - Патч
string. Требуется при .action = patch

Указывает содержимое исправления.


secretType - Тип секрета
string. Требуется при .action = createSecret Допустимые значения: dockerRegistry, generic. Значение по умолчанию: dockerRegistry.

Создает или обновляет универсальный или docker imagepullsecret. Укажите dockerRegistry для создания или обновления imagepullsecret выбранного реестра. — imagePullSecret это способ передать секрет, содержащий пароль реестра контейнеров, в Kubelet, чтобы он смог извлечь частный образ от имени pod.


secretName - Имя секрета
string. Необязательный элемент. Используйте при action = createSecret.

Указывает имя секрета. Это имя секрета можно использовать в файле конфигурации YamL Kubernetes.


secretArguments - Аргументы
string. Необязательный элемент. Используйте при action = createSecret && secretType = generic.

Указывает ключи и литеральные значения для вставки в секрет. Например, --from-literal=key1=value1--from-literal=key2="top secret".


dockerRegistryEndpoint - Подключение к службе реестра Docker
string. Необязательный элемент. Используйте при action = createSecret && secretType = dockerRegistry.

Указывает учетные данные указанного подключения службы, которые используются для создания секрета реестра Docker в кластере. Затем файлы манифеста в imagePullSecrets поле могут ссылаться на имя этого секрета.


rolloutStatusTimeout - Время ожидания для состояния развертывания
string. Необязательный элемент. Используйте при action = deploy || action = patch || action = scale || action = promote. Значение по умолчанию: 0.

Указывает время ожидания (в секундах) до окончания watch on rollout состояния.


Параметры управления задачами

Все задачи имеют параметры управления в дополнение к входным данным задачи. Дополнительные сведения см. в разделе Параметры управления и общие свойства задачи.

Выходные переменные

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

manifestsBundle
Указывает расположение пакетов манифеста, созданных с помощью действия запекания.

Комментарии

Примечание

Существует более новая версия этой задачи, которая обеспечивает дополнительную поддержку для нацеливания на кластер Kubernetes различными способами с использованием connectionType свойства . Дополнительные сведения см. в KubernetesManifest@1 и примечаниях к подключению службы KubernetesManifest@1.

Используйте задачу манифеста Kubernetes в конвейере сборки или выпуска для создания и развертывания манифестов в кластерах Kubernetes.

Эта задача поддерживает следующее:

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

  • Стабильность манифеста. Проверяется состояние развертывания развернутых объектов Kubernetes. Проверки стабильности включаются, чтобы определить, является ли задача успешной или неудачной.

  • Заметки трассировки. Заметки добавляются в развернутые объекты Kubernetes для наложения сведений о возможности трассировки. Поддерживаются следующие заметки:

    • azure-pipelines/org
    • azure-pipelines/project
    • azure-pipelines/pipeline
    • azure-pipelines/pipelineId
    • azure-pipelines/execution
    • azure-pipelines/executionuri
    • azure-pipelines/jobName
  • Обработка секретов. Действие createSecret позволяет создавать секреты реестра Docker с помощью подключений к службе реестра Docker. Он также позволяет создавать универсальные секреты с помощью переменных в виде обычного текста или секретных переменных. Перед развертыванием в кластере можно использовать secrets входные данные вместе с действием deploy , чтобы дополнить входные файлы манифеста соответствующим imagePullSecrets значением.

  • Создание манифеста. Действие bake задачи позволяет испечь шаблоны в файлах манифеста Kubernetes. Действие использует такие средства, как Helm, Compose и Kustomize. Благодаря выпечке эти файлы манифеста Kubernetes можно использовать для развертываний в кластере.

  • Стратегия развертывания. Выбор canary стратегии с действием deploy приводит к созданию имен рабочих нагрузок с -baseline суффиксами и -canary. Задача поддерживает два метода разделения трафика:

    • Интерфейс сетки служб. Абстракция интерфейса сетки служб (SMI) позволяет настраивать такие поставщики сетки служб, как Linkerd и Istio. Задача "Манифест Kubernetes" сопоставляет объекты SMI TrafficSplit со стабильными, базовыми и канарееарными службами в течение жизненного цикла стратегии развертывания.

      Канареарные развертывания, основанные на сетке служб и использующие эту задачу, являются более точными. Эта точность обусловлена тем, как поставщики сетки служб обеспечивают детальное разделение трафика на основе процента. Сетка служб использует реестр служб и контейнеры расширения, которые внедряются в модули pod. Это внедрение выполняется вместе с контейнерами приложений для достижения детального разделения трафика.

    • Kubernetes без сетки служб. При отсутствии сетки служб вы можете не получить точное процентное разделение на уровне запроса. Однако можно выполнять канареарные развертывания, используя базовые и канарееарные варианты рядом со стабильным вариантом.

      Служба отправляет запросы в модули pod всех трех вариантов рабочей нагрузки по мере выполнения ограничений селектора и меток. Манифест Kubernetes учитывает эти запросы при создании базовых и canary вариантов. Такое поведение маршрутизации обеспечивает предполагаемый эффект маршрутизации только части общего числа запросов на канарее.

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

Действие развертывания

Следующий код YAML является примером развертывания в пространстве имен Kubernetes с помощью файлов манифеста:

steps:
- task: KubernetesManifest@0
  displayName: Deploy
  inputs:
    kubernetesServiceConnection: someK8sSC1
    namespace: default
    manifests: |
      manifests/deployment.yml
      manifests/service.yml
    containers: |
      foo/demo:$(tagVariable1)
      bar/demo:$(tagVariable2)
    imagePullSecrets: |
      some-secret
      some-other-secret

В приведенном выше примере задача пытается найти совпадения для изображений foo/demo и bar/demo в полях изображений файлов манифеста. Для каждого найденного совпадения tagVariable1 значение или tagVariable2 добавляется в качестве тега к имени образа. Вы также можете указать дайджесты во входных данных контейнеров для подстановки артефактов.

Примечание

Хотя можно создавать deployдействия , promoteи reject с входными данными YAML, связанными со стратегией развертывания, поддержка задачи "Вмешательство вручную" в настоящее время недоступна для конвейеров сборки.

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

  1. Действие развертывания, указанное с помощью strategy: canary и percentage: $(someValue).
  2. Задача "Вмешательство вручную", чтобы можно было приостановить конвейер и сравнить базовый вариант с вариантом canary.
  3. Действие повышения, которое выполняется, если задача "Вмешательство вручную" возобновляется, и действие отклонить, которое выполняется при отклонении задачи "Ручное вмешательство".

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

В следующем коде YAML показан пример создания секретов реестра Docker с помощью подключения к службе реестра Docker:

steps:
- task: KubernetesManifest@0
  displayName: Create secret
  inputs: 
    action: createSecret
    secretType: dockerRegistry
    secretName: foobar
    dockerRegistryEndpoint: demoACR
    kubernetesServiceConnection: someK8sSC
    namespace: default

В этом коде YAML показан пример создания универсальных секретов:

steps:
- task: KubernetesManifest@0
  displayName: Create secret
  inputs: 
    action: createSecret
    secretType: generic
    secretName: some-secret
    secretArguments: --from-literal=key1=value1
    kubernetesServiceConnection: someK8sSC
    namespace: default

Действие "Выпекать"

Следующий код 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

Примечание

Сведения о том, как напрямую использовать Helm для управления выпусками и откатами, см. в статье Упаковка и развертывание диаграмм Helm.

Пример Kustomize

Следующий код YAML является примером создания файлов манифеста, созданных с помощью Kustomize, которые содержат kustomization.yaml файл.

steps:
- task: KubernetesManifest@0
  name: bake
  displayName: Bake K8s manifests from kustomization path
  inputs:
    action: bake
    renderType: kustomize
    kustomizationPath: folderContainingKustomizationFile

- task: KubernetesManifest@0
  displayName: Deploy K8s manifests
  inputs:
    kubernetesServiceConnection: k8sSC1
    manifests: $(bake.manifestsBundle)

Пример Kompose

Следующий код YAML является примером создания файлов манифеста, созданных с помощью Kompose, средства преобразования для Docker Compose.

steps:
- task: KubernetesManifest@0
  name: bake
  displayName: Bake K8s manifests from Docker Compose
  inputs:
    action: bake
    renderType: kompose
    dockerComposeFile: docker-compose.yaml

- task: KubernetesManifest@0
  displayName: Deploy K8s manifests
  inputs:
    kubernetesServiceConnection: k8sSC1
    manifests: $(bake.manifestsBundle)

Действие масштабирования

В следующем коде YAML показан пример масштабирования объектов:

steps:
- task: KubernetesManifest@0
  displayName: Scale
  inputs: 
    action: scale
    kind: deployment
    name: bootcamp-demo
    replicas: 5
    kubernetesServiceConnection: someK8sSC
    namespace: default

Действие исправления

В следующем коде YAML показан пример исправления объектов:

steps:
- task: KubernetesManifest@0
  displayName: Patch
  inputs: 
    action: patch
    kind: pod
    name: demo-5fbc4d6cd9-pgxn4
    mergeStrategy: strategic
    patch: '{"spec":{"containers":[{"name":"demo","image":"foobar/demo:2239"}]}}'
    kubernetesServiceConnection: someK8sSC
    namespace: default

Действие удаления

В этом коде YAML показан пример удаления объекта:

steps:
- task: KubernetesManifest@0
  displayName: Delete
  inputs:
    action: delete
    arguments: deployment expressapp
    kubernetesServiceConnection: someK8sSC
    namespace: default

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

Мой кластер Kubernetes находится за брандмауэром, и я использую размещенные агенты. Как выполнить развертывание в этом кластере?

Вы можете предоставить размещенным агентам доступ через брандмауэр, разрешив IP-адреса для размещенных агентов. Дополнительные сведения см. в статье о диапазонах IP-адресов агента.

Как работают запросы к стабильным и вариантным маршрутам служб с канареечными развертываниями?

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

Если задача включает входные action: deploy данные и strategy: canary, для каждой рабочей нагрузки (Deployment, ReplicaSet, Pod, ...), определенных во входных файлах манифеста -baseline , создаются варианты и -canary развертывания. В этом примере во входном файле манифеста есть развертывание sampleapp , и после завершения выполнения конвейера с номером 22 стабильный вариант развертывания с именем sampleapp развертывается в кластере. При последующем запуске (в данном случае — 23) задача манифеста Kubernetes с action: deploy и strategy: canary приведет к созданию развертываний sampleapp-baseline и sampleapp-canary, количество реплик которых определяется произведением percentage входных данных задачи со значением требуемого количества реплик для окончательного стабильного варианта в соответствии с входными файлами манифеста sampleapp .

За исключением числа реплик, базовая версия имеет ту же конфигурацию, что и стабильный вариант, а канареечная версия содержит новые изменения, внесенные текущим запуском (в данном случае — номер запуска 23). Если после указанного выше шага в конвейере настроено вмешательство вручную, это позволит приостановить конвейер, чтобы администратор конвейера смог оценить ключевые метрики для базовых и канареечных версий и принять решение о том, являются ли изменения канареек безопасными и достаточно хорошими для полного развертывания.

Входныеaction: promote данные и strategy: canary или action: reject и strategy: canary для задач манифеста Kubernetes можно использовать для повышения или отклонения канареечного изменения соответственно. Обратите внимание, что в любом случае в конце этого шага в кластере будет развернут только стабильный вариант рабочих нагрузок, объявленных во входных файлах манифеста, в то время как временные базовые и канаарные версии будут очищены.

Требования

Требование Описание
Типы конвейеров YAML, классическая сборка, классический выпуск
Выполняется в Агент, DeploymentGroup
Требования Нет
Capabilities Эта задача не удовлетворяет требованиям для последующих задач в задании.
Ограничения команд Любой
Устанавливаемые переменные Любой
Версия агента Все поддерживаемые версии агента.
Категория задач Развертывание