TektonPipeline

TektonPipeline 是 Tekton Operator 提供的一种自定义资源,允许您在 Kubernetes 集群中安装、更新和管理 Tekton Pipelines。它提供了一种声明式方式来配置和维护 Tekton Pipeline 组件,而无需手动应用 manifest。

术语说明

术语描述
TektonPipeline用于管理 Kubernetes 集群中 Tekton Pipeline 组件生命周期的自定义资源。
Tekton Operator用于管理包括 Pipeline、Triggers、Dashboard 等 Tekton 组件的 Kubernetes operator。
targetNamespace用于安装 Tekton Pipeline 组件的命名空间。
Pipeline Controller处理 Pipeline 和 Task 资源的主要控制器。
Webhook在 Tekton Pipeline 资源持久化到集群之前对其进行验证的组件。

为什么需要 TektonPipeline

管理 Tekton 组件面临的挑战

手动安装和维护 Tekton Pipeline 组件涉及:

  • 为不同组件应用多个 manifest
  • 跟踪组件版本及其兼容性
  • 安全地管理升级和回滚
  • 在不同环境中一致地配置组件
  • 处理特定部署的自定义配置

这种方式会导致:

  • 管理流程复杂
  • 可能出现配置错误
  • 难以跟踪已部署状态
  • 实施一致升级时面临挑战

TektonPipeline 如何解决这些问题

TektonPipeline 资源提供了一种声明式、Kubernetes 原生的方式来:

  1. 简化安装:使用单个资源安装所有 Pipeline 组件
  2. 集中配置:在一个位置管理所有组件设置
  3. 自动执行升级:通过更新资源轻松升级到新版本
  4. 确保一致性:在不同环境中应用相同的配置
  5. 支持自定义:根据特定需求自定义 Pipeline 组件

这种方式能够更好地管理 Tekton Pipeline 组件,同时保留按需进行自定义的灵活性。

优势

  • 简化管理:使用单个资源管理所有 Pipeline 组件
  • 声明式配置:定义所需状态,并由 operator 处理实现细节
  • 版本控制:通过 GitOps 实践轻松跟踪配置更改
  • 自动协调:operator 确保实际状态与所需状态一致
  • 配置验证:内置配置参数验证
  • 简化升级:简化升级到新版本的流程
  • Kubernetes 原生:与 Kubernetes 生态系统无缝集成

适用场景

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

  1. 初始部署:在新的 Kubernetes 集群中设置 Tekton Pipeline。

  2. 配置管理:随时间推移管理 Pipeline 配置更改。

  3. 版本升级:将 Tekton Pipeline 升级到更新版本。

  4. 多集群部署:确保在多个集群之间一致地部署 Pipeline。

  5. 自定义部署:为不同环境实施特定的 Pipeline 配置。

  6. GitOps 工作流:将 Pipeline 配置纳入 GitOps 部署流程。

约束和限制

  • 要求在集群中安装 Tekton Operator
  • 某些高级配置可能需要其他 Tekton Operator 资源
  • 更改某些字段可能需要重启组件
  • 必须遵循 Kubernetes 资源管理原则

原则

TektonPipeline 结构

TektonPipeline 资源具有以下结构:

apiVersion: operator.tekton.dev/v1alpha1
kind: TektonPipeline
metadata:
  name: pipeline
spec:
  targetNamespace: tekton-pipelines
  await-sidecar-readiness: true
  coschedule: workspaces
  disable-affinity-assistant: false
  disable-creds-init: false
  disable-home-env-overwrite: true
  disable-working-directory-overwrite: true
  disable-inline-spec: "taskrun,pipelinerun,pipeline"
  enable-api-fields: beta
  enable-bundles-resolver: true
  enable-cel-in-whenexpression: false
  enable-cluster-resolver: true
  enable-custom-tasks: true
  enable-git-resolver: true
  enable-hub-resolver: true
  enable-param-enum: false
  enable-provenance-in-status: true
  enable-step-actions: false
  enforce-nonfalsifiability: none
  keep-pod-on-cancel: false
  max-result-size: 4096
  metrics.count.enable-reason: false
  metrics.pipelinerun.duration-type: histogram
  metrics.pipelinerun.level: pipeline
  metrics.taskrun.duration-type: histogram
  metrics.taskrun.level: task
  require-git-ssh-secret-known-hosts: false
  results-from: termination-message
  running-in-environment-with-injected-sidecars: true
  send-cloudevents-for-runs: false
  set-security-context: false
  trusted-resources-verification-no-match-policy: ignore
  performance:
    disable-ha: false
    buckets: 1
    replicas: 1
    threads-per-controller: 2
    kube-api-qps: 5.0
    kube-api-burst: 10
    statefulset-ordinals: false
  options:
    disabled: false
    configMaps: {}
    deployments: {}

