禁用未完成 Run 的实时收集

功能概述

默认情况下,tekton-results-watcher 会在创建 TaskRun 和 PipelineRun 记录时存储它们,并在资源发生变化时持续对这些记录执行 upsert。这样可以实时查看正在运行的资源,但也会增加 Results API 和数据库的写入负载。

你可以通过在 tekton-results-watcher controller 上设置 --disable_storing_incomplete_runs=true 标志来降低这种写入负载。启用此标志后,未完成的 Run 不会存储到 Tekton Results 中。watcher 仅在 Run 达到完成状态后才会存储该 Run。

使用场景

  • 在包含大量短生命周期或频繁更新的 Run 的集群中,减少 Results 数据库写入。
  • 在不需要对正在运行资源进行实时可见性的情况下,提升 watcher 和数据库性能。
  • 仅存储最终执行记录,同时通过 Tekton Results 保留已完成 Run 的历史记录。

前提条件

  • Tekton Results 已通过 TektonConfig 安装。
  • 你有权限更新 TektonConfig 资源。
  • 你知道 Results 安装所在的命名空间。下面的示例使用默认的 tekton-pipelines 命名空间。

步骤

1. 配置 watcher 标志

更新 TektonConfig.spec.result.options.deployments.tekton-results-watcher,并将该标志添加到 watcher 容器中:

apiVersion: operator.tekton.dev/v1alpha1
kind: TektonConfig
metadata:
  name: config
spec:
  result:
    options:
      deployments:
        tekton-results-watcher:
          spec:
            template:
              spec:
                containers:
                  - name: watcher
                    args:
                      - "--disable_storing_incomplete_runs=true"

operator 会按标志键合并容器参数。你无需复制现有的 watcher 参数,例如 -api_addr、-auth_mode 或 -logs_api;新标志会被添加到现有参数列表中。

2. 应用配置

应用更新后的 TektonConfig 清单:

$ kubectl apply -f tekton-config-disable-incomplete-runs.yaml

tektonconfig.operator.tekton.dev/config configured

等待 watcher Deployment 完成滚动更新:

$ kubectl rollout status -n tekton-pipelines deployment/tekton-results-watcher

deployment "tekton-results-watcher" successfully rolled out

3. 验证 watcher 参数

检查 watcher Pod 模板是否包含该标志:

$ kubectl get deployment -n tekton-pipelines tekton-results-watcher \
  -o jsonpath='{range .spec.template.spec.containers[?(@.name=="watcher")].args[*]}{.}{"\n"}{end}'

-api_addr
$(TEKTON_RESULTS_API_SERVICE)
-auth_mode
$(AUTH_MODE)
-logs_api=true
--disable_storing_incomplete_runs=true

运行结果

滚动更新完成后:

  • 运行中的 TaskRun 和 PipelineRun 资源在状态仍未完成时不会存储到 Tekton Results 中。
  • 已完成的 TaskRun 和 PipelineRun 资源会在完成后存储。
  • 由于不会持续对中间资源状态变化执行 upsert,因此 Results API 和数据库接收到的更新更少。

功能验证

创建或触发一个运行时间足够长、便于在运行期间检查的 TaskRun 或 PipelineRun。

在 Run 仍未完成时,查询 Results 记录:

$ tkn results records list default/results/-

正在运行的资源不应出现在 Results 记录中。

Run 完成后,再次查询记录:

$ tkn results records list default/results/-

此时,已完成的资源应出现在 Results 记录中。

NOTE

确切的 tkn results 地址和身份验证选项取决于你的 Results 安装。有关 CLI 配置和端口转发示例,请参见 Quick Start。

回滚

要恢复实时收集,请将该标志设置为 false:

apiVersion: operator.tekton.dev/v1alpha1
kind: TektonConfig
metadata:
  name: config
spec:
  result:
    options:
      deployments:
        tekton-results-watcher:
          spec:
            template:
              spec:
                containers:
                  - name: watcher
                    args:
                      - "--disable_storing_incomplete_runs=false"

应用更新后的 TektonConfig,并等待 watcher Deployment 再次完成滚动更新:

$ kubectl apply -f tekton-config-enable-live-collection.yaml
$ kubectl rollout status -n tekton-pipelines deployment/tekton-results-watcher

故障排查

watcher Deployment 中看不到该标志

检查 TektonConfig 更新是否已被接受:

$ kubectl get tektonconfig config -o yaml

确认配置位于 spec.result.options.deployments.tekton-results-watcher 下,并且容器名称为 watcher。

运行中的资源仍然出现在 Results 中

检查新的 watcher Pod 是否正在运行:

$ kubectl get pods -n tekton-pipelines -l app.kubernetes.io/name=tekton-results-watcher

如果旧的 Pod 仍在运行,请等待滚动更新完成。同时还要确认你正在检查的 Run 是在新的 watcher Pod 启动之后创建的。

已完成的资源没有出现在 Results 中

检查 watcher 日志中是否存在存储或 API 错误:

$ kubectl logs -n tekton-pipelines deployment/tekton-results-watcher

同时确认 Results API 和数据库运行正常。有关安装和基本验证步骤,请参见 Quick Start。