启用内置 Tekton Hub
概述
从 v4.6.4 开始,全新安装默认不再部署内置的 Tekton Hub。Tekton catalog 构件改由平台的独立 ArtifactHub 组件提供。ArtifactHub 拥有自己的生命周期,因此 catalog 更新(新工具、Task 修复、版本升级)可以快速交付,不受 operator 发布节奏的影响。
operator 仍完全支持将内置 Tekton Hub 作为过渡选项进行部署。本指南介绍如何启用它、新默认行为如何确保现有的 Tekton Hub 在 operator 升级期间继续工作,以及如何禁用它。
本节中的其他指南(例如
Tekton Hub配置 和自定义 Catalog)均假设已按照本指南启用内置Tekton Hub。
开关的默认值在 v4.6.4 中发生了变化。更早的 v4.6.x 版本(v4.6.0 – v4.6.3)会自动部署内置 Tekton Hub。将此类环境升级到 v4.6.4 后,现有的 Tekton Hub 会被保留(请参阅升级时的默认行为),而不会被删除。
开关的工作方式
operator 是否部署内置 Tekton Hub,由 operator 级别的开关控制:该开关是 tekton-operator 命名空间中 tekton-config-defaults ConfigMap 的 AUTOINSTALL_TEKTONHUB 键。其默认值为 "preserve"。
该开关有三种状态:
未设置、为空或无法识别的值都会映射到 "preserve",因此拼写错误绝不会意外触发破坏性的 "false" 行为。
"false" 会主动删除 TektonHub CR 及其工作负载。当开关为 "false" 时手动应用 TektonHub 清单并不能解决问题——operator 会再次将其删除。要部署内置 Tekton Hub,请先将开关设置为 "true"。
启用内置 Tekton Hub
将开关设置为 "true"。该值会注入 operator 的环境变量中,而环境变量不会热重载——更改 ConfigMap 后必须重启 operator pod。
请使用 kubectl delete pod 而不是 kubectl rollout restart 重启 operator:在由 OLM 管理的集群上,OLM 会还原 rollout restart 在 Deployment 上设置的重启注解,因此 operator pod 永远不会被重新创建。删除 pod 在所有环境中都能生效。ConfigMap 本身的值不会被 OLM 还原。
升级时的默认行为
在默认值为 "preserve" 时,升级已运行内置 Tekton Hub 的环境(例如从 v4.6.3 → v4.6.4)无需执行任何操作:现有的 Tekton Hub 会被保留并继续提供其 catalog,因此 Task 和 Pipeline 引用会继续解析。保留和重用 catalog 都会自动进行:
TektonHubCR 以及所有内置Tekton Hub工作负载都会被保留,operator 会等待 hub 变为Ready。- 导入
kube-public命名空间的 catalogConfigMaps(*-latest工具镜像ConfigMaps、概览模板ConfigMaps、工具镜像ConfigMaps和邮件模板ConfigMaps)会在 operator 的内部升级过程中保留,因此升级前提供的 catalog 就是升级后提供的 catalog。 - 该环境当前运行的 catalog 镜像会被自动捕获并固定,因此升级不会将 catalog 切换到 registry 中可能不存在的工具镜像集(对于隔离网络安装尤其重要)。
只有当你使用 "true" 显式启用内置 Tekton Hub,并希望控制其使用的 catalog 镜像时,才需要执行下面固定 Catalog中的步骤。
将 Catalog 固定到升级前的镜像
operator bundle 不再提供 catalog 引用的工具镜像(buildah、golang、maven 等)。因此,新 catalog 引用的工具镜像版本可能不存在于你的环境中。对于隔离网络安装,这种情况尤其常见,因为新版本的镜像同步列表不再包含这些工具镜像。另一方面,你的升级前 catalog 引用的工具镜像可以保证存在,因为它们与上一版本一起完成了同步。
因此,在升级后重新启用内置 Tekton Hub 时,建议将 catalog 固定到升级前的 catalog 镜像,这样升级就不会影响现有 Pipeline。
步骤 1 — 升级前,记录当前的 catalog 镜像:
步骤 2 — 升级后,按照上述说明启用开关,然后通过 TektonConfig CR 固定已记录的镜像:
两个名称必须完全匹配,并且名称不匹配时的失败方式不同:不匹配的部署名称会被静默忽略,而不匹配的初始化容器名称不会覆盖 catalog-sidecar,而是向部署中添加一个新的初始化容器,这可能会导致 pod 无法启动。出于此目的,在 spec.hub 下除 options 之外的子字段均不受支持。
禁用内置 Tekton Hub
要移除已部署的内置 Tekton Hub,请将开关设置为 "false",并以相同方式重启 operator:
随后,operator 会移除已部署的内置 Tekton Hub。当开关为 "false" 时:
TektonHubCR 和所有内置Tekton Hub工作负载都会被移除。TektonConfigCR 保持为Ready。- 与 catalog 一起导入
kube-public命名空间的概览模板ConfigMaps会随Tekton Hub一起被移除。 kube-public命名空间中的工具镜像ConfigMaps(catalog-tool-image-*)和邮件模板ConfigMaps会被保留。它们会继续指向升级前的工具镜像地址,而这些地址存在于你的 registry 中。
"false" 具有破坏性,并且需要显式启用。如果你只是希望停止部署新的 Tekton Hub,同时保持任何现有实例不变,请改用默认的 "preserve",不要设置 "false"。