Pod 模板是 TaskRun
和 PipelineRun
规范中的配置字段,允许您自定义 Tekton 工作负载的 Pod 配置。它们定义了 Tekton 用于配置执行 Tasks
和 Pipelines
的 Pod 的 PodSpec
的一部分。此配置使您能够在不修改核心 Task 或 Pipeline 定义的情况下,定制执行环境。
重要:Pod 模板不是独立的 Kubernetes 资源。它们是 TaskRun 和 PipelineRun 规范中的配置字段。
基于 Kubernetes 的 CI/CD 系统面临多个 Pod 配置挑战:
Tekton Pod 模板通过提供以下功能来应对这些挑战:
Pod 模板适用于多种场景,包括:
当指定 Pod 模板配置时:
Pod 模板配置遵循特定合并规则并具有明确的优先级层次:
Pod 模板配置按以下优先级顺序合并(从高到低):
当同一字段存在多个配置时,优先级更高的配置将覆盖优先级较低的配置。
env
):按数组元素中的名称合并。如果名称相同,则使用 TaskRun 或 PipelineRun 中的项volumes
):按数组元素中的名称合并。如果名称相同,则使用 TaskRun 或 PipelineRun 中的项如果需要持久化此全局配置,建议使用 TektonConfig
替代 ConfigMap
。
Pod 模板配置可以通过 TaskRunSpecs 应用于 PipelineRun 中的特定 Tasks。
Pod 模板配置支持下表列出的字段。
字段 | 描述 |
---|---|
env | 在 TaskRun 和 PipelineRun 级别 Pod 模板中定义的环境变量优先于 steps 和 stepTemplate 中定义的环境变量 |
nodeSelector | 必须满足 Pod 能够调度到节点的条件 |
tolerations | 允许(但不要求)Pods 调度到带有匹配污点的节点 |
affinity | 允许基于节点标签限制 Pod 可调度的节点集合 |
securityContext | 指定 Pod 级别的安全属性和常见容器设置,如 runAsUser 和 selinux |
volumes | 指定 Pod 内容器可挂载的卷列表,允许为 Task 中的每个 volumeMount 指定卷类型 |
runtimeClassName | 指定 Pod 的 runtime class |
automountServiceAccountToken | 默认值: true。决定 Tekton 是否自动为 Pod 使用的服务账户在容器内预定义路径提供令牌 |
dnsPolicy | 默认值: ClusterFirst。指定 Pod 的 DNS 策略。合法值为 ClusterFirst、Default 和 None。不支持 ClusterFirstWithHostNet,因为 Tekton Pods 不能使用主机网络运行。 |
dnsConfig | 指定 Pod 的 额外 DNS 配置,如名称服务器和搜索域 |
enableServiceLinks | 默认值: true。决定是否将 Pod 命名空间中的服务以环境变量形式暴露给 Pod,类似于 Docker 的服务链接 |
priorityClassName | 指定 Pod 的 优先级类,允许选择性启用对低优先级工作负载的抢占 |
schedulerName | 指定调度 Pod 时使用的 调度器。可为不同类型的工作负载指定不同调度器,如机器学习工作负载使用 volcano.sh |
imagePullSecrets | 指定拉取容器镜像时使用的 Secret |
hostNetwork | 默认值: false。决定是否使用主机网络命名空间 |
hostAliases | 向 Pod 的 /etc/hosts 添加条目,实现 Pod 级别的主机名覆盖。详情见 Kubernetes 该字段文档 |
topologySpreadConstraints | 指定 Pod 在集群中如何在拓扑域间分布 |
指定 Pod 调度时必须存在的节点标签。
使用场景
配置示例
基于节点标签对 Pod 调度进行细粒度控制。
使用场景
配置示例
允许 Pod 调度到带有匹配污点的节点。
使用场景
配置示例
指定 Pod 级别的安全属性和常见容器设置。
使用场景
配置示例
指定 Pod 内容器可挂载的卷。
使用场景
配置示例
指定 Pod 的 DNS 策略。
使用场景
配置示例
决定是否将 Pod 命名空间中的服务以环境变量形式暴露。
使用场景
配置示例
指定拉取容器镜像时使用的 Secret。
使用场景
配置示例
注意:当配置了 imagePullSecrets
且 Task 中未指定命令时,Tekton 会使用配置的密钥自动查找镜像的入口点。
指定 Pod 的环境变量。
使用场景
配置示例