KubernetesManifest@0 - 部署到 Kubernetes v0 任务
在生成或发布管道中使用 Kubernetes 清单任务,使用 Helm 图表制作清单并将其部署到 Kubernetes 群集。
语法
# 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
。
指定要执行的操作。
namespace
- 命名 空间
string
.
使用 标志指定命令的 –namespace
命名空间。 如果未提供命名空间,则命令将在默认命名空间中运行。
namespace
- 命名 空间
string
. 当 action != bake
时,需要此选项。 默认值:default
。
使用 标志指定命令的 –namespace
命名空间。 如果未提供命名空间,则命令将在默认命名空间中运行。
strategy
- 策略
string
. 可选。 在 时 action = deploy || action = promote || action = reject
使用 。 允许的值:canary
、none
。 默认值:none
。
指定在操作或deploy
操作之前promote
reject
的操作中使用的部署策略。 目前, 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
在这种情况下,使用一个副本 (replica) 创建部署 hello-world-baseline
和 hello-world-canary
。 基线变体是使用与稳定版本相同的映像和标记创建的,稳定版本是部署前的四副本 (replica) 变体。 金丝雀变体是使用与新部署的更改对应的映像和标记创建的。
baselineAndCanaryReplicas
- 基线和金丝雀副本
string
. 当 strategy = Canary && action = deploy && trafficSplitMethod = SMI
时,需要此选项。 默认值:1
。
将 设置为 trafficSplitMethod
smi
时,流量拆分百分比在服务网格平面中受控制。 可以独立于流量拆分控制 Canary 和基线变体的实际副本数。
例如,假设输入部署清单为稳定变量指定 30 个副本。 此外,假定为任务指定以下输入:
strategy: canary
trafficSplitMethod: smi
percentage: 20
baselineAndCanaryReplicas: 1
在这种情况下,稳定变体接收 80% 的流量,而基线和金丝雀变体分别接收指定 20% 的一半。 基线和金丝雀变体各不接收三个副本。 它们接收指定数量的副本,这意味着它们分别接收一个副本 (replica) 。
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/bar
的所有引用contosodemo.azurecr.io/foo
。 对于找到的每个匹配项,标记 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
使用 。
指定在烘焙使用 Helm 的清单文件时通过命令行开关 --set
使用的其他替代值。
以 格式key:value
将替代值指定为key-value
对。 如果使用多个重写 key-value
对,请在单独的行中指定每个 key-value
对。 使用换行符作为不同 key-value
对之间的分隔符。
kustomizationPath
- 自定义路径
string
. 可选。 在 时 action = bake && renderType = kustomize
使用 。
指定参数,该参数必须是包含该文件的目录的路径,或具有指定相对于存储库根的路径后缀 same
的 git 存储库 URL。
resourceToPatch
- 要修补的资源
string
. 当 action = patch
时,需要此选项。 允许的值:file
、name
。 默认值:file
。
指示以下修补方法之一:
- 清单文件标识要修补的对象。
- 单个对象按种类和名称标识为修补程序目标。
可接受的值为 file 和 name。
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
使用 。
指定机密的名称。 可以在 Kubernetes YAML 配置文件中使用此机密名称。
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
指定由烘焙操作创建的清单捆绑包的位置。
注解
注意
有一个更新版本的此任务可用,该任务使用 属性以不同方式 connectionType
提供针对 Kubernetes 群集的额外支持。 有关详细信息,请参阅 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) 抽象允许使用 和
Istio
等Linkerd
服务网格提供程序进行配置。 Kubernetes 清单任务在部署策略的生命周期内将 SMITrafficSplit
对象映射到稳定、基线和金丝雀服务。基于服务网格并使用此任务的 Canary 部署更准确。 此准确性取决于服务网格提供程序如何实现基于百分比的精细流量拆分。 服务网格使用注入 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
匹配项。 对于找到的每个匹配项,或 tagVariable2
的值tagVariable1
将作为标记追加到映像名称中。 还可以在容器输入中指定用于项目替换的摘要。
注意
虽然可以使用与部署策略相关的 YAML 输入创作 deploy
、 promote
和 reject
操作,但目前对生成管道不支持手动干预任务。
对于发布管道,建议按以下顺序使用与部署策略相关的操作和输入:
- 使用
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 生成的烘焙清单文件的示例,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 范围。
在 Canary 部署的情况下,对稳定和变体服务路由的请求是如何工作的?
Kubernetes 中 pod 和服务之间的标签选择器关系允许设置部署,以便单个服务将请求路由到稳定变体和 Canary 变体。 Kubernetes 清单任务 将此用于 Canary 部署。
如果任务包含 和 strategy: canary
的action: deploy
输入,则对于输入清单文件中定义的每个工作负载 (Deployment、ReplicaSet、Pod、...) ,-baseline
则会创建部署的 和 -canary
变体。 在此示例中,输入清单文件中有一个部署 sampleapp
,在管道的运行编号 22 完成后,此名为 sampleapp
的部署的稳定变体将部署在群集中。 在后续运行 (在本例中运行编号 23) ,Kubernetes 清单任务使用 action: deploy
和 strategy: canary
将导致创建 sampleapp-baseline 和 sampleapp-canary 部署,其副本数由任务输入的 percentage
乘积决定,其最终稳定变体 sampleapp
的值根据输入清单文件确定。
不包括副本数,基线版本具有与稳定变体相同的配置,而 Canary 版本具有当前运行 (引入的新更改,在这种情况下,运行编号 23) 。 如果在上述步骤之后在管道中设置了手动干预,则有机会暂停管道,以便管道管理员可以评估基线和金丝雀版本的关键指标,并决定金丝雀更改是否安全且适合完全推出。
action: promote
Kubernetes 清单任务的 和 strategy: canary
和 action: reject
strategy: canary
输入可以分别用于提升或拒绝 Canary 更改。 请注意,在这两种情况下,在此步骤结束时,只会在群集中部署输入清单文件中声明的工作负载的稳定变体,同时清理临时基线和 Canary 版本。