部署 Manual Approval Gate

功能概述

Manual Approval Gate 提供集群范围的控制器和 Webhook,为 ApprovalTask 自定义任务提供支持。管理员必须创建并维护 ManualApprovalGate 自定义资源(CR),以便平台用户可以在其流水线中插入手动审批。本指南介绍如何在 tekton-pipelines 中部署 Manual Approval Gate 组件、自定义运行时选项,以及如何安全地卸载该组件。

使用场景

  • 通过配置受管控制器,为集群中的所有团队启用手动审批。
  • 通过 Operator 的 options contract 调整控制器部署(例如副本数、资源限制或 ConfigMap),而无需编辑清单。
  • 不再需要审批任务时清理该功能。

先决条件

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

步骤

1. 创建 ManualApprovalGate CR

将清单保存为 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 决定创建控制器部署、Webhook 和 ConfigMap 的位置。我们建议使用 tekton-pipelines,以便该组件与其他 Tekton 服务相邻,但也可以将其指向任意命名空间,前提是该命名空间在应用 CR 之前已存在(或已创建)。
  • 使用 spec.options 可覆盖 Deployment、ConfigMap 或镜像字段,而无需编辑生成的 YAML。有关详细语法,请参阅调整子组件的可选配置项。

2. 验证控制器运行状况

$ 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,并且应能看到控制器和 Webhook Deployment 在 tekton-pipelines 中运行。

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

  • 修补 CR 以调整副本数或其他选项;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,但 Deployment、Service 和 Webhook 应会消失。

操作结果

  • kubectl get manualapprovalgates 显示具有 READY=True、VERSION=<release> 和 REASON 的实例,这些字段为空或为 Installed。
  • kubectl get pods -n tekton-pipelines | grep manual-approval-gate 列出状态为 Running 的控制器和 Webhook Pod。
  • 删除后,不再有带有相同标签的 Pod 或 Service,且 Operator 会停止协调 ApprovalTask 资源,直到重新创建 CR。

故障排除

  • ManualApprovalGate CR 卡在 NotReady 中:运行 kubectl describe manualapprovalgate manual-approval-gate 检查事件,然后查看 Operator 日志(kubectl logs -n tekton-operator deploy/tekton-operator)。spec.options 中的字段拼写错误或权限不足是最常见的根本原因。
  • 控制器/Webhook Pod 反复崩溃重启:在 tekton-pipelines 中描述发生故障的 Pod,以确认是否缺少 TLS Secret 或 ConfigMap。重新应用 CR 通常会自动重新创建这些资源。
  • 未创建 ApprovalTask 资源:确保 ManualApprovalGate CR 仍存在且具有 READY=True。如果 CR 已被删除或运行失败,请先重新安装,然后再让用户重新运行流水线。

了解更多