Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 23 additions & 0 deletions incubator/kueue/.helmignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
# Patterns to ignore when building packages.
# This supports shell glob matching, relative path matching, and
# negation (prefixed with !). Only one pattern per line.
.DS_Store
# Common VCS dirs
.git/
.gitignore
.bzr/
.bzrignore
.hg/
.hgignore
.svn/
# Common backup files
*.swp
*.bak
*.tmp
*.orig
*~
# Various IDEs
.project
.idea/
*.tmproj
.vscode/
16 changes: 16 additions & 0 deletions incubator/kueue/Chart.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
apiVersion: v2
appVersion: "v0.14.3"
description: Kueue is a set of APIs and controllers for job queueing. It is a job-level manager that decides when a job should be admitted to start (as in pods can be created) and when it should stop (as in active pods should be deleted).
home: https://kueue.sigs.k8s.io/
icon: https://cloudcache.tencent-cloud.com/qcloud/ui/static/Industry_tke/17d068f1-7a83-4b71-9a29-d4f0343ced20.png
keywords:
- kubernetes
- k8s
- k8s-sig-scheduling
maintainers:
- email: runtzhang@tencent.com
name: runtzhang
name: kueue
sources:
- https://github.com/kubernetes-sigs/kueue
version: 0.14.3
5 changes: 5 additions & 0 deletions incubator/kueue/OWNERS
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
# See the OWNERS docs at https://go.k8s.io/owners

reviewers:
- kannon92

125 changes: 125 additions & 0 deletions incubator/kueue/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,125 @@
# kueue

