TektonConfig

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

术语解释

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

为什么我们需要 TektonConfig

管理 Tekton 组件的挑战

在没有 TektonConfig 的情况下,管理 Kubernetes 集群中的 Tekton 组件需要:

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

这种方法导致:

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

TektonConfig 如何解决这些问题

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

  1. 安装多个组件:通过单一资源部署管道、触发器和其他组件
  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 资源的更改可能会触发组件的重新部署
  • 某些高级配置仍可能需要直接与特定于组件的资源交互
  • 不同主要版本之间的升级可能需要额外步骤

原则

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"

  results:
    enable: false

  chain:
    enable: false

关键组件及其关系

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

    • lite:仅安装基本的管道控制器
    • basic:安装管道和触发器控制器
    • all:安装所有可用组件
  2. targetNamespace:组件将被安装的命名空间

    • 默认通常为 tekton-pipelines
    • 所有组件都安装在此命名空间中
  3. 组件配置:每个组件的特定设置

    • pipeline:管道控制器的配置
    • trigger:触发器控制器的配置
    • hub:Tekton Hub 的配置
    • results: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

  results:
    enable: true

  chain:
    enable: true

重要参数说明

管道配置

管道部分配置核心管道控制器。

适用场景

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

约束和限制

  • 某些特性可能特定于某些 Kubernetes 平台
  • 更改高可用性设置可能会导致临时中断
  • Alpha API 字段可能在版本间变化

原则/参数说明

关键参数包括:

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

Pruner 配置

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

适用场景

  • 具有大量管道执行的长期集群
  • 执行量高的 CI/CD 系统
  • 存储资源有限的环境
  • 需要保留策略的合规场景

配置示例

pruner:
  resources:
    - taskrun
    - pipelinerun
  schedule: "0 1 * * *"  # 每天凌晨 1:00 运行
  keep: 100  # 保留最近的 100 次运行
  keep-since: 43200  # 保留过去 12 小时的运行(以秒为单位)

参考材料