运行 Tekton Pipeline
此页面展示了在运行 Tekton Pipeline 时, 如何利用 Kueue 的调度和资源管理能力。
本指南适用于对 Kueue 有基本了解的批处理用户。 欲了解更多,请参阅 Kueue 概述。
我们将演示如何基于 Plain Pod 集成, 在 Kueue 中支持 Tekton Pipeline 任务的调度,其中来自 Pipeline 的每个 Pod 都表现为单个独立的 Plain Pod。
开始之前
学习如何安装具有自定义管理器配置的 Kueue。
按照运行 Plain Pod 中的步骤学习如何启用和配置
pod
集成。查看管理员集群配额以获取初始 Kueue 步骤的详细信息。
确保你的集群已安装 Tekton Pipeline:安装指南。
Tekton 背景
Tekton 有 Pipeline、 Task 和 PipelineRun 的概念。
一个 Pipeline 由多个 Task 组成。Task 和 Pipeline 必须在运行 Pipeline 之前创建。
一个 PipelineRun 运行 Pipeline。
一个 TaskRun 运行单个 Task。PipelineRun 将重用 TaskRun 来运行 Pipeline 中的每个 Task。
Tekton 定义
作为一个简单的例子,我们将定义两个名为 sleep 和 hello 的 Task:
apiVersion: tekton.dev/v1
kind: Task
metadata:
name: sleep
spec:
steps:
- name: echo
image: alpine
script: |
#!/bin/sh
sleep 100
apiVersion: tekton.dev/v1
kind: Task
metadata:
name: hello
spec:
params:
- name: username
type: string
steps:
- name: hello
image: ubuntu
script: |
#!/bin/bash
echo "Hello $(params.username)!"
一个 Pipeline 由这些 Task 组成。
apiVersion: tekton.dev/v1
kind: Pipeline
metadata:
name: kueue-test
spec:
params:
- name: username
type: string
tasks:
- name: sleep
taskRef:
name: sleep
- name: hello
runAfter:
- sleep
taskRef:
name: hello
params:
- name: username
value: $(params.username)
a. 针对单个本地队列
如果你希望每个任务都针对一个单独的本地队列,
那么它应该在 PipelineRun 配置的 metadata.label
部分中指定。
apiVersion: tekton.dev/v1
kind: PipelineRun
metadata:
generateName: kueue-test
labels:
kueue.x-k8s.io/queue-name: my-local-queue
spec:
pipelineRef:
name: kueue-test
params:
- name: username
value: "Tekton"
这将在 Pipeline 的每个 Pod 上注入 Kueue 标签。一旦超出配额限制,Kueue 将阻止这些 Pod。
限制
- Kueue 仅管理由 Tekton 创建的 Pod。
- 工作流中的每个 Pod 都将创建一个新的 Workload 资源,并且必须等待 Kueue 的准入。
- 没有办法确保工作流在开始之前完成。如果多步骤工作流的一个步骤没有可用配额, Tekton Pipeline 将运行所有之前的步骤,然后等待配额变为可用。
反馈
这个页面有帮助吗?
Glad to hear it! Please tell us how we can improve.
Sorry to hear that. Please tell us how we can improve.