TektonConfig

TektonConfig 是 Tekton Operator 提供的顶层自定义资源,使用户能够从单一控制点安装、配置并管理所有 Tekton 组件。它为 Kubernetes 集群内的 Tekton 生态系统管理提供了一种统一的方法。

术语说明

术语描述
TektonConfig通过 Operator 管理所有 Tekton 组件的主要自定义资源。
TektonPipeline提供核心流水线功能,用于定义和运行 CI/CD 工作流的组件。
TektonTrigger允许事件触发流水线执行的组件。
TektonChain提供签名和验证等供应链安全功能的组件。
DevOps Hub用于可复用 Task 和 Pipeline 的目录体验。在当前版本中,运行时数据源是 artifacthub-shim 插件,而不是由 Tekton Operator 管理的 Tekton Hub 运行时。
TektonResult用于存储并支持查询 TaskRun 和 PipelineRun 结果的组件。
Profile决定要安装哪些组件的配置选项。
Target Namespace安装 Tekton 组件的 namespace。
Pruner用于清理已完成的 TaskRun 和 PipelineRun,以管理集群资源的功能。

为什么需要 TektonConfig

管理 Tekton 组件的挑战

如果没有 TektonConfig,在 Kubernetes 集群中管理 Tekton 组件需要:

  • 手动分别安装和配置每个组件
  • 单独管理组件版本和兼容性
  • 通过自定义脚本处理升级和配置变更
  • 分别维护每个组件的配置
  • 复杂协调组件之间的依赖关系

这种方法会导致:

  • 运维复杂度增加
  • 配置错误风险更高
  • 难以维护版本兼容性
  • 升级和变更耗时
  • 不同环境之间的配置不一致

TektonConfig 如何解决这些问题

TektonConfig 提供了一种统一的声明式方法,用于:

  1. 安装多个组件:通过单个资源部署 Pipelines、Triggers 以及其他组件
  2. 确保兼容性:Operator 管理组件之间的版本兼容性
  3. 集中配置:通过单一规范配置所有组件
  4. 简化升级:通过修改单个资源更新组件版本
  5. 标准化管理:对所有组件使用一致的模式
  6. 启用平台特定功能:无缝配置 Kubernetes 或 OpenShift 特定功能

这种集中式方法可显著降低运维复杂度,并确保不同环境之间的配置一致性。

优势

  • 管理简化:通过单一资源控制所有 Tekton 组件
  • 降低运维开销:由 Operator 负责安装、配置和升级
  • 一致性:确保所有组件的配置一致
  • 版本兼容性:Operator 确保各组件版本可协同工作
  • 平台感知:为 Kubernetes 和 OpenShift 提供平台特定功能
  • 声明式配置:使用 Kubernetes 原生方法管理整个 Tekton 技术栈
  • 降低错误风险:集中验证可防止错误配置
  • 资源清理:内置 pruner 功能用于管理集群资源

适用场景

TektonConfig 在以下场景中至关重要:

  1. 生产 CI/CD 环境:简化生产级 Tekton 安装的管理。
  2. 多租户集群:在共享环境中配置并隔离 Tekton 组件。
  3. 企业级部署:确保多个集群之间的配置一致。
  4. 受监管环境:维护并验证特定配置以满足合规要求。
  5. 自动化基础设施:使用 GitOps 方法管理 Tekton 组件。
  6. 复杂 CI/CD 工作流:协调多个 Tekton 组件以构建完整流水线。

约束与限制

  • 需要集群级权限才能安装和管理组件
  • 某些配置可能与平台相关(Kubernetes 与 OpenShift)
  • 对 TektonConfig 资源的更改可能会触发组件重新部署
  • 某些高级配置仍可能需要直接与特定组件资源交互
  • 跨 major 版本升级可能需要额外步骤

原则

TektonConfig 结构

TektonConfig 资源具有以下结构:

apiVersion: operator.tekton.dev/v1alpha1
kind: TektonConfig
metadata:
  name: config
