TektonConfig
TektonConfig 是由 Tekton Operator 提供的顶级自定义资源,使用户能够从一个控制点安装、配置和管理所有 Tekton 组件。它在 Kubernetes 集群内提供了统一的 Tekton 生态系统管理方法。
术语解释
术语 | 描述 |
---|
TektonConfig | 用于通过 Operator 管理所有 Tekton 组件的主要自定义资源。 |
TektonPipeline | 提供定义和运行 CI/CD 工作流的核心管道功能的组件。 |
TektonTrigger | 允许事件触发管道执行的组件。 |
TektonChain | 提供供应链安全特性,如签名和验证的组件。 |
TektonHub | 托管可重用任务和管道目录的组件。 |
TektonResult | 存储并允许查询 TaskRun 和 PipelineRun 结果的组件。 |
Profile | 决定安装哪些组件的配置选项。 |
Target Namespace | Tekton 组件将被安装的命名空间。 |
Pruner | 清理已完成的 TaskRuns 和 PipelineRuns 以管理集群资源的功能。 |
为什么我们需要 TektonConfig
管理 Tekton 组件的挑战
在没有 TektonConfig 的情况下,管理 Kubernetes 集群中的 Tekton 组件需要:
- 手动单独安装和配置每个组件
- 单独管理组件版本和兼容性
- 自定义脚本处理升级和配置更改
- 分别维护每个组件的配置
- 复杂的组件间依赖协调
这种方法导致:
- 操作复杂性增加
- 配置错误的风险更高
- 难以维护版本兼容性
- 升级和更改耗时
- 环境间配置不一致
TektonConfig 如何解决这些问题
TektonConfig 提供了一种统一的声明式方法:
- 安装多个组件:通过单一资源部署管道、触发器和其他组件
- 确保兼容性:Operator 管理组件之间的版本兼容性
- 集中配置:通过单一规范配置所有组件
- 简化升级:通过更改单一资源更新组件版本
- 标准化管理:对所有组件使用一致的模式
- 启用特定于平台的功能:无缝配置 Kubernetes 或 OpenShift 的特性
这种集中化的方法显著减少了操作复杂性,并确保跨环境配置一致。
优势
- 简化管理:通过单一资源控制所有 Tekton 组件
- 减少操作开销:Operator 处理安装、配置和升级
- 一致性:确保所有组件的配置一致
- 版本兼容性:Operator 确保组件版本能够协同工作
- 平台感知:为 Kubernetes 和 OpenShift 提供平台特定功能
- 声明式配置:使用 Kubernetes 原生方法管理整个 Tekton 堆栈
- 降低错误风险:集中验证防止错误配置
- 资源清理:内置的 Pruner 功能管理集群资源
适用场景
TektonConfig 在以下场景中至关重要:
- 生产 CI/CD 环境:简化生产级 Tekton 安装的管理。
- 多租户集群:在共享环境中配置和隔离 Tekton 组件。
- 企业部署:确保多个集群的一致配置。
- 受监管环境:维护并验证特定配置以确保合规性。
- 自动化基础设施:使用 GitOps 方法管理 Tekton 组件。
- 复杂的 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
关键组件及其关系
-
Profile:决定安装哪些组件
- lite:仅安装基本的管道控制器
- basic:安装管道和触发器控制器
- all:安装所有可用组件
-
targetNamespace:组件将被安装的命名空间
- 默认通常为
tekton-pipelines
- 所有组件都安装在此命名空间中
-
组件配置:每个组件的特定设置
- pipeline:管道控制器的配置
- trigger:触发器控制器的配置
- hub:Tekton Hub 的配置
- results:Tekton Results 的配置
- chain:Tekton Chains 的配置
-
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 小时的运行(以秒为单位)
参考材料