关键组件及其关系

  1. targetNamespace:Tekton Pipeline 组件的安装位置

    • 默认为 "tekton-pipelines"
    • 所有 Pipeline 组件都将在此命名空间中创建
    • 确保你拥有在此命名空间中创建资源的权限
  2. version:要安装的 Tekton Pipeline 版本

    • 可以指定特定版本,例如 "v0.45.0"
    • 省略此字段将安装 operator 支持的最新版本
  3. 功能标志:用于控制 Pipeline 行为的众多配置选项

    • disable-affinity-assistant:控制 affinity assistant 行为
    • disable-creds-init:控制凭证初始化
    • enable-api-fields:控制启用哪些 API 字段
    • enable-custom-tasks:启用自定义 tasks
    • 以及上方完整结构中所示的更多选项
  4. performance:用于高可用性和性能调优的设置

    • replicas:controller 副本数
    • buckets:controller 的 bucket 数量
    • threads-per-controller:每个 controller 的 worker 线程数
    • statefulset-ordinals:启用 StatefulSet Ordinals 模式

配置示例

基本安装

apiVersion: operator.tekton.dev/v1alpha1
kind: TektonPipeline
metadata:
  name: pipeline
spec:
  targetNamespace: tekton-pipelines

使用功能标志的自定义安装

apiVersion: operator.tekton.dev/v1alpha1
kind: TektonPipeline
metadata:
  name: pipeline
spec:
  targetNamespace: tekton-pipelines
  disable-affinity-assistant: true
  disable-creds-init: true
  enable-api-fields: beta
  enable-custom-tasks: true
  results-from: sidecar-logs
  max-result-size: 4096

高可用性配置

apiVersion: operator.tekton.dev/v1alpha1
kind: TektonPipeline
metadata:
  name: pipeline
spec:
  targetNamespace: tekton-pipelines
  performance:
    disable-ha: false
    buckets: 10
    replicas: 3
    threads-per-controller: 4
    kube-api-qps: 10.0
    kube-api-burst: 20

与 TektonPipeline 相关的重要参数说明

功能标志

功能标志用于控制 Pipeline controller 的特定行为。

适用场景

  • 出于性能原因禁用 affinity assistant
  • 启用或禁用特定的 Pipeline 功能
  • 配置特定环境的设置

约束和限制

  • 某些功能标志可能会在未来版本中弃用
  • 更改某些标志可能需要重新运行 pipeline
  • 不同标志之间的兼容性注意事项

原理/参数说明

常见的功能标志包括:

  • disable-affinity-assistant(默认值:false):将此标志设置为 "true" 后,Tekton 将不会为共享 PVC workspace 的每个 TaskRun 创建 Affinity Assistant。

  • disable-creds-init(默认值:false):将此标志设置为 "true" 后,Tekton 将不会扫描所附加的 service account,也不会将其找到的任何凭证注入 Steps。

  • await-sidecar-readiness(默认值:true):控制在启动 TaskRun 的第一个步骤之前是否等待 sidecar 容器运行。

  • running-in-environment-with-injected-sidecars(默认值:true):当 Pipelines 在不使用 Istio 等注入式 sidecar 的集群中运行时,应将此项设置为 false。

  • enable-custom-tasks(默认值:false):启用在 pipeline 中使用自定义 tasks。

指标属性

指标属性用于控制指标的收集和报告方式。

适用场景

  • 为 Tekton pipeline 设置监控
  • 自定义指标收集行为
  • 与可观测性系统集成

配置示例

apiVersion: operator.tekton.dev/v1alpha1
kind: TektonPipeline
metadata:
  name: pipeline
spec:
  targetNamespace: tekton-pipelines
  metrics.pipelinerun.duration-type: histogram
  metrics.pipelinerun.level: pipeline
  metrics.taskrun.duration-type: histogram
  metrics.taskrun.level: task
  metrics.count.enable-reason: true

性能配置

performance 部分用于调整 controller 的性能特征。

适用场景

  • 针对高流量 pipeline 执行进行扩展
  • 优化资源使用
  • 实施高可用性配置

配置示例

apiVersion: operator.tekton.dev/v1alpha1
kind: TektonPipeline
metadata:
  name: pipeline
spec:
  targetNamespace: tekton-pipelines
  performance:
    disable-ha: false
    buckets: 5
    replicas: 2
    threads-per-controller: 4
    kube-api-qps: 10.0
    kube-api-burst: 20
    statefulset-ordinals: true

参考资料