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
.
Если задано значение trafficSplitMethod
smi
, разделение трафика в процентах контролируется в плоскости сетки служб. Фактическое количество реплик для канареечного и базового вариантов можно управлять независимо от разбиения трафика.
Например, предположим, что в манифесте развертывания входных данных указано 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" сопоставляет объекты SMITrafficSplit
со стабильными, базовыми и канарееарными службами в течение жизненного цикла стратегии развертывания.Канареарные развертывания, основанные на сетке служб и использующие эту задачу, являются более точными. Эта точность обусловлена тем, как поставщики сетки служб обеспечивают детальное разделение трафика на основе процента. Сетка служб использует реестр служб и контейнеры расширения, которые внедряются в модули 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, связанными со стратегией развертывания, поддержка задачи "Вмешательство вручную" в настоящее время недоступна для конвейеров сборки.
Для конвейеров выпуска рекомендуется использовать действия и входные данные, связанные со стратегией развертывания, в следующей последовательности:
- Действие развертывания, указанное с помощью
strategy: canary
иpercentage: $(someValue)
. - Задача "Вмешательство вручную", чтобы можно было приостановить конвейер и сравнить базовый вариант с вариантом canary.
- Действие повышения, которое выполняется, если задача "Вмешательство вручную" возобновляется, и действие отклонить, которое выполняется при отклонении задачи "Ручное вмешательство".
Действие создания секрета
В следующем коде 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 | Эта задача не удовлетворяет требованиям для последующих задач в задании. |
Ограничения команд | Любой |
Устанавливаемые переменные | Любой |
Версия агента | Все поддерживаемые версии агента. |
Категория задач | Развертывание |