![Version: 0.14.3](https://img.shields.io/badge/Version-0.14.3-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: v0.14.3](https://img.shields.io/badge/AppVersion-v0.14.3-informational?style=flat-square)

Kueue is a set of APIs and controllers for job queueing. It is a job-level manager that decides when a job should be admitted to start (as in pods can be created) and when it should stop (as in active pods should be deleted).

### Installation

Quick start instructions for the setup and configuration of kueue using Helm.

#### Prerequisites

- [Helm](https://helm.sh/docs/intro/quickstart/#install-helm)
- (Optional) [Cert-manager](https://cert-manager.io/docs/installation/)

#### Installing the chart

##### Install chart using Helm v3.0+

Either clone the kueue repository:

```bash
$ git clone git@github.com:kubernetes-sigs/kueue.git
$ cd kueue/charts
$ helm install kueue kueue/ --create-namespace --namespace kueue-system
```

Or use the charts pushed to `oci://registry.k8s.io/kueue/charts/kueue`:

```bash
helm install kueue oci://registry.k8s.io/kueue/charts/kueue --version="0.14.3" --create-namespace --namespace=kueue-system
```

For more advanced parametrization of Kueue, we recommend using a local overrides file, passed via the `--values` flag. For example:

```yaml
controllerManager:
featureGates:
- name: TopologyAwareScheduling
enabled: true
replicas: 2
manager:
resources:
limits:
cpu: "2"
memory: 2Gi
requests:
cpu: "2"
memory: 2Gi
```

```bash
helm install kueue oci://registry.k8s.io/kueue/charts/kueue --version="0.14.3" \
--create-namespace --namespace=kueue-system \
--values overrides.yaml
```

You can also use the `--set` flag. For example, to enable a feature gate (e.g., `TopologyAwareScheduling`):

```bash
helm install kueue oci://registry.k8s.io/kueue/charts/kueue --version="0.14.3" \
--create-namespace --namespace=kueue-system \
--set "controllerManager.featureGates[0].name=TopologyAwareScheduling" \
--set "controllerManager.featureGates[0].enabled=true"
```

##### Verify that controller pods are running properly.

```bash
$ kubectl get deploy -n kueue-system
NAME READY UP-TO-DATE AVAILABLE AGE
kueue-controller-manager 1/1 1 1 7s
```

##### Prometheus

Kueue supports Prometheus metrics.
Check out the [site](https://kueue.sigs.k8s.io/docs/tasks/manage/productization/prometheus/)
for more information on installing kueue with metrics using our Helm chart.

### Configuration

The following table lists the configurable parameters of the kueue chart and their default values.

| Key | Type | Default | Description |
|-----|------|---------|-------------|
| controllerManager.featureGates | list | `[]` | ControllerManager's feature gates |
| controllerManager.imagePullSecrets | list | `[]` | ControllerManager's imagePullSecrets |
| controllerManager.livenessProbe.failureThreshold | int | `3` | ControllerManager's livenessProbe failureThreshold |
| controllerManager.livenessProbe.initialDelaySeconds | int | `15` | ControllerManager's livenessProbe initialDelaySeconds |
| controllerManager.livenessProbe.periodSeconds | int | `20` | ControllerManager's livenessProbe periodSeconds |
| controllerManager.livenessProbe.successThreshold | int | `1` | ControllerManager's livenessProbe successThreshold |
| controllerManager.livenessProbe.timeoutSeconds | int | `1` | ControllerManager's livenessProbe timeoutSeconds |
| controllerManager.manager.containerSecurityContext | object | `{"allowPrivilegeEscalation":false,"capabilities":{"drop":["ALL"]},"readOnlyRootFilesystem":true}` | ControllerManager's container securityContext |
| controllerManager.manager.image.pullPolicy | string | `"Always"` | ControllerManager's image pullPolicy. This should be set to 'IfNotPresent' for released version |
| controllerManager.manager.image.repository | string | `"us-central1-docker.pkg.dev/k8s-staging-images/kueue/kueue"` | ControllerManager's image repository |
| controllerManager.manager.image.tag | string | `"release-0.14"` | ControllerManager's image tag |
| controllerManager.manager.podAnnotations | object | `{}` | |
| controllerManager.manager.podSecurityContext | object | `{"runAsNonRoot":true,"seccompProfile":{"type":"RuntimeDefault"}}` | ControllerManager's pod securityContext |
| controllerManager.manager.priorityClassName | string | `nil` | ControllerManager's pod priorityClassName |
| controllerManager.manager.resources | object | `{"limits":{"cpu":"2","memory":"512Mi"},"requests":{"cpu":"500m","memory":"512Mi"}}` | ControllerManager's pod resources |
| controllerManager.nodeSelector | object | `{}` | ControllerManager's nodeSelector |
| controllerManager.podDisruptionBudget.enabled | bool | `false` | Enable PodDisruptionBudget |
| controllerManager.podDisruptionBudget.minAvailable | int | `1` | PodDisruptionBudget's topologySpreadConstraints |
| controllerManager.readinessProbe.failureThreshold | int | `3` | ControllerManager's readinessProbe failureThreshold |
| controllerManager.readinessProbe.initialDelaySeconds | int | `5` | ControllerManager's readinessProbe initialDelaySeconds |
| controllerManager.readinessProbe.periodSeconds | int | `10` | ControllerManager's readinessProbe periodSeconds |
| controllerManager.readinessProbe.successThreshold | int | `1` | ControllerManager's readinessProbe successThreshold |
| controllerManager.readinessProbe.timeoutSeconds | int | `1` | ControllerManager's readinessProbe timeoutSeconds |
| controllerManager.replicas | int | `1` | ControllerManager's replicas count |
| controllerManager.tolerations | list | `[]` | ControllerManager's tolerations |
| controllerManager.topologySpreadConstraints | list | `[]` | ControllerManager's topologySpreadConstraints |
| fullnameOverride | string | `""` | Override the resource name |
| managerConfig.controllerManagerConfigYaml | string | controllerManagerConfigYaml | controller_manager_config.yaml. ControllerManager utilizes this yaml via manager-config Configmap. |
| metricsService.annotations | object | `{}` | metricsService's annotations |
| metricsService.labels | object | `{}` | metricsService's labels |
| metricsService.ports | list | `[{"name":"https","port":8443,"protocol":"TCP","targetPort":8443}]` | metricsService's ports |
| metricsService.type | string | `"ClusterIP"` | metricsService's type |
| mutatingWebhook.reinvocationPolicy | string | `"Never"` | MutatingWebhookConfiguration's reinvocationPolicy |
| nameOverride | string | `""` | Override the resource name |
| webhookService.ipDualStack.enabled | bool | `false` | webhookService's ipDualStack enabled |
| webhookService.ipDualStack.ipFamilies | list | `["IPv6","IPv4"]` | webhookService's ipDualStack ipFamilies |
| webhookService.ipDualStack.ipFamilyPolicy | string | `"PreferDualStack"` | webhookService's ipDualStack ipFamilyPolicy |
| webhookService.ports | list | `[{"port":443,"protocol":"TCP","targetPort":9443}]` | webhookService's ports |
| webhookService.type | string | `"ClusterIP"` | webhookService's type |
86 changes: 86 additions & 0 deletions incubator/kueue/README.md.gotmpl
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
{{ template "chart.header" . }}

{{ template "chart.badgesSection" . }}

{{ template "chart.description" . }}

{{ template "chart.homepage" . }}

### Installation

Quick start instructions for the setup and configuration of kueue using Helm.

#### Prerequisites

- [Helm](https://helm.sh/docs/intro/quickstart/#install-helm)
- (Optional) [Cert-manager](https://cert-manager.io/docs/installation/)

#### Installing the chart

##### Install chart using Helm v3.0+

Either clone the kueue repository:

```bash
$ git clone git@github.com:kubernetes-sigs/kueue.git
$ cd kueue/charts
$ helm install kueue kueue/ --create-namespace --namespace kueue-system
```

Or use the charts pushed to `oci://registry.k8s.io/kueue/charts/kueue`:

```bash
helm install kueue oci://registry.k8s.io/kueue/charts/kueue --version="0.14.3" --create-namespace --namespace=kueue-system
```

For more advanced parametrization of Kueue, we recommend using a local overrides file, passed via the `--values` flag. For example:

```yaml
controllerManager:
featureGates:
- name: TopologyAwareScheduling
enabled: true
replicas: 2
manager:
resources:
limits:
cpu: "2"
memory: 2Gi
requests:
cpu: "2"
memory: 2Gi
```

```bash
helm install kueue oci://registry.k8s.io/kueue/charts/kueue --version="0.14.3" \
--create-namespace --namespace=kueue-system \
--values overrides.yaml
```

You can also use the `--set` flag. For example, to enable a feature gate (e.g., `TopologyAwareScheduling`):

```bash
helm install kueue oci://registry.k8s.io/kueue/charts/kueue --version="0.14.3" \
--create-namespace --namespace=kueue-system \
--set "controllerManager.featureGates[0].name=TopologyAwareScheduling" \
--set "controllerManager.featureGates[0].enabled=true"
```

##### Verify that controller pods are running properly.

```bash
$ kubectl get deploy -n kueue-system
NAME READY UP-TO-DATE AVAILABLE AGE
kueue-controller-manager 1/1 1 1 7s
```
##### Prometheus

Kueue supports Prometheus metrics.
Check out the [site](https://kueue.sigs.k8s.io/docs/tasks/manage/productization/prometheus/)
for more information on installing kueue with metrics using our Helm chart.

### Configuration

The following table lists the configurable parameters of the kueue chart and their default values.

{{ template "chart.valuesTable" . }}
127 changes: 127 additions & 0 deletions incubator/kueue/templates/_helpers.tpl
Original file line number Diff line number Diff line change
@@ -0,0 +1,127 @@
{{/*
Expand the name of the chart.
*/}}
{{- define "kueue.name" -}}
{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" }}
{{- end }}

{{/*
Create a default fully qualified app name.
We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec).
If release name contains chart name it will be used as a full name.
*/}}
{{- define "kueue.fullname" -}}
{{- if .Values.fullnameOverride }}
{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" }}
{{- else }}
{{- $name := default .Chart.Name .Values.nameOverride }}
{{- if contains $name .Release.Name }}
{{- .Release.Name | trunc 63 | trimSuffix "-" }}
{{- else }}
{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" }}
{{- end }}
{{- end }}
{{- end }}

{{/*
Create chart name and version as used by the chart label.
*/}}
{{- define "kueue.chart" -}}
{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }}
{{- end }}

{{/*
Common labels
*/}}
{{- define "kueue.labels" -}}
helm.sh/chart: {{ include "kueue.chart" . }}
{{ include "kueue.selectorLabels" . }}
{{- if .Chart.AppVersion }}
app.kubernetes.io/version: {{ .Chart.AppVersion | quote }}
{{- end }}
app.kubernetes.io/managed-by: {{ .Release.Service }}
{{- end }}

{{/*
Selector labels
*/}}
{{- define "kueue.selectorLabels" -}}
app.kubernetes.io/name: {{ include "kueue.name" . }}
app.kubernetes.io/instance: {{ .Release.Name }}
control-plane: controller-manager
{{- end }}

{{/*
Labels for metrics service
*/}}
{{- define "kueue.metricsService.labels" -}}
{{ include "kueue.labels" . }}
app.kubernetes.io/component: metrics-service
{{- end }}

{{/*
Labels for webhook service
*/}}
{{- define "kueue.webhookService.labels" -}}
{{ include "kueue.labels" . }}
app.kubernetes.io/component: webhook-service
{{- end }}

{{/*
Labels for visibility service
*/}}
{{- define "kueue.visibilityService.labels" -}}
{{ include "kueue.labels" . }}
app.kubernetes.io/component: visibility-service
{{- end }}

{{/*
Labels for controller-manager
*/}}
{{- define "kueue.controllerManager.labels" -}}
{{ include "kueue.labels" . }}
app.kubernetes.io/component: controller
{{- end }}

{{/*
Create the name of the service account to use
*/}}
{{- define "kueue.serviceAccountName" -}}
{{- if .Values.serviceAccount.create }}
{{- default (include "kueue.fullname" .) .Values.serviceAccount.name }}
{{- else }}
{{- default "default" .Values.serviceAccount.name }}
{{- end }}
{{- end }}

{{/*
FeatureGates
*/}}
{{- define "kueue.featureGates" -}}
{{- $features := "" }}
{{- range .Values.controllerManager.featureGates }}
{{- $str := printf "%s=%t," .name .enabled }}
{{- $features = print $features $str }}
{{- end }}
{{- with .Values.controllerManager.featureGates }}
- --feature-gates={{ $features | trimSuffix "," }}
{{- end }}
{{- end }}

{{/*
IsFeatureGateEnabled - outputs true if the feature gate .Feature is enabled in the .List
Usage:
{{- if include "kueue.isFeatureGateEnabled" (dict "List" .Values.controllerManager.featureGates "Feature" "VisibilityOnDemand") }}
*/}}
{{- define "kueue.isFeatureGateEnabled" -}}
{{- $feature := .Feature }}
{{- $enabled := false }}
{{- range .List }}
{{- if (and (eq .name $feature) (eq .enabled true)) }}
{{- $enabled = true }}
{{- end }}
{{- end }}
{{- if $enabled }}
{{- $enabled -}}
{{- end }}
{{- end }}
Loading