保留策略配置

Tekton Results 保留策略为 S3 兼容存储系统中的数据库记录和已归档日志提供自动清理功能。保留智能体会根据可配置的基于时间的策略,定期移除已过期的结果及其关联的日志负载。

配置

保留策略通过 TektonConfig 自定义资源进行配置,使用 spec.result.options 字段来指定 ConfigMap 覆盖项:

apiVersion: operator.tekton.dev/v1alpha1
kind: TektonConfig
metadata:
  name: config
spec:
  result:
    logs_api: true
    logs_type: S3
    secret_name: my-s3-secret
    is_external_db: true
    db_host: your-postgres-host.example.com
    db_port: 5432
    db_name: tekton_results
    db_sslmode: require
    db_secret_name: tekton-results-postgres
    options:
      configMaps:
        tekton-results-config-results-retention-policy:
          data:
            defaultRetention: "30"  # 保留结果的天数(30 天)
            runAt: "0 2 * * *"      # Cron 调度:每天凌晨 2 点

配置参数

字段说明示例值是否必需
defaultRetention删除结果前保留的天数"30"是
runAt运行保留智能体的 Cron 调度"0 2 * * *"是
  • defaultRetention:指定在自动删除前保留结果的天数。此期限到期后,数据库记录以及 S3 存储中的关联日志负载都将被清理。

  • runAt:定义保留智能体运行时间的 Cron 表达式。

    • "0 2 * * *" - 每天凌晨 2:00
    • "0 2 * * 0" - 每周日凌晨 2:00
    • "0 2 1 * *" - 每月 1 日凌晨 2:00

应用配置

应用 TektonConfig 配置:

kubectl apply -f tekton-config-retention-config.yaml

示例输出:

tektonconfig.operator.tekton.dev/config configured

等待保留智能体重启:

kubectl rollout status -n tekton-pipelines deployment/tekton-results-retention-policy-agent

示例输出:

deployment "tekton-results-retention-policy-agent" successfully rolled out

验证配置是否已生效:

kubectl get pods -n tekton-pipelines -l app.kubernetes.io/name=tekton-results-retention-policy-agent

示例输出:

NAME                                                   READY   STATUS    RESTARTS   AGE
tekton-results-retention-policy-agent-5c9g2            1/1     Running   0          5m

重要说明

重要:统一清理功能(同时删除数据库记录和 S3 日志负载)是一个增强功能(基于 patch),目前在 Community 版 Tekton Results 中不可用。Community 版本只会删除数据库记录,但会保留 S3 存储中的日志负载,这可能导致存储空间无限增长。

检查 TektonConfig 保留配置:

kubectl get tektonconfig config -o yaml

示例输出(节选):

apiVersion: operator.tekton.dev/v1alpha1
kind: TektonConfig
metadata:
  name: config
spec:
  result:
    logs_api: true
    logs_type: S3
    secret_name: my-s3-secret
    is_external_db: true
    db_host: your-postgres-host.example.com
    options:
      configMaps:
        tekton-results-config-results-retention-policy:
          data:
            defaultRetention: "30"
            runAt: "0 2 * * *"

检查保留智能体日志:

kubectl logs -n tekton-pipelines deployment/tekton-results-retention-policy-agent

示例输出:

{"level":"info","ts":"2023-05-15T10:30:45.123Z","caller":"retention/main.go:89","msg":"Starting Tekton Results retention policy agent"}
{"level":"info","ts":"2023-05-15T10:30:45.124Z","caller":"retention/agent.go:45","msg":"Retention policy configured: 30 days, schedule: 0 2 * * *"}
{"level":"info","ts":"2023-05-15T10:30:45.125Z","caller":"retention/scheduler.go:123","msg":"Next execution scheduled for: 2023-05-16T02:00:00Z"}

验证

若要快速验证保留策略是否按预期工作,请按以下步骤操作:

  1. 创建测试结果/日志:生成一些 Tekton PipelineRuns 或 TaskRuns,使其在 Tekton Results 数据库中产生结果和日志。

    # 创建一个示例 PipelineRun 以生成测试数据
    kubectl apply -f sample-pipelinerun.yaml
  2. 验证初始状态:检查结果和日志是否存在于数据库和 S3 存储中(如果适用)。

    # 检查 Tekton Results
    tkn results list
    
    # 或者如果可以访问数据库,也可以直接查询数据库
    kubectl exec -it -n tekton-pipelines deployment/tekton-results-read-api -- grpcurl -plaintext -d '{}' localhost:8080 api.v1alpha2.Results.ListResults
  3. 修改保留策略进行测试:临时设置一个很短的保留周期和特定的 Cron 调度用于测试(例如,在当前时间 + 10 分钟时执行一次)。

    options:
      configMaps:
        tekton-results-config-results-retention-policy:
          data:
            defaultRetention: "0"  # 保留 0 天(立即清理)
            # 在特定时间执行一次(当前时间 + 10 分钟)
            # 示例:如果当前时间是 14:30,则设置为 "40 14 * * *" 表示 14:40
            # 根据需要将分钟值修改为当前分钟 + 10(必要时调整日期/小时)
            runAt: "40 14 * * *"  # 示例:在 14:40 运行(大约是当前时间 + 10 分钟)
  4. 应用修改后的配置:应用临时测试配置并等待保留智能体重启。

    kubectl apply -f tekton-config-test-config.yaml
    kubectl rollout restart -n tekton-pipelines deployment/tekton-results-retention-policy-agent
  5. 监控保留智能体日志:查看保留智能体日志,以确认清理操作正在执行。

    kubectl logs -n tekton-pipelines deployment/tekton-results-retention-policy-agent -f
  6. 验证是否完成清理:在保留调度执行后,验证较旧的结果和日志是否已被移除。

    # 检查结果是否已被清理
    tkn results list
    
    # 同时检查 S3 存储,确认日志文件是否已被清理
    # 使用你的 S3 客户端列出 bucket 中的对象
    aws s3 ls s3://your-bucket-name/path/to/tekton-logs/ --recursive
  7. 恢复生产环境设置:验证完成后,将保留策略恢复为你期望的生产环境值。

警告:在设置非常短的保留周期时要格外小心,因为这会立即删除结果。请确保使用测试环境进行验证。