TektonPipeline

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

术语说明

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

为什么我们需要 TektonPipeline

管理 Tekton 组件的挑战

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

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

这种方法导致:

  • 管理程序复杂
  • 可能的错误配置
  • 难以跟踪已部署状态
  • 实施一致升级的挑战

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 工作流:在 GitOps 部署过程中包括 Pipeline 配置。

限制和局限性

  • 需要在集群中安装 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:控制亲和力助手的行为
    • disable-creds-init:控制凭据初始化
    • enable-api-fields:控制启用哪些 API 字段
    • enable-custom-tasks:启用使用自定义任务
    • 以及上述完整结构中显示的许多其他选项
  4. performance:高可用性和性能调整的设置

    • replicas:控制器副本的数量
    • buckets:控制器的桶数量
    • threads-per-controller:每个控制器的工作线程数量
    • 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 控制器的特定行为。

适用场景

  • 出于性能原因禁用亲和力助手
  • 启用或禁用特定的 Pipeline 功能
  • 配置环境特定的设置

限制和局限性

  • 一些功能标志可能会在未来版本中被弃用
  • 更改某些标志可能需要重新运行管道
  • 不同标志之间的兼容性考虑

原则/参数说明

常见功能标志包括:

  • disable-affinity-assistant(默认值:false):将此标志设置为 "true" 会阻止 Tekton 为每个共享 PVC 工作区的 TaskRun 创建亲和力助手。

  • disable-creds-init(默认值:false):将此标志设置为 "true" 会阻止 Tekton 扫描附加服务账户并将其发现的任何凭据注入到您的步骤中。

  • await-sidecar-readiness(默认值:true):控制任务运行的第一个步骤是否等待侧车容器运行。

  • running-in-environment-with-injected-sidecars(默认值:true):当 Pipelines 在不使用注入侧车的集群中运行时,应设置为 false,例如 Istio。

  • enable-custom-tasks(默认值:false):启用从管道内使用自定义任务。

指标属性

指标属性控制如何收集和报告指标。

适用场景

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

配置示例

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

性能配置

性能部分允许调整控制器的性能特征。

适用场景

  • 针对高流量的管道执行进行扩展
  • 优化资源使用
  • 实现高可用性配置

配置示例

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

参考资料