为 Task 镜像 selector 添加自定义镜像
本指南介绍如何为 UI 中 Task 表单的 image 参数配置 selector 选项,涵盖以下两种场景:
- 为 hub Tasks 添加镜像
- 为 您自己的命名空间 Tasks 添加镜像
目录
功能概述
- 每个 selector 选项来自一个带有
data.name(标签)和 data.image(值)的 ConfigMap。
- 任务特定标签(例如
catalog.tekton.dev/tool-image-python)使 UI 能将 ConfigMaps 与正确的 Task 参数匹配。
- UI 会使用
Task 注解中指定的命名空间(例如 kube-public),并根据 Task 描述符中定义的标签选择器查询该命名空间,然后用查询结果渲染 selector。
使用场景
- 为
Task selector 添加自定义的镜像仓库镜像。
- 在现有 selector 选项旁引入新的运行时小版本。
- 为自定义
Task 提供加固镜像选项。
前提条件
- 已安装 Tekton Pipelines。
- 您可以在
kube-public 中创建 ConfigMaps。
- 您可以在目标
Task 上设置 style.tekton.dev/descriptors(Hub Tasks 已提供该设置;自定义 Tasks 需要您自行添加)。
场景 A:为 Hub Task selector 添加镜像
当扩展 Hub Task 的 selector 时,请使用此路径。
1. 从 Task 描述符中查找标签选择器
定位 Task 上的 style.tekton.dev/descriptors 注解,找到 path 指向 image 参数的条目。
以 urn:alm:descriptor:expression:props.options:api 结尾的描述符包含 labelSelector=... 查询;该标签键必须存在于您的 ConfigMap 中。
以下示例中,您需要在 kube-public 命名空间创建带有 catalog.tekton.dev/tool-image-python 标签的 ConfigMap。
kind: Task
metadata:
name: python
labels:
app.kubernetes.io/version: "0.1"
annotations:
style.tekton.dev/descriptors: |
- path: params.PYTHON_IMAGE
x-descriptors:
...
- urn:alm:descriptor:expression:props.options:api:/kubernetes/${context.cluster}/api/v1/namespaces/kube-public/configmaps?labelSelector=catalog.tekton.dev%2Ftool-image-python
...
有关 style.tekton.dev/descriptors 的更多信息,请参见 如何配置动态表单。
2. 在 kube-public 中创建 ConfigMap
使用该标签键创建一个 ConfigMap。
默认 Tasks 会附带带有 catalog.tekton.dev/source: system 标签的 ConfigMaps,表示平台提供的条目。请勿修改或删除这些,且您的自定义 ConfigMaps 不应包含此标签。
apiVersion: v1
kind: ConfigMap
metadata:
name: tekton-task-python-custom
namespace: kube-public
labels:
catalog.tekton.dev/tool-image-python: "3.10"
data:
name: "Python 3.10"
image: "registry.example.com/tekton/python:3.10"
3. 应用并验证
kubectl apply -f tekton-task-python-custom.yaml
# configmap/tekton-task-python-custom created
kubectl -n kube-public get configmap -l catalog.tekton.dev/tool-image-python=3.10
# NAME DATA AGE
# tekton-task-python-custom 2 15s
打开 Task 表单;selector 现在应包含 Python 3.10,并将镜像设置为 registry.example.com/tekton/python:3.10。
场景 B:为您自己的 Task selector 添加镜像
当您控制 Task 定义且需要配置描述符及 ConfigMaps 时,请使用此路径。
1. 在 Task 上配置 style.tekton.dev/descriptors
示例 image selector 的 Task 描述符:
apiVersion: tekton.dev/v1
kind: Task
metadata:
name: python
labels:
app.kubernetes.io/version: "0.1"
annotations:
style.tekton.dev/descriptors: |
- path: params.PYTHON_IMAGE
x-descriptors:
- urn:alm:descriptor:label:en:PYTHON_IMAGE
- urn:alm:descriptor:description:en:The used Python image.
- urn:alm:descriptor:com.tectonic.ui:select:image
- urn:alm:descriptor:expression:props.options:api:/kubernetes/${context.cluster}/api/v1/namespaces/kube-public/configmaps?labelSelector=catalog.tekton.dev%2Ftool-image-python-custom
- urn:alm:descriptor:props:select:allowCreate
- urn:alm:descriptor:expression:props.options:path:items
- urn:alm:descriptor:expression:props.options:label:path:data.name
- urn:alm:descriptor:expression:props.options:value:path:data.image
- urn:alm:descriptor:com.tectonic.ui:validation:required
spec:
params:
- name: PYTHON_IMAGE
description: Image used for Python steps.
type: string
steps:
- name: python-script
image: $(params.PYTHON_IMAGE)
script: |
#!/bin/sh
# Define your task script
描述符条目及含义:
有关 style.tekton.dev/descriptors 的更多信息,请参见 如何配置动态表单。
2. 在 kube-public 中创建匹配的 ConfigMap
使用与描述符查询相同的标签键。对于自定义 Tasks,建议使用不会与默认 Task selector 冲突的标签键,以避免在 Hub Tasks 中意外显示。
默认 Tasks 会附带带有 catalog.tekton.dev/source: system 标签的 ConfigMaps,表示平台提供的条目。请勿修改或删除这些,且您的自定义 ConfigMaps 不应包含此标签。
apiVersion: v1
kind: ConfigMap
metadata:
name: custom-task-python-3-13
namespace: kube-public
labels:
catalog.tekton.dev/tool-image-python-custom: "3.13-team"
data:
name: "Python 3.13 (Team Edition)"
image: "registry.example.com/internal/python:3.13"
您也可以将 ConfigMap 放置在您喜欢的其他命名空间;只需确保 ConfigMap 的命名空间与 Task 的 style.tekton.dev/descriptors 注解中指定的命名空间相同。
例如,您可以将 Task 的注解设置如下,请将 <NAMESPACE> 替换为您的命名空间。
kind: Task
metadata:
name: python
labels:
app.kubernetes.io/version: "0.1"
annotations:
# replace <NAMESPACE> with your namespace
style.tekton.dev/descriptors: |
- path: params.PYTHON_IMAGE
x-descriptors:
...
- urn:alm:descriptor:expression:props.options:api:/kubernetes/${context.cluster}/api/v1/namespaces/<NAMESPACE>/configmaps?labelSelector=catalog.tekton.dev%2Ftool-image-python-custom
...
3. 应用并验证
kubectl apply -f custom-task-python-3-13.yaml
# configmap/custom-task-python-3-13 created
kubectl -n kube-public get configmap -l catalog.tekton.dev/tool-image-python-custom=3.13-team
# NAME DATA AGE
# custom-task-python-3-13 2 15s
打开您的 Task 表单;selector 应列出 Python 3.13 (Team Edition),并将镜像设置为 registry.example.com/internal/python:3.13。
维护提示
- 通过编辑并重新应用其
ConfigMap 来更新自定义选项。
- 通过删除您自定义的
ConfigMap 来废弃选项;请勿修改任何带有 catalog.tekton.dev/source: system 标签的 ConfigMap。