blob: b97476c9326f975f4c13dff269a10ad6cea5f6d7 [file] [log] [blame] [view]
<!--
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
-->
# Apache YuniKorn (Incubating) - A Universal Scheduler
Apache YuniKorn (Incubating) is a light-weight, universal resource scheduler for container orchestrator systems.
It was created to achieve fine-grained resource sharing for various workloads efficiently on a large scale, multi-tenant,
and cloud-native environment. YuniKorn brings a unified, cross-platform, scheduling experience for mixed workloads that consist
of stateless batch workloads and stateful services.
YuniKorn now supports K8s and can be deployed as a custom K8s scheduler. YuniKorn's architecture design also allows adding different
shim layer and adopt to different ResourceManager implementation including Apache Hadoop YARN, or any other systems.
## Feature highlights
- Features to support both batch jobs and long-running/stateful services.
- Hierarchy queues with min/max resource quotas.
- Resource fairness between queues, users and apps.
- Cross-queue preemption based on fairness.
- Automatically map incoming container requests to queues by policies.
- Node partition: partition cluster to sub-clusters with dedicated quota/ACL management.
- Fully compatible with K8s predicates, events, PV/PVC and admin commands.
- Supports to work with [Cluster AutoScaler](https://github.com/kubernetes/autoscaler/tree/master/cluster-autoscaler) to drive cluster scales up and down.
## Deployment model
YuniKorn can be deployed with [helm-charts](https://hub.helm.sh/charts/yunikorn/yunikorn) on an existing K8s cluster. It can be deployed with or without the admission controller. When the admission controller is enabled, YuniKorn will be the primary scheduler that takes over the resource scheduling (the admission controller runs a mutation webhook that automatically mutates pod spec's schedulerName to yunikorn); when it is disabled, user needs to manually change the schedulerName to `yunikorn` in order to get apps scheduled by YuniKorn.
## Supported K8s versions
| K8s Version | Support? |
| ------------------- | :-------------------: |
| 1.18.x (or earlier) | X |
| 1.19.x | End-of-life; Untested |
| 1.20.x | √ |
| 1.21.x | √ |
| 1.22.x | √ |
| 1.23.x | √ |
## Installing the chart
```
helm repo add yunikorn https://apache.github.io/incubator-yunikorn-release
helm repo update
helm install yunikorn yunikorn/yunikorn
```
## Configuration
The following table lists the configurable parameters of the YuniKorn chart and their default values.
| Parameter | Description | Default |
| ----------------------------------------------- | ---------------------------------------------------- | ------------------------------- |
| `imagePullSecrets` | Docker repository secrets | ` ` |
| `serviceAccount` | Service account name | `yunikorn-admin` |
| `replicaCount` | Scheduler replicas to be deployed | `1` |
| `image.repository` | Scheduler image repository | `apache/yunikorn` |
| `image.tag` | Scheduler image tag | `scheduler-latest` |
| `image.pullPolicy` | Scheduler image pull policy | `Always` |
| `pluginImage.repository` | Scheduler plugin image repository | `apache/yunikorn` |
| `pluginImage.tag` | Scheduler plugin image tag | `scheduler-plugin-latest` |
| `pluginImage.pullPolicy` | Scheduler plugin image pull policy | `Always` |
| `admissionController.replicaCount` | Admission controller replicas to be deployed | `1` |
| `admissionController.serviceAccount` | Admission controller service account name | `yunikorn-admission-controller` |
| `admissionController.image.repository` | Admission controller image repository | `apache/yunikorn` |
| `admissionController.image.tag` | Admission controller image tag | `admission-latest` |
| `admissionController.image.pullPolicy` | Admission controller image pull policy | `Always` |
| `admissionController.namespaceBlacklist` | Comma-separated list of namespace regexes to ignore | `^kube-system$` |
| `admissionController.resources.requests.cpu` | Admission controller CPU resource requests | `100m` |
| `admissionController.resources.requests.memory` | Admission controller memory resource requests | `500Mi` |
| `admissionController.resources.limits.cpu` | Admission controller CPU resource limit | `500m` |
| `admissionController.resources.limits.memory` | Admission controller memory resource limit | `500Mi` |
| `admissionController.nodeSelector` | Admission controller deployment nodeSelector(s) | `{}` |
| `admissionController.tolerations` | Admission controller deployment tolerations | `[]` |
| `admissionController.affinity` | Admission controller deployment affinity | `{}` |
| `admissionController.service.type` | Admission controller service type | `ClusterIP` |
| `service.type` | Scheduler service type | `ClusterIP` |
| `service.port` | Port of the scheduler service | `9080` |
| `service.portWeb` | Port of the web application service | `9889` |
| `resources.requests.cpu` | CPU resource requests | `200m` |
| `resources.requests.memory` | Memory resource requests | `1Gi` |
| `resources.limits.cpu` | CPU resource limit | `4` |
| `resources.limits.memory` | Memory resource limit | `2Gi` |
| `web.image.repository` | Web app image repository | `apache/yunikorn` |
| `web.image.tag` | Web app image tag | `web-latest` |
| `web.image.pullPolicy` | Web app image pull policy | `Always` |
| `web.resources.requests.cpu` | Web app CPU resource requests | `100m` |
| `web.resources.requests.memory` | Web app memory resource requests | `100Mi` |
| `web.resources.limits.cpu` | Web app CPU resource limit | `200m` |
| `web.resources.limits.memory` | Web app memory resource limit | `500Mi` |
| `embedAdmissionController` | Flag for enabling/disabling the admission controller | `true` |
| `enableSchedulerPlugin` | Flag for enabling/disabling scheduler plugin mode | `false` |
| `operatorPlugins` | Scheduler operator plugins | `general` |
| `nodeSelector` | Scheduler deployment nodeSelector(s) | `{}` |
| `tolerations` | Scheduler deployment tolerations | `[]` |
| `affinity` | Scheduler deployment affinity | `{}` |
These parameters can be passed in via helm's `--set` option, such as `--set embedAdmissionController=false`.