From e9f89aff3f0055a939338c1a75cfd7927d8bec87 Mon Sep 17 00:00:00 2001 From: Kevin Hannon Date: Fri, 20 Dec 2024 11:55:29 -0500 Subject: [PATCH 1/2] add tekton pipelines integration based on pod integration --- .../tasks/run/external_workloads/_index.md | 4 +- .../tasks/run/external_workloads/tektoncd.md | 62 +++++++++++++++++++ .../tekton-hello-task.yaml | 14 +++++ .../tekton-pipeline-run.yaml | 13 ++++ .../pod-based-workloads/tekton-pipeline.yaml | 20 ++++++ .../tekton-sleep-task.yaml | 12 ++++ 6 files changed, 124 insertions(+), 1 deletion(-) create mode 100644 site/content/en/docs/tasks/run/external_workloads/tektoncd.md create mode 100644 site/static/examples/pod-based-workloads/tekton-hello-task.yaml create mode 100644 site/static/examples/pod-based-workloads/tekton-pipeline-run.yaml create mode 100644 site/static/examples/pod-based-workloads/tekton-pipeline.yaml create mode 100644 site/static/examples/pod-based-workloads/tekton-sleep-task.yaml diff --git a/site/content/en/docs/tasks/run/external_workloads/_index.md b/site/content/en/docs/tasks/run/external_workloads/_index.md index 3c7c6de52c..a0d1d70078 100644 --- a/site/content/en/docs/tasks/run/external_workloads/_index.md +++ b/site/content/en/docs/tasks/run/external_workloads/_index.md @@ -16,4 +16,6 @@ You can use AppWrapper, job-based workloads and pod-based workloads. ### Integrations based on built-in frameworks - [Run a Flux Miniclusters using job integration](/docs/tasks/run/external_workloads/flux_miniclusters). -- [Run an Argo Workflow using pod integration](/docs/tasks/run/external_workloads/pod_based_workloads/argo_workflow). +- [Run an Argo Workflow using pod integration](/docs/tasks/run/external_workloads/argo_workflow). +- [Run a tekton cd pipeline using pod integration](/docs/tasks/run/external_workloads/tektoncd) + diff --git a/site/content/en/docs/tasks/run/external_workloads/tektoncd.md b/site/content/en/docs/tasks/run/external_workloads/tektoncd.md new file mode 100644 index 0000000000..d9af90728c --- /dev/null +++ b/site/content/en/docs/tasks/run/external_workloads/tektoncd.md @@ -0,0 +1,62 @@ +--- +title: "Run A Tekton Pipeline" +date: 2025-02-01 +weight: 7 +description: > + Integrate Kueue with Tekton Pipelines. +--- + +This page shows how to leverage Kueue's scheduling and resource management capabilities when running [Tekton pipelines](https://tekton.dev/docs/). + +This guide is for [batch users](/docs/tasks#batch-user) that have a basic understanding of Kueue. For more information, see [Kueue's overview](/docs/overview). + +We demonstrate how to support scheduling Tekton Pipelines Tasks in Kueue based on the [Plain Pod](/docs/tasks/run_plain_pods) integration, where every Pod from a Pipeline is represented as a single independent Plain Pod. + +## Before you begin + +1. Learn how to [install Kueue with a custom manager configuration](/docs/installation/#install-a-custom-configured-released-version). + +1. Follow the steps in [Run Plain Pods](docs/tasks/run/plain_pods/#before-you-begin) to learn how to enable and configure the `v1/pod` integration. + +1. Check [Administrator cluster quotas](/docs/tasks/manage/administer_cluster_quotas/) for details on the initial Kueue step. + +1. Your cluster has tekton pipelines [installed](https://tekton.dev/docs/installation/pipelines/). + + +## Tekton Background + +Tekton has the concept of [Pipelines](https://tekton.dev/vault/pipelines-v0.59.x-lts/pipelines/), [Tasks](https://tekton.dev/vault/pipelines-v0.59.x-lts/tasks/) and [PipelineRun](https://tekton.dev/vault/pipelines-v0.59.x-lts/pipelineruns/). + +A pipeline consists of tasks. Tasks and pipelines must be created before running a pipeline. + +A PipelineRun runs the pipeline. + +A TaskRun runs a single task. PipelineRuns will reuse TaskRuns to run each task in a pipeline. + +### Tekton Defintions + +As a simple example, we will define two tasks named sleep and hello: + +{{< include "examples/pod-based-workloads/tekton-sleep-task.yaml" "yaml" >}} + +{{< include "examples/pod-based-workloads/tekton-hello-task.yaml" "yaml" >}} + +A pipeline composes these tasks. + +{{< include "examples/pod-based-workloads/tekton-pipeline.yaml" "yaml" >}} + +## a. Targeting a single LocalQueue + +If you want every task to target a single [local queue](/docs/concepts/local_queue), +it should be specified in the `metadata.label` section of the PipelineRun configuration. + +{{< include "examples/pod-based-workloads/tekton-pipeline-run.yaml" "yaml" >}} + +This will inject the kueue label on every pod of the pipeline. Kueue will gate the pods once you are over the quota limits. + +## Limitations + +- Kueue will only manage pods created by Tekton. +- Each pod in a Workflow will create a new Workload resource and must wait for admission by Kueue. +- There is no way to ensure that a Workflow will complete before it is started. If one step of a multi-step Workflow does not have +available quota, Tekton pipelines will run all previous steps and then wait for quota to become available. diff --git a/site/static/examples/pod-based-workloads/tekton-hello-task.yaml b/site/static/examples/pod-based-workloads/tekton-hello-task.yaml new file mode 100644 index 0000000000..3347cd1f4d --- /dev/null +++ b/site/static/examples/pod-based-workloads/tekton-hello-task.yaml @@ -0,0 +1,14 @@ +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)!" diff --git a/site/static/examples/pod-based-workloads/tekton-pipeline-run.yaml b/site/static/examples/pod-based-workloads/tekton-pipeline-run.yaml new file mode 100644 index 0000000000..4491f26357 --- /dev/null +++ b/site/static/examples/pod-based-workloads/tekton-pipeline-run.yaml @@ -0,0 +1,13 @@ +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" + diff --git a/site/static/examples/pod-based-workloads/tekton-pipeline.yaml b/site/static/examples/pod-based-workloads/tekton-pipeline.yaml new file mode 100644 index 0000000000..78ca263721 --- /dev/null +++ b/site/static/examples/pod-based-workloads/tekton-pipeline.yaml @@ -0,0 +1,20 @@ +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) diff --git a/site/static/examples/pod-based-workloads/tekton-sleep-task.yaml b/site/static/examples/pod-based-workloads/tekton-sleep-task.yaml new file mode 100644 index 0000000000..8d1ce8e2c0 --- /dev/null +++ b/site/static/examples/pod-based-workloads/tekton-sleep-task.yaml @@ -0,0 +1,12 @@ +apiVersion: tekton.dev/v1 +kind: Task +metadata: + name: sleep +spec: + steps: + - name: echo + image: alpine + script: | + #!/bin/sh + sleep 100 + From 22efada0214245a223fa05db0b8936ac45e8fdd2 Mon Sep 17 00:00:00 2001 From: Kevin Hannon Date: Mon, 3 Feb 2025 12:00:36 -0500 Subject: [PATCH 2/2] address minor nit --- site/content/en/docs/tasks/run/external_workloads/tektoncd.md | 1 + 1 file changed, 1 insertion(+) diff --git a/site/content/en/docs/tasks/run/external_workloads/tektoncd.md b/site/content/en/docs/tasks/run/external_workloads/tektoncd.md index d9af90728c..c3ec608a26 100644 --- a/site/content/en/docs/tasks/run/external_workloads/tektoncd.md +++ b/site/content/en/docs/tasks/run/external_workloads/tektoncd.md @@ -1,5 +1,6 @@ --- title: "Run A Tekton Pipeline" +linkTitle: "Tekton Pipeline" date: 2025-02-01 weight: 7 description: >