Manage PAC Component

For Administrators Only

本指南仅面向集群管理员。内容涵盖需要集群管理员权限的 PAC 组件部署、配置和维护任务。

普通用户请参考:

本指南介绍如何在 Kubernetes 平台上部署、更新和卸载 Pipelines-as-Code (PAC) 组件。

前提条件

在管理 PAC 之前,请确保您具备:

  • Kubernetes 集群(版本 1.24 或更高)
  • 已安装并运行 Tekton Operator
  • 集群管理员权限
  • 已安装并配置 kubectl 以访问您的集群

部署 PAC 组件

NOTE

平台支持:尽管资源名称包含“OpenShift”,但通过 Tekton Operator 的补丁添加 PAC 控制器支持后,PAC 可部署在 Kubernetes 平台上。

PAC 通过直接创建 OpenShiftPipelinesAsCode CR 来部署。operator 会自动创建并管理所有 PAC 所需资源。

部署 PAC 组件

第 1 步:创建 OpenShiftPipelinesAsCode CR

创建名为 pac.yaml 的 YAML 文件:

apiVersion: operator.tekton.dev/v1alpha1
kind: OpenShiftPipelinesAsCode
metadata:
  name: pipelines-as-code
spec:
  settings:
    application-name: Pipelines as Code CI
    hub-url: http://tekton-hub-api.tekton-pipelines:8000/v1
    remote-tasks: "true"
    secret-auto-create: "true"
  targetNamespace: tekton-pipelines  # 默认命名空间,可自定义

重要说明

  • 资源名称必须为 pipelines-as-code,否则 operator 不会部署 PAC 组件。
  • targetNamespace 字段指定 PAC 组件部署的命名空间,默认是 tekton-pipelines,您也可以使用任意命名空间名称。

如果命名空间不存在,请先创建

kubectl create namespace tekton-pipelines  # 或您自定义的命名空间名称

第 2 步:应用配置

将 CR 应用到集群:

kubectl apply -f pac.yaml

示例输出:

openshiftpipelinesascode.operator.tekton.dev/pipelines-as-code created

第 3 步:验证部署

查看 OpenShiftPipelinesAsCode CR 状态:

kubectl get openshiftpipelinesascodes.operator.tekton.dev

输出应显示 CR 的 Ready 状态:

NAME                  VERSION   READY   REASON
pipelines-as-code    0.x.x     True    Ready

检查 TektonInstallerSet 状态(将 <pac-namespace> 替换为实际 PAC 命名空间,默认是 tekton-pipelines):

kubectl get tektoninstallersets -n <pac-namespace> | grep pipelinesascode

示例输出:

NAME                              READY   REASON
pipelinesascode-installer-set     True    Ready
理解 TektonInstallerSet

TektonInstallerSet 是 Tekton Operator 用于管理 PAC 组件安装和生命周期的内部资源。它作为模板,operator 通过它创建和管理所有 PAC 相关资源(Deployment、Service、ConfigMap、RBAC 等)。

重要

  • 绝不可直接创建、修改或删除 TektonInstallerSet
  • operator 在创建 OpenShiftPipelinesAsCode CR 时自动创建和管理它
  • 您可以查看其状态以排查问题,但所有变更应通过 OpenShiftPipelinesAsCode CR 完成
  • 删除 OpenShiftPipelinesAsCode CR 时,operator 会自动删除 TektonInstallerSet 及所有相关资源

示例输出:

NAME                              AGE
pipelines-as-code-installer-set   5m

验证 PAC Pod 是否运行:

kubectl get pods -n <pac-namespace> | grep pipelines-as-code

示例输出:

NAME                                      READY   STATUS    RESTARTS   AGE
pipelines-as-code-controller-xxxxx        1/1     Running   0          5m
pipelines-as-code-watcher-xxxxx          1/1     Running   0          5m
pipelines-as-code-webhook-xxxxx          1/1     Running   0          5m

注意:文中 <pac-namespace>tekton-pipelines 指 PAC 部署的命名空间,如不同请替换为实际命名空间。

您应看到三个处于 Running 状态的 Pod:

  • pipelines-as-code-controller-*
  • pipelines-as-code-watcher-*
  • pipelines-as-code-webhook-*

