TektonConfig

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

术语说明

术语说明
TektonConfig通过 Operator 管理所有 Tekton 组件的主要自定义资源。
TektonPipeline提供定义和运行 CI/CD 工作流的核心 pipeline 功能的组件。
TektonTrigger允许事件触发 pipeline 执行的组件。
TektonChain提供供应链安全功能(如签名和验证)的组件。
TektonHub托管可重用 Tasks 和 Pipelines 目录的组件。
TektonResult存储并支持查询 TaskRun 和 PipelineRun 结果的组件。
Profile决定安装哪些组件的配置选项。
Target NamespaceTekton 组件将被安装的命名空间。
Pruner清理已完成的 TaskRuns 和 PipelineRuns 以管理集群资源的功能。

为什么需要 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 组件实现全面 pipeline

约束与限制

  • 需要集群级权限安装和管理组件
  • 部分配置可能依赖平台(Kubernetes 与 OpenShift)
  • TektonConfig 资源变更可能触发组件重新部署
  • 部分高级配置仍需直接操作组件特定资源
  • 主版本升级可能需要额外步骤

原则

TektonConfig 结构

TektonConfig 资源结构如下:

apiVersion: operator.tekton.dev/v1alpha1
kind: TektonConfig
metadata:
  name: config
spec:
  # Profile 决定安装哪些组件
  profile: all  # 可选值:lite, basic, all

  # Tekton 组件的目标命名空间
  targetNamespace: tekton-pipelines

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

  # 组件特定配置
  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

  hub:
    params:
      - name: enable-devconsole-integration
        value: "false"

  result:
    enable: false

  chain:
    enable: false

关键组件及其关系

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

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

    • 默认通常为 tekton-pipelines
    • 所有组件均安装在此命名空间
  3. 组件配置:各组件的具体设置

    • pipeline:Pipeline controller 配置
    • trigger:Triggers controller 配置
    • hub:Tekton Hub 配置
    • 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 小时

  trigger:
    enable-api-fields: stable

  hub:
    enable: true

  result:
    enable: true

  chain:
    enable: true

重要参数说明

Pipeline 配置

pipeline 部分配置核心 Pipeline controller。

适用场景

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

约束与限制

  • 部分功能可能仅适用于特定 Kubernetes 平台
  • HA 设置变更可能导致短暂中断
  • Alpha API 字段可能随版本变更

原则/参数说明

关键参数包括:

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

Pruner 配置

pruner 自动清理已完成的 TaskRuns 和 PipelineRuns 以管理集群资源。

适用场景

  • 长期运行且有大量 pipeline 执行的集群
  • 高执行量的 CI/CD 系统
  • 存储资源有限的环境
  • 需要保留策略以满足合规要求的场景

配置示例

pruner:
  resources:
    - taskrun
    - pipelinerun
  schedule: "0 1 * * *"  # 每天凌晨 1 点运行
  keep: 100  # 保留最近 100 个运行
  keep-since: 43200  # 保留最近 12 小时内的运行(秒)

参考资料