运行 Tekton Pipeline

将 Kueue 与 Tekton Pipeline 集成。

此页面展示了在运行 Tekton Pipeline 时, 如何利用 Kueue 的调度和资源管理能力。

本指南适用于对 Kueue 有基本了解的批处理用户。 欲了解更多,请参阅 Kueue 概述

我们将演示如何基于 Plain Pod 集成, 在 Kueue 中支持 Tekton Pipeline 任务的调度,其中来自 Pipeline 的每个 Pod 都表现为单个独立的 Plain Pod。

开始之前

  1. 学习如何安装具有自定义管理器配置的 Kueue

  2. 按照运行 Plain Pod 中的步骤学习如何启用和配置 pod 集成。

  3. 查看管理员集群配额以获取初始 Kueue 步骤的详细信息。

  4. 确保你的集群已安装 Tekton Pipeline:安装指南

Tekton 背景

Tekton 有 PipelineTaskPipelineRun 的概念。

一个 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 将运行所有之前的步骤,然后等待配额变为可用。

最后修改 July 29, 2025: Localize tektoncd.md (#6246) (b1bc2dbf)