配置访问

PAC 组件需要暴露,以便 Git 提供商的 webhook 事件能够访问。配置 Git 提供商 webhook 时需要使用 PAC 控制器的 URL。

重要:配置仓库前,必须先通过以下方法之一暴露 PAC 控制器。tkn pac create repo 命令可自动检测通过 Ingress 暴露的控制器 URL,但需先完成配置。

您可以使用以下方法之一暴露 PAC 控制器:

使用 Ingress(HTTP)

域名与 DNS 配置

如果您有域名

  • host 字段配置您的域名(例如 pac.example.com
  • 确保域名能通过 DNS 解析到您的 Ingress Controller IP
  • 配置 DNS A 记录:pac.example.com<Ingress-Controller-IP>

如果没有域名

  • 可将 Ingress 配置中的 host 字段留空或删除
  • 通过 IP 和端口访问 PAC:http://<Ingress-Controller-IP>:<port>
  • Git 提供商(GitLab、GitHub)仍可向 IP 地址发送 webhook

创建 IngressClass(如尚未创建):

创建 Ingress 资源(将 <pac-namespace> 替换为 PAC 命名空间,默认 tekton-pipelines):

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: pipelines-as-code
  namespace: <pac-namespace>  # 默认: tekton-pipelines
spec:
  rules:
  - host: pac.example.com
    http:
      paths:
      - backend:
          service:
            name: pipelines-as-code-controller
            port:
              number: 8080
        path: /
        pathType: Prefix

应用 Ingress:

kubectl apply -f ingress.yaml

示例输出:

ingress.networking.k8s.io/pipelines-as-code created

替代方案:无域名的 Ingress(无 host)

如果没有域名,可以创建不含 host 字段的 Ingress:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: pipelines-as-code
  namespace: <pac-namespace>  # 默认: tekton-pipelines
spec:
  rules:
  - http:  # 未指定 host 字段
      paths:
      - backend:
          service:
            name: pipelines-as-code-controller
            port:
              number: 8080
        path: /
        pathType: Prefix

然后通过 Ingress Controller 的 IP 访问 PAC:

# 获取 Ingress Controller IP
kubectl get ingress pipelines-as-code -n <pac-namespace>

# 访问 PAC
# http://<INGRESS-IP>/
# 示例:http://192.168.1.100/

使用 Ingress(HTTPS)

HTTPS 配置要求

TLS 证书要求

  • 需要有效的域名 TLS 证书
  • 证书的通用名称(CN)或备用名称(SAN)必须匹配您的域名
  • 生产环境建议使用受信任 CA 颁发的证书(如 Let's Encrypt、DigiCert 等)

域名配置

  • HTTPS Ingress 需要在 host 字段配置域名
  • 确保 DNS 解析:pac.example.com<Ingress-Controller-IP>
  • 通过 IP 地址访问 HTTPS 可能导致证书校验错误

首先创建 TLS Secret(将 <pac-namespace> 替换为 PAC 命名空间,默认 tekton-pipelines):

apiVersion: v1
kind: Secret
metadata:
  name: pipelines-as-code-tls
  namespace: <pac-namespace>  # 默认: tekton-pipelines
type: kubernetes.io/tls
data:
  tls.crt: <base64-encoded-tls-certificate>
  tls.key: <base64-encoded-tls-key>

然后创建 HTTPS Ingress(将 <pac-namespace> 替换为 PAC 命名空间,默认 tekton-pipelines):

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: pipelines-as-code
  namespace: <pac-namespace>  # 默认: tekton-pipelines
spec:
  rules:
  - host: pac.example.com
    http:
      paths:
      - backend:
          service:
            name: pipelines-as-code-controller
            port:
              number: 8080
        path: /
        pathType: Prefix
  tls:
  - hosts:
    - pac.example.com
    secretName: pipelines-as-code-tls

使用 NodePort

创建 NodePort 类型的 Service(将 <pac-namespace> 替换为 PAC 命名空间,默认 tekton-pipelines):

apiVersion: v1
kind: Service
metadata:
  name: pipelines-as-code-controller-nodeport
  namespace: <pac-namespace>  # 默认: tekton-pipelines
spec:
  ports:
    - name: http-listener
      port: 8080
      protocol: TCP
      targetPort: 8082  # PAC 控制器监听 webhook 事件的端口
      nodePort: 30080  # 可选:指定固定 NodePort
  selector:
    app.kubernetes.io/part-of: pipelines-as-code
    app.kubernetes.io/component: controller
  type: NodePort

重要说明

  • targetPort 必须是 8082,这是 PAC 控制器 Pod 监听 webhook 事件的端口
  • port(8080)是 Service 端口(集群内通信使用)
  • nodePort(30080)是集群外可访问的端口
  • 对于 Ingress,Service 端口是 8080,内部路由到控制器的 8082 端口

获取 NodePort(将 <pac-namespace> 替换为 PAC 命名空间,默认 tekton-pipelines):

kubectl get service -n <pac-namespace> pipelines-as-code-controller-nodeport -o jsonpath='{.spec.ports[?(@.name=="http-listener")].nodePort}'

示例输出:

30080

通过 http://<node-ip>:<node-port> 访问 PAC。

如何获取 PAC 控制器 URL

暴露 PAC 控制器后,可通过以下方式获取 URL:

使用 Ingress

获取 Ingress host(将 <pac-namespace> 替换为 PAC 命名空间,默认 tekton-pipelines):

kubectl get ingress pipelines-as-code -n <pac-namespace> -o jsonpath='{.spec.rules[0].host}'

示例输出:

pac.example.com

控制器 URL 为:

  • HTTP: http://<ingress-host>
  • HTTPS: https://<ingress-host>

使用 NodePort

获取 NodePort 和节点 IP:

# 设置 PAC 命名空间(默认:tekton-pipelines)
PAC_NAMESPACE="tekton-pipelines"

# 获取 NodePort
NODEPORT=$(kubectl get service -n ${PAC_NAMESPACE} pipelines-as-code-controller-nodeport -o jsonpath='{.spec.ports[?(@.name=="http-listener")].nodePort}')

# 获取节点 IP(取第一个节点的 InternalIP)
NODE_IP=$(kubectl get nodes -o jsonpath='{.items[0].status.addresses[?(@.type=="InternalIP")].address}')

echo "PAC Controller URL: http://${NODE_IP}:${NODEPORT}"

示例输出:

PAC Controller URL: http://192.168.1.100:30080

tkn pac 自动检测

使用 tkn pac create repo 时,CLI 会自动检测控制器 URL,检测顺序:

  1. 查找指向 PAC 控制器服务的 Ingress 资源
  2. 查找 LoadBalancer 类型的 Service
  3. 查找 NodePort 类型的 Service
  4. 若均未找到,则提示手动输入 URL

若自动检测失败,您可在提示时手动输入控制器 URL。

普通用户提示

如果您是普通用户,需要获取 PAC 控制器 URL:

  1. 尝试执行上述查询命令(前提是您有集群访问权限)
  2. 如果命令无效或无权限,请联系您的 PAC 管理员获取 URL
  3. 管理员可使用本节方法查找

注意:控制器 URL 必须能被 Git 提供商服务器访问,以接收 webhook 事件。

配置设置

您可以通过 OpenShiftPipelinesAsCode CR 中的 settings 字段自定义 PAC 行为:

设置项说明默认值
application-name在 Git 提供商 UI 中显示的名称Pipelines as Code CI
hub-urlTekton Hub API URLhttp://tekton-hub-api.tekton-pipelines:8000/v1(集群内,默认命名空间)
remote-tasks启用远程任务解析true
secret-auto-create自动创建 Secrettrue
error-detection-from-container-logs从容器日志检测错误false
error-log-snippet显示错误日志片段true
custom-console-nameGit 提供商 UI 中自定义控制台链接的显示名称``(空)
custom-console-url自定义控制台的基础 URL(例如 OpenShift Console)``(空)
custom-console-url-pr-detailsPR/MR 详情页 URL 模板,支持变量:{{namespace}}{{pipelinerun}}``(空)
custom-console-url-pr-tasklogPR/MR 任务日志页 URL 模板,支持变量:{{namespace}}{{pipelinerun}}{{taskrun}}``(空)
custom-console-url-namespace命名空间页面 URL 模板,支持变量:{{namespace}}``(空)

关于 hub-url

  • 默认值指向默认命名空间(tekton-pipelines)内的集群内 Tekton Hub 服务
  • 格式为:http://<service-name>.<namespace>:<port>/v1
  • 如果 Tekton Hub 部署在其他命名空间,请相应调整 URL 中的命名空间
  • hub-url 中的命名空间是 Tekton Hub 所在命名空间,可能与 PAC 的 targetNamespace 不同
  • 若使用外部 Hub(如公共 Tekton Hub),可设置为 https://api.hub.tekton.dev/v1
  • 仅 PAC 控制器需要访问此 URL

关于 custom-console-namecustom-console-url

  • 用于配置 Git 提供商 UI 中的自定义控制台链接
  • custom-console-name 是自定义控制台链接的显示名称
  • custom-console-url 是自定义控制台的基础 URL(例如 Devops Console)
  • custom-console-url-pr-details 是 PR/MR 详情页 URL 模板,支持变量:{{namespace}}{{pipelinerun}}
  • custom-console-url-pr-tasklog 是 PR/MR 任务日志页 URL 模板,支持变量:{{namespace}}{{pipelinerun}}{{taskrun}}
  • custom-console-url-namespace 是命名空间页面 URL 模板,支持变量:{{namespace}}
  • 该配置允许将 Git 提供商中的流水线状态链接指向自定义控制台

更多 PAC 设置详情,请参见常见配置更新章节。

更新 PAC 组件

更新配置

  1. 编辑 OpenShiftPipelinesAsCode CR:

    kubectl edit openshiftpipelinesascodes.operator.tekton.dev pipelines-as-code
  2. 根据需要更新 settings 字段:

    spec:
      settings:
        application-name: "My Custom PAC"
        hub-url: http://tekton-hub-api.tekton-pipelines:8000/v1
        remote-tasks: "true"
        error-detection-from-container-logs: "true"
  3. 保存并退出。operator 会自动更新 TektonInstallerSet 并应用更改。

更新组件版本

升级 PAC 组件版本,请升级 Tekton Operator:

  1. 升级 Tekton Operator 到目标版本
  2. operator 会自动:
    • 删除旧的 TektonInstallerSet
    • 创建包含新 PAC 版本的 TektonInstallerSet
    • 更新 OpenShiftPipelinesAsCode CR 的版本信息

升级后检查版本:

kubectl get openshiftpipelinesascodes.operator.tekton.dev pipelines-as-code -o jsonpath='{.status.version}'

验证更新

更新配置后:

  1. 查看 OpenShiftPipelinesAsCode CR 状态:

    kubectl get openshiftpipelinesascodes.operator.tekton.dev pipelines-as-code

示例输出:

NAME                VERSION           READY   REASON
pipelines-as-code   v0.36.0-2881c2a   True    
  1. 检查 Pod 是否重启(将 <pac-namespace> 替换为 PAC 命名空间):

    kubectl get pods -n <pac-namespace> | grep pipelines-as-code

示例输出:

pipelines-as-code-controller-665b9588c8-q7ftg        1/1     Running   0          4d2h
pipelines-as-code-watcher-86d58cb688-xkzxg           1/1     Running   0          4d2h
pipelines-as-code-webhook-6f6b79c7b6-w8shs           1/1     Running   0          4d2h
  1. 查看 Pod 日志是否有错误:

    kubectl logs -n <pac-namespace> -l app.kubernetes.io/part-of=pipelines-as-code --tail=50

示例输出:

{"level":"info","ts":"2025-11-27T19:28:35.773Z","logger":"pipelinesascode","caller":"adapter/adapter.go:84","msg":"Starting Pipelines as Code version: nightly-20251126-"}
{"level":"info","ts":"2025-11-27T19:28:35.774Z","logger":"pipelinesascode","caller":"injection/health_check.go:43","msg":"Probes server listening on port 8080"}
...
  1. 验证配置是否生效:

    kubectl get configmap -n <pac-namespace> pipelines-as-code -o yaml

示例输出:

apiVersion: v1
kind: ConfigMap
metadata:
  name: pipelines-as-code
  namespace: <pac-namespace>
data:
  application-name: Pipelines as Code CI
  hub-url: https://api.hub.tekton.dev/v1
  remote-tasks: "true"
  secret-auto-create: "true"
  error-detection-from-container-logs: "true"
  error-log-snippet: "true"
  ...

回滚配置

如需回滚配置更改:

  1. 恢复 OpenShiftPipelinesAsCode CR 中的先前配置:

    kubectl edit openshiftpipelinesascodes.operator.tekton.dev pipelines-as-code
  2. 或从备份恢复:

变更前创建备份:

kubectl get openshiftpipelinesascodes.operator.tekton.dev pipelines-as-code -o yaml > pac-backup.yaml

从备份恢复:

kubectl apply -f pac-backup.yaml

常见配置更新

修改应用名称

spec:
  settings:
    application-name: "New Application Name"

启用错误检测

spec:
  settings:
    error-detection-from-container-logs: "true"
    error-detection-max-number-of-lines: "100"

更新 Hub URL

如果 Tekton Hub 部署在其他命名空间或想使用外部 Hub:

spec:
  settings:
    # 集群内其他命名空间的 Hub
    hub-url: "http://tekton-hub-api.<your-namespace>:8000/v1"
    
    # 或外部/公共 Hub
    hub-url: "https://api.hub.tekton.dev/v1"

查找 Tekton Hub 服务

kubectl get svc -A | grep tekton-hub-api

示例输出:

tekton-pipelines   tekton-hub-api   ClusterIP   10.96.123.45   <none>   8000/TCP   10m

禁用远程任务

spec:
  settings:
    remote-tasks: "false"

配置自定义控制台链接

集成 PAC 与自定义控制台,允许 Git 提供商(GitLab、GitHub 等)中的流水线状态链接指向您的自定义控制台。

配置示例
spec:
  settings:
    # 自定义控制台显示名称
    custom-console-name: "My Console"
    
    # 自定义控制台基础 URL(控制台入口)
    custom-console-url: "https://console.example.com"
    
    # PipelineRun 详情页 URL 模板
    # 格式:/console-acp/workspace/{{ namespace }}~CLUSTER_NAME~{{ namespace }}/pipeline/pipelineRuns/detail/{{ pr }}
    # 将 CLUSTER_NAME 替换为实际集群名(如 my-cluster、business-1)
    custom-console-url-pr-details: "https://console.example.com/console-acp/workspace/{{ namespace }}~my-cluster~{{ namespace }}/pipeline/pipelineRuns/detail/{{ pr }}"
    
    # TaskRun 日志页 URL 模板
    # 格式:/console-acp/workspace/~CLUSTER_NAME~{{ namespace }}/pipeline/pipelineRuns/detail/{{ pr }}?tab=task_overview&id={{ task }}
    custom-console-url-pr-tasklog: "https://console.example.com/console-acp/workspace/{{ namespace }}~my-cluster~{{ namespace }}/pipeline/pipelineRuns/detail/{{ pr }}?tab=task_overview&id={{ task }}"
    
    # 命名空间流水线列表页 URL 模板
    # 格式:/console-acp/workspace/~CLUSTER_NAME~{{ namespace }}/pipeline/pipelineRuns
    custom-console-url-namespace: "https://console.example.com/console-acp/workspace/{{ namespace }}~my-cluster~{{ namespace }}/pipeline/pipelineRuns"
配置步骤

步骤 1:确认集群名称

联系集群管理员获取正确的集群名称。常见示例:

  • my-cluster - 通用集群名
  • business-1 - 业务集群 1
  • dev-cluster - 开发集群

集群名称在 URL 路径中以 ~CLUSTER_NAME~ 形式出现(注意波浪号)。

步骤 2:设置控制台 URL

custom-console-url 设置为控制台入口(无尾部斜杠):

  • https://console.example.com
  • https://devops.example.com

步骤 3:配置 URL 模板

将 URL 模板中的 CLUSTER_NAME 替换为实际集群名称。PAC 会自动替换以下变量:

  • {{ namespace }}:PipelineRun 执行的命名空间
  • {{ pr }}:PipelineRun 名称
  • {{ task }}:PipelineRun 中的 Task 名称
示例:完整配置

假设集群名为 my-cluster,控制台地址为 https://console.example.com

spec:
  settings:
    custom-console-name: "My Console"
    custom-console-url: "https://console.example.com"
    custom-console-url-pr-details: "https://console.example.com/console-acp/workspace/{{ namespace }}~my-cluster~{{ namespace }}/pipeline/pipelineRuns/detail/{{ pr }}"
    custom-console-url-pr-tasklog: "https://console.example.com/console-acp/workspace/{{ namespace }}~my-cluster~{{ namespace }}/pipeline/pipelineRuns/detail/{{ pr }}?tab=task_overview&id={{ task }}"
    custom-console-url-namespace: "https://console.example.com/console-acp/workspace/{{ namespace }}~my-cluster~{{ namespace }}/pipeline/pipelineRuns"
示例:生成的链接

当 PAC 创建名为 my-app-build-abc123 的 PipelineRun,任务为 build-task,命名空间为 my-project 时:

  • PipelineRun 详情

    https://console.example.com/console-acp/workspace/my-project~my-cluster~my-project/pipeline/pipelineRuns/detail/my-app-build-abc123
  • TaskRun 日志

    https://console.example.com/console-acp/workspace/my-project~my-cluster~my-project/pipeline/pipelineRuns/detail/my-app-build-abc123?tab=task_overview&id=build-task
  • 命名空间流水线列表

    https://console.example.com/console-acp/workspace/my-project~my-cluster~my-project/pipeline/pipelineRuns

这些链接会显示在 Git 提供商 UI(GitLab 合并请求、GitHub 拉取请求等)中,方便开发者快速跳转到自定义控制台。

卸载 PAC 组件

删除 OpenShiftPipelinesAsCode CR

第 1 步:删除 CR

kubectl delete openshiftpipelinesascodes.operator.tekton.dev pipelines-as-code

示例输出:

openshiftpipelinesascode.operator.tekton.dev "pipelines-as-code" deleted

operator 会自动:

  • 删除 TektonInstallerSet(内部 operator 资源)
  • 移除所有 PAC 相关资源(Deployment、Service、ConfigMap 等)
  • 清理 RBAC 资源

注意TektonInstallerSet 是内部 operator 资源,不应手动删除,由 operator 自动管理生命周期。

第 2 步:验证卸载

确认 OpenShiftPipelinesAsCode CR 已删除:

kubectl get openshiftpipelinesascodes.operator.tekton.dev

确认 TektonInstallerSet 已删除(将 <pac-namespace> 替换为 PAC 命名空间):

kubectl get tektoninstallersets -n <pac-namespace> | grep pipelinesascode

注意:此操作仅为只读检查,确认内部 operator 资源已清理。请勿手动删除 TektonInstallerSet。

示例输出(删除成功应为空):

No resources found

确认 PAC Pod 已终止:

kubectl get pods -n <pac-namespace> | grep pipelines-as-code

示例输出(删除成功应为空):

No resources found

清理额外资源

卸载 PAC 后,您可能需要清理额外资源:

删除 Repository CR

如果您创建了用于 Git 提供商集成的 Repository CR:

kubectl get repositories -A
kubectl delete repositories --all -n <namespace>

示例输出:

repository.pipelinesascode.tekton.dev "my-repo" deleted
repository.pipelinesascode.tekton.dev "another-repo" deleted

删除 Secrets

重要:删除 OpenShiftPipelinesAsCode CR 时,operator 会自动清理 PAC 命名空间中带标签 app.kubernetes.io/part-of=pipelines-as-code 的 Secret。但您需要手动删除为 Git 提供商认证创建的 Repository CR 相关 Secret。

自动清理的 Secret(PAC 命名空间内):

  • pipelines-as-code-secret - PAC 控制器内部 Secret(带标签 app.kubernetes.io/part-of=pipelines-as-code

需手动清理的 Secret(Repository CR 所在命名空间):

  • gitlab-secret / github-secret - Git 提供商访问令牌
  • webhook-secret - webhook 校验 Secret
  • git-auth-secret - 私有仓库访问令牌
  • git-ssh-secret - 仓库访问 SSH 密钥

查找并删除 Repository CR 相关 Secret:

  1. 列出 Repository CR 所在命名空间的所有 Secret

    kubectl get secrets -n <namespace>
  2. 识别您为 PAC Repository CR 创建的 Secret

    注意:Secret 名称可能因创建方式不同而异,请仔细确认哪些 Secret 与 PAC 相关。

  3. 删除前确认

    • 所有使用该 Secret 的 Repository CR 已删除
    • Secret 未被集群中其他应用或资源使用
    • 确认该 Secret 可安全删除
  4. 确认无误后删除 Secret

    kubectl delete secret <secret-name> -n <namespace>

警告

  • Secret 可能被多个 Repository CR 或其他资源共享
  • 删除仍在使用的 Secret 会导致认证失败
  • 删除前务必确认 Secret 未被引用

示例输出:

secret "gitlab-secret" deleted

删除 Ingress/Service

如果您创建了 PAC 的 Ingress 或 NodePort Service(将 <pac-namespace> 替换为 PAC 命名空间):

kubectl delete ingress pipelines-as-code -n <pac-namespace>
kubectl delete service pipelines-as-code-controller-nodeport -n <pac-namespace>

示例输出:

ingress.networking.k8s.io "pipelines-as-code" deleted
service "pipelines-as-code-controller-nodeport" deleted

故障排查

PAC Pod 未启动

查看 Pod 日志(将 <pac-namespace> 替换为 PAC 命名空间):

kubectl logs -n <pac-namespace> -l app.kubernetes.io/part-of=pipelines-as-code

示例输出(日志示例):

{"level":"info","ts":"2024-01-01T12:00:00Z","logger":"controller","msg":"Starting PAC controller"}
{"level":"info","ts":"2024-01-01T12:00:01Z","logger":"controller","msg":"PAC controller ready"}

OpenShiftPipelinesAsCode CR 未就绪

查看 CR 状态和事件:

kubectl describe openshiftpipelinesascodes.operator.tekton.dev pipelines-as-code

示例输出(简略):

Name:         pipelines-as-code
Namespace:    
Status:       Ready
Version:      0.x.x
Events:
  Type    Reason   Age   From              Message
  ----    ------   ----  ----              -------
  Normal  Ready    5m    tekton-operator   PAC component deployed successfully

TektonInstallerSet 问题

重要TektonInstallerSet 是内部 operator 资源,遇到问题请勿直接修改或删除,应通过 OpenShiftPipelinesAsCode CR 进行排查。

查看 TektonInstallerSet 状态(将 <pac-namespace> 替换为 PAC 命名空间):

kubectl get tektoninstallersets -n <pac-namespace> -o yaml

若 TektonInstallerSet 显示错误:

  1. 查看 OpenShiftPipelinesAsCode CR 状态,排查潜在问题
  2. 查看 operator 日志获取详细错误信息
  3. 如有必要,删除并重新创建 OpenShiftPipelinesAsCode CR(operator 会自动重建 TektonInstallerSet)

示例输出(简略):

apiVersion: tekton.dev/v1alpha1
kind: TektonInstallerSet
metadata:
  name: pipelines-as-code-installer-set
  namespace: tekton-pipelines
status:
  conditions:
  - status: "True"
    type: Ready

CR 无法删除

如果 OpenShiftPipelinesAsCode CR 无法删除,检查 finalizers:

kubectl get openshiftpipelinesascodes.operator.tekton.dev pipelines-as-code -o yaml | grep finalizers

示例输出(存在 finalizers):

  finalizers:
  - tekton.dev/operator

若无 finalizers,输出为空,表示 CR 可删除。

若存在 finalizers,operator 可能仍在处理,请稍等片刻后重试。

资源未被移除

若部分资源未自动删除:

  1. 查看 TektonInstallerSet 状态排查(将 <pac-namespace> 替换为 PAC 命名空间):

    kubectl get tektoninstallersets -n <pac-namespace> -o yaml

    注意:此为只读检查,TektonInstallerSet 是内部 operator 资源,请勿手动删除。

  2. 手动删除剩余资源:

    kubectl delete deployment -n <pac-namespace> -l app.kubernetes.io/part-of=pipelines-as-code
    kubectl delete service -n <pac-namespace> -l app.kubernetes.io/part-of=pipelines-as-code

后续步骤