部署 Manual Approval Gate

功能概述

Manual Approval Gate 提供集群范围的 controller 和 webhooks,用于支撑 ApprovalTask 自定义任务。管理员必须创建并维护 ManualApprovalGate 自定义资源(CR),这样平台用户才能在其 pipeline 中插入手动审批。本指南说明如何在 tekton-pipelines 中部署 Manual Approval Gate 组件、自定义运行时选项,以及安全地卸载它。

使用场景

  • 通过部署受管 controller,为集群中的所有团队启用手动审批。
  • 通过 Operator 的 options 合约调整 controller 部署(例如副本数、资源限制或 ConfigMaps),而不是直接编辑 manifests。
  • 当不再需要审批任务时清理该功能。

前提条件

  • 具有 cluster-admin 访问权限的 Alauda DevOps Pipelines v4.6.0 或更高版本。
  • 已针对目标集群配置好 kubectl

步骤

1. 创建 ManualApprovalGate CR

将 manifest 保存为 manual-approval-gate.yaml,然后应用它:

apiVersion: operator.tekton.dev/v1alpha1
kind: ManualApprovalGate
metadata:
  name: manual-approval-gate
spec:
  targetNamespace: tekton-pipelines
  options:
    disabled: false
kubectl apply -f manual-approval-gate.yaml
  • spec.targetNamespace 决定 controller 部署、webhooks 和 ConfigMaps 的创建位置。我们建议使用 tekton-pipelines,这样该组件会与其他 Tekton 服务放在一起,但只要该 namespace 在应用 CR 之前存在(或已创建),你也可以将其指向任意 namespace。
  • 使用 spec.options 可以覆盖 Deployments、ConfigMaps 或 image 字段,而无需编辑生成的 YAML。有关详细语法,请参阅 调整子组件的可选配置项

2. 验证 controller 健康状态

$ kubectl get manualapprovalgates.operator.tekton.dev manual-approval-gate

NAME                   VERSION          READY   REASON
manual-approval-gate   v0.7.0-4f10729   True
$ kubectl get deployment -n tekton-pipelines | grep manual-approval-gate

manual-approval-gate-controller     1/1     1            1           1h1m
manual-approval-gate-webhook        1/1     1            1           1h1m

CR 的 READY 条件必须报告为 True,并且你应该能看到 controller 和 webhook 的 Deployments 在 tekton-pipelines 中运行。

3. 重新配置或强制滚动更新

  • 对 CR 进行 patch 以调整副本数或其他选项;Operator 会自动滚动这些工作负载:

    kubectl patch manualapprovalgate manual-approval-gate \
      --type merge \
      --patch '{"spec":{"options":{"deployments":{"manual-approval-gate-controller":{"spec":{"replicas":2}}}}}}'

4. 卸载 Manual Approval Gate

$ kubectl delete manualapprovalgate manual-approval-gate
$ kubectl get deployment -n tekton-pipelines | grep manual-approval-gate

CRD 仍会保留已安装状态,因此你之后仍可重新创建该 CR,但 Deployments、Services 和 Webhooks 应该会消失。

操作结果

  • kubectl get manualapprovalgates 会显示该实例的 READY=TrueVERSION=<release>,以及空的 REASONInstalled
  • kubectl get pods -n tekton-pipelines | grep manual-approval-gate 会列出处于 Running 状态的 controller 和 webhook pod。
  • 删除后,不会再保留任何带有相同 label 的 pod 或 service,并且 Operator 会停止对 ApprovalTask 资源进行 reconcile,直到重新创建该 CR。

故障排除

  • ManualApprovalGate CR 卡在 NotReady 运行 kubectl describe manualapprovalgate manual-approval-gate 查看事件,然后检查 Operator 日志(kubectl logs -n tekton-operator deploy/tekton-operator)。spec.options 中字段拼写错误或权限不足是最常见的根因。
  • controller/webhook pod 反复崩溃重启: 描述 tekton-pipelines 中失败的 pod,以确认 TLS secrets 或配置映射是否缺失。重新应用 CR 通常会自动重新创建这些资源。
  • 未创建 ApprovalTask 资源: 确保 ManualApprovalGate CR 仍然存在且 READY=True。如果它已被删除或处于失败状态,请在用户重新运行 pipeline 之前重新安装它。

了解更多