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}'
示例输出:
通过 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}'
示例输出:
控制器 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,检测顺序:
- 查找指向 PAC 控制器服务的 Ingress 资源
- 查找 LoadBalancer 类型的 Service
- 查找 NodePort 类型的 Service
- 若均未找到,则提示手动输入 URL
若自动检测失败,您可在提示时手动输入控制器 URL。
普通用户提示
如果您是普通用户,需要获取 PAC 控制器 URL:
- 尝试执行上述查询命令(前提是您有集群访问权限)
- 如果命令无效或无权限,请联系您的 PAC 管理员获取 URL
- 管理员可使用本节方法查找
注意:控制器 URL 必须能被 Git 提供商服务器访问,以接收 webhook 事件。
配置设置
您可以通过 OpenShiftPipelinesAsCode CR 中的 settings 字段自定义 PAC 行为:
关于 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-name 和 custom-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 组件
更新配置
-
编辑 OpenShiftPipelinesAsCode CR:
kubectl edit openshiftpipelinesascodes.operator.tekton.dev pipelines-as-code
-
根据需要更新 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"
-
保存并退出。operator 会自动更新 TektonInstallerSet 并应用更改。
更新组件版本
升级 PAC 组件版本,请升级 Tekton Operator:
- 升级 Tekton Operator 到目标版本
- operator 会自动:
- 删除旧的 TektonInstallerSet
- 创建包含新 PAC 版本的 TektonInstallerSet
- 更新
OpenShiftPipelinesAsCode CR 的版本信息
升级后检查版本:
kubectl get openshiftpipelinesascodes.operator.tekton.dev pipelines-as-code -o jsonpath='{.status.version}'
验证更新
更新配置后:
-
查看 OpenShiftPipelinesAsCode CR 状态:
kubectl get openshiftpipelinesascodes.operator.tekton.dev pipelines-as-code
示例输出:
NAME VERSION READY REASON
pipelines-as-code v0.36.0-2881c2a True
-
检查 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
-
查看 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"}
...
-
验证配置是否生效:
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"
...
回滚配置
如需回滚配置更改:
-
恢复 OpenShiftPipelinesAsCode CR 中的先前配置:
kubectl edit openshiftpipelinesascodes.operator.tekton.dev pipelines-as-code
-
或从备份恢复:
变更前创建备份:
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。
示例输出(删除成功应为空):
确认 PAC Pod 已终止:
kubectl get pods -n <pac-namespace> | grep pipelines-as-code
示例输出(删除成功应为空):
清理额外资源
卸载 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:
-
列出 Repository CR 所在命名空间的所有 Secret:
kubectl get secrets -n <namespace>
-
识别您为 PAC Repository CR 创建的 Secret。
注意:Secret 名称可能因创建方式不同而异,请仔细确认哪些 Secret 与 PAC 相关。
-
删除前确认:
- 所有使用该 Secret 的 Repository CR 已删除
- Secret 未被集群中其他应用或资源使用
- 确认该 Secret 可安全删除
-
确认无误后删除 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 显示错误:
- 查看
OpenShiftPipelinesAsCode CR 状态,排查潜在问题
- 查看 operator 日志获取详细错误信息
- 如有必要,删除并重新创建
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 可能仍在处理,请稍等片刻后重试。
资源未被移除
若部分资源未自动删除:
-
查看 TektonInstallerSet 状态排查(将 <pac-namespace> 替换为 PAC 命名空间):
kubectl get tektoninstallersets -n <pac-namespace> -o yaml
注意:此为只读检查,TektonInstallerSet 是内部 operator 资源,请勿手动删除。
-
手动删除剩余资源:
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
后续步骤