spec:
  # Profile determines which components to install
  profile: all  # Options: lite, basic, all

  # Target namespace for the Tekton components
  targetNamespace: tekton-pipelines

  config:
    nodeSelector:
      key: value
    tolerations:
    - key: "key1"
      operator: "Equal"
      value: "value1"
      effect: "NoSchedule"
    priorityClassName: system-node-critical

  # Component-specific configurations
  pipeline:
    disable-affinity-assistant: false
    disable-creds-init: false
    enable-api-fields: alpha
    enable-tekton-oci-bundles: true
    performance:
      disable-ha: false
      buckets: 1
      threads-per-controller: 2
    pruner:
      resources:
        - taskrun
        - pipelinerun
      schedule: "0 8 * * *"
      keep: 100
      keep-since: 43200

  trigger:
    enable-api-fields: stable

  result:
    enable: false

  chain:
    enable: false

关键组件及其关系

  1. Profile:决定要安装哪些组件

    • lite:仅安装基础 Pipeline controller
    • basic:安装 Pipeline 和 Triggers controllers
    • all:安装所有可用组件
  2. targetNamespace:安装组件的 namespace

    • 默认通常为 tekton-pipelines
    • 所有组件都安装在此 namespace 中
  3. 组件配置:各组件的特定设置

    • pipeline:Pipeline controller 的配置
    • trigger:Triggers controller 的配置
    • DevOps Hub catalog:由独立的 artifacthub-shim 插件提供;在使用自定义安装位置时,请在 pipeline.hub-resolver-config 下配置 resolver 默认值。
    • result:Tekton Results 的配置
    • chain:Tekton Chains 的配置
  4. Pruner:自动清理资源的配置

    • resources:需要清理的资源类型(TaskRuns、PipelineRuns)
    • schedule:清理任务的 Cron 调度
    • keep:要保留的资源数量
    • keep-since:资源保留时长(秒)

配置示例

最小配置

apiVersion: operator.tekton.dev/v1alpha1
kind: TektonConfig
metadata:
  name: config
spec:
  profile: basic
  targetNamespace: tekton-pipelines

包含所有组件的生产配置

apiVersion: operator.tekton.dev/v1alpha1
kind: TektonConfig
metadata:
  name: config
spec:
  profile: all
  targetNamespace: tekton-pipelines

  pipeline:
    enable-api-fields: stable
    performance:
      disable-ha: false
      buckets: 3
      threads-per-controller: 2
    pruner:
      resources:
        - taskrun
        - pipelinerun
      schedule: "0 1 * * *"
      keep: 500
      keep-since: 172800  # 48 hours

  trigger:
    enable-api-fields: stable

  result:
    enable: true

  chain:
    enable: true

重要参数说明

Pipeline 配置

pipeline 部分用于配置核心 Pipeline controller。

适用场景

  • 控制生产环境的高可用性
  • 管理资源受限环境中的资源使用
  • 为测试启用实验性功能
  • 设置已完成运行的自动清理

约束与限制

  • 某些功能可能仅适用于特定 Kubernetes 平台
  • 更改 HA 设置可能会导致短暂中断
  • Alpha API 字段可能会在不同版本之间发生变化

原则/参数说明

关键参数包括:

  • disable-affinity-assistant:控制 workspace 的 affinity assistant
  • disable-creds-init:控制凭证初始化
  • enable-api-fields:控制 feature gates(stable、alpha、beta)
  • performance:控制器性能和扩展设置
  • pruner:自动清理资源的配置

Pruner 配置

pruner 会自动清理已完成的 TaskRun 和 PipelineRun,以管理集群资源。

适用场景

  • 运行时间较长且包含大量流水线执行的集群
  • 执行量较高的 CI/CD 系统
  • 存储资源有限的环境
  • 需要保留策略的合规场景

配置示例

pruner:
  resources:
    - taskrun
    - pipelinerun
  schedule: "0 1 * * *"  # Run at 1:00 AM daily
  keep: 100  # Keep the 100 most recent runs
  keep-since: 43200  # Keep runs from the last 12 hours (in seconds)

参考资料