From b2041b89a094acc95c9727cdf74be32ef932557c Mon Sep 17 00:00:00 2001 From: Chi-Sheng Liu Date: Sat, 28 Sep 2024 23:53:12 +0800 Subject: [PATCH 1/5] [Docs][KubeRay] Add YuniKorn Gang scheduling doc Closes: ray-project/ray#47848 Signed-off-by: Chi-Sheng Liu --- .../cluster/kubernetes/k8s-ecosystem.md | 2 + .../kubernetes/k8s-ecosystem/yunikorn.md | 158 ++++++++++++++++++ 2 files changed, 160 insertions(+) create mode 100644 doc/source/cluster/kubernetes/k8s-ecosystem/yunikorn.md diff --git a/doc/source/cluster/kubernetes/k8s-ecosystem.md b/doc/source/cluster/kubernetes/k8s-ecosystem.md index 418deaa167fb0..7e7eb221b9512 100644 --- a/doc/source/cluster/kubernetes/k8s-ecosystem.md +++ b/doc/source/cluster/kubernetes/k8s-ecosystem.md @@ -9,6 +9,7 @@ k8s-ecosystem/ingress k8s-ecosystem/prometheus-grafana k8s-ecosystem/pyspy k8s-ecosystem/volcano +k8s-ecosystem/yunikorn k8s-ecosystem/kubeflow k8s-ecosystem/kueue k8s-ecosystem/istio @@ -18,6 +19,7 @@ k8s-ecosystem/istio * {ref}`kuberay-prometheus-grafana` * {ref}`kuberay-pyspy-integration` * {ref}`kuberay-volcano` +* {ref}`kuberay-yunikorn` * {ref}`kuberay-kubeflow-integration` * {ref}`kuberay-kueue` * {ref}`kuberay-istio` diff --git a/doc/source/cluster/kubernetes/k8s-ecosystem/yunikorn.md b/doc/source/cluster/kubernetes/k8s-ecosystem/yunikorn.md new file mode 100644 index 0000000000000..cfeb32c335afe --- /dev/null +++ b/doc/source/cluster/kubernetes/k8s-ecosystem/yunikorn.md @@ -0,0 +1,158 @@ +(kuberay-yunikorn)= +# KubeRay integration with Apache YuniKorn + +[Apache YuniKorn](https://yunikorn.apache.org/) is a light-weight, universal resource scheduler for container orchestrator systems. It is 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. + +KubeRay's Apache YuniKorn integration enables more efficient scheduling of Ray pods in multi-tenant Kubernetes environments. + +## Setup + +### Step 1: Create a Kubernetes cluster with KinD +Run the following command in a terminal: + +```shell +kind create cluster +``` + +### Step 2: Install Apache YuniKorn + +You need to successfully install Apache YuniKorn on your Kubernetes cluster before enabling Apache YuniKorn integration with KubeRay. +See [Get Started](https://yunikorn.apache.org/docs/) for Apache YuniKorn installation instructions. + +### Step 3: Install the KubeRay Operator with Apache YuniKorn support + +Deploy the KubeRay Operator with the `--enable-batch-scheduler` flag to enable Volcano batch scheduling support. + +When installing KubeRay Operator using Helm, you should use one of these two options: + +* Set `batchScheduler.name` to `yunikorn` in your +[`values.yaml`](https://github.com/ray-project/kuberay/blob/df5577fe1b3f537f36dbda3870b4743edd2f11bb/helm-chart/kuberay-operator/values.yaml#L83) +file: +```shell +# values.yaml file +batchScheduler: + name: yunikorn +``` + +* Pass the `--set batchScheduler.name=yunikorn` flag when running on the command line: +```shell +# Install the Helm chart with --enable-batch-scheduler flag set to true +helm install kuberay-operator kuberay/kuberay-operator --namespace ray-system --version 1.2.2 --create-namespace --set batchScheduler.name=yunikorn +``` + +### Step 4: Use Apache YuniKorn for batch scheduling + +## Example + +### Gang scheduling + +This example walks through how gang scheduling works with Apache YuniKorn and KubeRay. + +First, create a queue with a capacity of 4 CPUs and 6Gi of RAM by editing the ConfigMap: + +Run `kubectl edit configmap -n yunikorn yunikorn-defaults` + +Add a `queues.yaml` config to under the `data` key, the final ConfigMap should look like this: + +```yaml +apiVersion: v1 +kind: ConfigMap +metadata: + # Metadata for the ConfigMap, skip for brevity +data: + queues.yaml: | + partitions: + - name: default + queues: + - name: root + queues: + - name: test + submitacl: "*" + parent: false + resources: + guaranteed: + memory: 6G + vcore: 4 + max: + memory: 6G + vcore: 4 +``` + +Save the changes and exit the editor. This configuration creates a queue named `root.default` with a capacity of 4 CPUs and 6Gi of RAM. + +Next, create a RayCluster with a head node (1 CPU + 2Gi of RAM) and two workers (1 CPU + 1Gi of RAM each), for a total of 3 CPU and 4Gi of RAM: + + +```shell +# Path: kuberay/ray-operator/config/samples +# Includes the necessary labels for the Apache YuniKorn scheduler gang scheduling: +# - `ray.io/gang-scheduling-enabled` +# - `yunikorn.apache.org/app-id` +# - `yunikorn.apache.org/queue` +wget https://raw.githubusercontent.com/ray-project/kuberay/v1.2.2/ray-operator/config/samples/ray-cluster.yunikorn-scheduler.yaml +kubectl apply -f ray-cluster.yunikorn-scheduler.yaml +``` + +Because the queue has a capacity of 4 CPU and 6Gi of RAM, this resource should schedule successfully without any issues. + +```shell +$ kubectl get pods + +NAME READY STATUS RESTARTS AGE +test-yunikorn-0-head-98fmp 1/1 Running 0 67s +test-yunikorn-0-worker-worker-42tgg 1/1 Running 0 67s +test-yunikorn-0-worker-worker-467mn 1/1 Running 0 67s +``` + +Next, add an additional RayCluster with the same configuration of head and worker nodes, but with a different name: + +```shell +# Path: kuberay/ray-operator/config/samples +# Includes the `ray.io/scheduler-name: volcano` and `volcano.sh/queue-name: kuberay-test-queue` labels in the metadata.labels +# Replaces the name to test-yunikorn-1 +sed 's/test-yunikorn-0/test-yunikorn-1/' ray-cluster.yunikorn-scheduler.yaml | kubectl apply -f- +``` + +Now all the pods for `test-yunikorn-1` are in the `Pending` state: + +```shell +$ kubectl get pods + +NAME READY STATUS RESTARTS AGE +test-yunikorn-0-head-98fmp 1/1 Running 0 4m22s +test-yunikorn-0-worker-worker-42tgg 1/1 Running 0 4m22s +test-yunikorn-0-worker-worker-467mn 1/1 Running 0 4m22s +test-yunikorn-1-head-xl2r5 0/1 Pending 0 71s +test-yunikorn-1-worker-worker-l6ttz 0/1 Pending 0 71s +test-yunikorn-1-worker-worker-vjsts 0/1 Pending 0 71s +tg-test-yunikorn-1-headgroup-vgzvoot0dh 0/1 Pending 0 69s +tg-test-yunikorn-1-worker-eyti2bn2jv 1/1 Running 0 69s +tg-test-yunikorn-1-worker-k8it0x6s73 0/1 Pending 0 69s +``` + +Because the new cluster requires more CPU and RAM than our queue allows, even though one of the pods would fit in the remaining 1 CPU and 2Gi of RAM, none of the cluster's pods are placed until there is enough room for all the pods. Without using Volcano for gang scheduling in this way, one of the pods would ordinarily be placed, leading to the cluster being partially allocated, and some jobs (like [Horovod](https://github.com/horovod/horovod) training) being stuck waiting for resources to become available. + +Delete the first RayCluster to make space in the queue: + +```shell +kubectl delete raycluster test-yunikorn-0 +``` + +Now all the pods for the second cluster changed to the `Running` state, because enough resources are now available to schedule the entire set of pods: + +Check the pods again to see that the second cluster is now up and running: + +```shell +$ kubectl get pods + +NAME READY STATUS RESTARTS AGE +test-yunikorn-1-head-xl2r5 1/1 Running 0 3m34s +test-yunikorn-1-worker-worker-l6ttz 1/1 Running 0 3m34s +test-yunikorn-1-worker-worker-vjsts 1/1 Running 0 3m34s +``` + +Clean up the resources: + +```shell +kubectl delete raycluster test-yunikorn-1 +``` From 5b71113595c0100f43a6abadf4b775ec6543fa6a Mon Sep 17 00:00:00 2001 From: Chi-Sheng Liu Date: Sun, 29 Sep 2024 19:18:54 +0800 Subject: [PATCH 2/5] [Docs] Address issue comments Closes: ray-project/ray#47848 Signed-off-by: Chi-Sheng Liu --- .../yunikorn-dashboard-apps-pending.png | Bin 0 -> 55273 bytes .../yunikorn-dashboard-apps-running.png | Bin 0 -> 67450 bytes .../kubernetes/k8s-ecosystem/yunikorn.md | 104 +++++++++++------- 3 files changed, 65 insertions(+), 39 deletions(-) create mode 100644 doc/source/cluster/kubernetes/images/yunikorn-dashboard-apps-pending.png create mode 100644 doc/source/cluster/kubernetes/images/yunikorn-dashboard-apps-running.png diff --git a/doc/source/cluster/kubernetes/images/yunikorn-dashboard-apps-pending.png b/doc/source/cluster/kubernetes/images/yunikorn-dashboard-apps-pending.png new file mode 100644 index 0000000000000000000000000000000000000000..e5b56b483af0f809966c360ca7a361787ba710c4 GIT binary patch literal 55273 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 X!`@GOvaRn=Pgq=73YqitmFNEec8SyQ literal 0 HcmV?d00001 diff --git a/doc/source/cluster/kubernetes/images/yunikorn-dashboard-apps-running.png b/doc/source/cluster/kubernetes/images/yunikorn-dashboard-apps-running.png new file mode 100644 index 0000000000000000000000000000000000000000..11d626f2347c798e395bb26136c1fe9f156e91d3 GIT binary patch literal 67450 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 G(SHDxG_FAa literal 0 HcmV?d00001 diff --git a/doc/source/cluster/kubernetes/k8s-ecosystem/yunikorn.md b/doc/source/cluster/kubernetes/k8s-ecosystem/yunikorn.md index cfeb32c335afe..2ef3d0544829d 100644 --- a/doc/source/cluster/kubernetes/k8s-ecosystem/yunikorn.md +++ b/doc/source/cluster/kubernetes/k8s-ecosystem/yunikorn.md @@ -1,11 +1,16 @@ (kuberay-yunikorn)= + # KubeRay integration with Apache YuniKorn -[Apache YuniKorn](https://yunikorn.apache.org/) is a light-weight, universal resource scheduler for container orchestrator systems. It is 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. +[Apache YuniKorn](https://yunikorn.apache.org/) is a light-weight, universal resource scheduler for container orchestrator systems. It's 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. + +KubeRay's Apache YuniKorn integration enables more efficient scheduling of Ray Pods in multi-tenant Kubernetes environments. + +:::{note} -KubeRay's Apache YuniKorn integration enables more efficient scheduling of Ray pods in multi-tenant Kubernetes environments. +This feature requires KubeRay version 1.2.2 or newer, and it's still alpha. -## Setup +::: ### Step 1: Create a Kubernetes cluster with KinD Run the following command in a terminal: @@ -19,32 +24,15 @@ kind create cluster You need to successfully install Apache YuniKorn on your Kubernetes cluster before enabling Apache YuniKorn integration with KubeRay. See [Get Started](https://yunikorn.apache.org/docs/) for Apache YuniKorn installation instructions. -### Step 3: Install the KubeRay Operator with Apache YuniKorn support +### Step 3: Install the KubeRay operator with Apache YuniKorn support -Deploy the KubeRay Operator with the `--enable-batch-scheduler` flag to enable Volcano batch scheduling support. - -When installing KubeRay Operator using Helm, you should use one of these two options: - -* Set `batchScheduler.name` to `yunikorn` in your -[`values.yaml`](https://github.com/ray-project/kuberay/blob/df5577fe1b3f537f36dbda3870b4743edd2f11bb/helm-chart/kuberay-operator/values.yaml#L83) -file: -```shell -# values.yaml file -batchScheduler: - name: yunikorn -``` +When installing KubeRay operator using Helm, you should pass the `--set batchScheduler.name=yunikorn` flag when running on the command line: -* Pass the `--set batchScheduler.name=yunikorn` flag when running on the command line: ```shell -# Install the Helm chart with --enable-batch-scheduler flag set to true -helm install kuberay-operator kuberay/kuberay-operator --namespace ray-system --version 1.2.2 --create-namespace --set batchScheduler.name=yunikorn +helm install kuberay-operator kuberay/kuberay-operator --version 1.2.2 --set batchScheduler.name=yunikorn ``` -### Step 4: Use Apache YuniKorn for batch scheduling - -## Example - -### Gang scheduling +### Step 4: Use Apache YuniKorn for gang scheduling This example walks through how gang scheduling works with Apache YuniKorn and KubeRay. @@ -52,6 +40,8 @@ First, create a queue with a capacity of 4 CPUs and 6Gi of RAM by editing the Co Run `kubectl edit configmap -n yunikorn yunikorn-defaults` +This `ConfigMap` is created during the installation of the Apache YuniKorn Helm chart. + Add a `queues.yaml` config to under the `data` key, the final ConfigMap should look like this: ```yaml @@ -78,21 +68,43 @@ data: vcore: 4 ``` -Save the changes and exit the editor. This configuration creates a queue named `root.default` with a capacity of 4 CPUs and 6Gi of RAM. +Save the changes and exit the editor. This configuration creates a queue named `root.test` with a capacity of 4 CPUs and 6Gi of RAM. Next, create a RayCluster with a head node (1 CPU + 2Gi of RAM) and two workers (1 CPU + 1Gi of RAM each), for a total of 3 CPU and 4Gi of RAM: - ```shell # Path: kuberay/ray-operator/config/samples -# Includes the necessary labels for the Apache YuniKorn scheduler gang scheduling: -# - `ray.io/gang-scheduling-enabled` -# - `yunikorn.apache.org/app-id` -# - `yunikorn.apache.org/queue` -wget https://raw.githubusercontent.com/ray-project/kuberay/v1.2.2/ray-operator/config/samples/ray-cluster.yunikorn-scheduler.yaml +# Configure the necessary labels on the RayCluster custom resource for Apache YuniKorn scheduler's gang scheduling: +# - `ray.io/gang-scheduling-enabled`: This should be set to `true` to enable gang scheduling. +# - `yunikorn.apache.org/app-id`: This should be set to the name of the RayCluster. +# - `yunikorn.apache.org/queue`: This should be set to the name of one of the queues in Apache YuniKorn. +wget https://raw.githubusercontent.com/ray-project/kuberay/master/ray-operator/config/samples/ray-cluster.yunikorn-scheduler.yaml kubectl apply -f ray-cluster.yunikorn-scheduler.yaml ``` +Check the RayCluster that was created: + +```shell +$ kubectl describe raycluster test-yunikorn-0 + +Name: test-yunikorn-0 +Namespace: default +Labels: ray.io/gang-scheduling-enabled=true + yunikorn.apache.org/app-id=test-yunikorn-0 + yunikorn.apache.org/queue=root.test +Annotations: +API Version: ray.io/v1 +Kind: RayCluster +Metadata: + Creation Timestamp: 2024-09-29T09:52:30Z + Generation: 1 + Resource Version: 951 + UID: cae1dbc9-5a67-4b43-b0d9-be595f21ab85 +# Other fields are skipped for brevity +```` + +Note the labels on the RayCluster: `ray.io/gang-scheduling-enabled=true`, `yunikorn.apache.org/app-id=test-yunikorn-0`, and `yunikorn.apache.org/queue=root.test`. + Because the queue has a capacity of 4 CPU and 6Gi of RAM, this resource should schedule successfully without any issues. ```shell @@ -104,16 +116,24 @@ test-yunikorn-0-worker-worker-42tgg 1/1 Running 0 67s test-yunikorn-0-worker-worker-467mn 1/1 Running 0 67s ``` +You can verify it by checking the [Apache YuniKorn dashboard](https://yunikorn.apache.org/docs/#access-the-web-ui). + +```shell +kubectl port-forward svc/yunikorn-service 9889:9889 -n yunikorn +``` + +And then go to http://localhost:9889/#/applications to see the running applications. + +![Apache YuniKorn dashboard](../images/yunikorn-dashboard-apps-running.png) + Next, add an additional RayCluster with the same configuration of head and worker nodes, but with a different name: ```shell -# Path: kuberay/ray-operator/config/samples -# Includes the `ray.io/scheduler-name: volcano` and `volcano.sh/queue-name: kuberay-test-queue` labels in the metadata.labels -# Replaces the name to test-yunikorn-1 +# Replace the name with `test-yunikorn-1` sed 's/test-yunikorn-0/test-yunikorn-1/' ray-cluster.yunikorn-scheduler.yaml | kubectl apply -f- ``` -Now all the pods for `test-yunikorn-1` are in the `Pending` state: +Now all the Pods for `test-yunikorn-1` are in the `Pending` state: ```shell $ kubectl get pods @@ -130,17 +150,23 @@ tg-test-yunikorn-1-worker-eyti2bn2jv 1/1 Running 0 69s tg-test-yunikorn-1-worker-k8it0x6s73 0/1 Pending 0 69s ``` -Because the new cluster requires more CPU and RAM than our queue allows, even though one of the pods would fit in the remaining 1 CPU and 2Gi of RAM, none of the cluster's pods are placed until there is enough room for all the pods. Without using Volcano for gang scheduling in this way, one of the pods would ordinarily be placed, leading to the cluster being partially allocated, and some jobs (like [Horovod](https://github.com/horovod/horovod) training) being stuck waiting for resources to become available. +Those Pods that prefixed with `tg-` are created by Apache YuniKorn for gang scheduling purpose. + +Go to http://localhost:9889/#/applications and then you can see `test-yunikorn-1` is in the `Accepted` state but not running yet: + +![Apache YuniKorn dashboard](../images/yunikorn-dashboard-apps-pending.png) + +Because the new cluster requires more CPU and RAM than the queue allows, even though one of the Pods would fit in the remaining 1 CPU and 2Gi of RAM, none of the cluster's Pods are placed until there is enough room for all the Pods. Without using Apache YuniKorn for gang scheduling in this way, one of the Pods would ordinarily be placed, leading to the cluster being partially allocated. -Delete the first RayCluster to make space in the queue: +Delete the first RayCluster to free up resources in the queue: ```shell kubectl delete raycluster test-yunikorn-0 ``` -Now all the pods for the second cluster changed to the `Running` state, because enough resources are now available to schedule the entire set of pods: +Now all the Pods for the second cluster changed to the `Running` state, because enough resources are now available to schedule the entire set of Pods: -Check the pods again to see that the second cluster is now up and running: +Check the Pods again to see that the second cluster is now up and running: ```shell $ kubectl get pods From e5002706c1e872bc888bcf97c79a7baf77921653 Mon Sep 17 00:00:00 2001 From: Chi-Sheng Liu Date: Sun, 6 Oct 2024 12:43:14 +0800 Subject: [PATCH 3/5] [Docs][KubeRay] Address issue comments Closes: ray-project/ray#47848 Signed-off-by: Chi-Sheng Liu --- doc/source/cluster/kubernetes/k8s-ecosystem/yunikorn.md | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/doc/source/cluster/kubernetes/k8s-ecosystem/yunikorn.md b/doc/source/cluster/kubernetes/k8s-ecosystem/yunikorn.md index 2ef3d0544829d..6615228368096 100644 --- a/doc/source/cluster/kubernetes/k8s-ecosystem/yunikorn.md +++ b/doc/source/cluster/kubernetes/k8s-ecosystem/yunikorn.md @@ -76,7 +76,7 @@ Next, create a RayCluster with a head node (1 CPU + 2Gi of RAM) and two workers # Path: kuberay/ray-operator/config/samples # Configure the necessary labels on the RayCluster custom resource for Apache YuniKorn scheduler's gang scheduling: # - `ray.io/gang-scheduling-enabled`: This should be set to `true` to enable gang scheduling. -# - `yunikorn.apache.org/app-id`: This should be set to the name of the RayCluster. +# - `yunikorn.apache.org/app-id`: This should be set to a unique identifier for the application in Kubernetes, even across different namespaces. # - `yunikorn.apache.org/queue`: This should be set to the name of one of the queues in Apache YuniKorn. wget https://raw.githubusercontent.com/ray-project/kuberay/master/ray-operator/config/samples/ray-cluster.yunikorn-scheduler.yaml kubectl apply -f ray-cluster.yunikorn-scheduler.yaml @@ -105,6 +105,12 @@ Metadata: Note the labels on the RayCluster: `ray.io/gang-scheduling-enabled=true`, `yunikorn.apache.org/app-id=test-yunikorn-0`, and `yunikorn.apache.org/queue=root.test`. +:::{note} + +The `ray.io/gang-scheduling-enabled` label is only needed when Gang Scheduling is required. If this label is not set, the Ray cluster will be scheduled by YuniKorn without enforcing Gang Scheduling. + +::: + Because the queue has a capacity of 4 CPU and 6Gi of RAM, this resource should schedule successfully without any issues. ```shell From 75f8632f757f7ca053763850764a88e1aeff1861 Mon Sep 17 00:00:00 2001 From: Chi-Sheng Liu Date: Sun, 6 Oct 2024 16:14:34 +0800 Subject: [PATCH 4/5] [Chore] Fix CI errors Closes: ray-project/ray#47848 Signed-off-by: Chi-Sheng Liu --- doc/source/cluster/kubernetes/k8s-ecosystem/yunikorn.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/doc/source/cluster/kubernetes/k8s-ecosystem/yunikorn.md b/doc/source/cluster/kubernetes/k8s-ecosystem/yunikorn.md index 6615228368096..e9bd82baef62c 100644 --- a/doc/source/cluster/kubernetes/k8s-ecosystem/yunikorn.md +++ b/doc/source/cluster/kubernetes/k8s-ecosystem/yunikorn.md @@ -12,19 +12,19 @@ This feature requires KubeRay version 1.2.2 or newer, and it's still alpha. ::: -### Step 1: Create a Kubernetes cluster with KinD +## Step 1: Create a Kubernetes cluster with KinD Run the following command in a terminal: ```shell kind create cluster ``` -### Step 2: Install Apache YuniKorn +## Step 2: Install Apache YuniKorn You need to successfully install Apache YuniKorn on your Kubernetes cluster before enabling Apache YuniKorn integration with KubeRay. See [Get Started](https://yunikorn.apache.org/docs/) for Apache YuniKorn installation instructions. -### Step 3: Install the KubeRay operator with Apache YuniKorn support +## Step 3: Install the KubeRay operator with Apache YuniKorn support When installing KubeRay operator using Helm, you should pass the `--set batchScheduler.name=yunikorn` flag when running on the command line: @@ -32,7 +32,7 @@ When installing KubeRay operator using Helm, you should pass the `--set batchSch helm install kuberay-operator kuberay/kuberay-operator --version 1.2.2 --set batchScheduler.name=yunikorn ``` -### Step 4: Use Apache YuniKorn for gang scheduling +## Step 4: Use Apache YuniKorn for gang scheduling This example walks through how gang scheduling works with Apache YuniKorn and KubeRay. From 8dcb3d2439317672f34f87428a7933b6f6fe55f7 Mon Sep 17 00:00:00 2001 From: Chi-Sheng Liu Date: Wed, 9 Oct 2024 19:11:30 +0800 Subject: [PATCH 5/5] [Docs][KubeRay] Address issue comments about passive voice Closes: ray-project/ray#47848 Signed-off-by: Chi-Sheng Liu --- .../kubernetes/k8s-ecosystem/yunikorn.md | 42 +++++++++---------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/doc/source/cluster/kubernetes/k8s-ecosystem/yunikorn.md b/doc/source/cluster/kubernetes/k8s-ecosystem/yunikorn.md index e9bd82baef62c..ad48ecc5d4759 100644 --- a/doc/source/cluster/kubernetes/k8s-ecosystem/yunikorn.md +++ b/doc/source/cluster/kubernetes/k8s-ecosystem/yunikorn.md @@ -2,13 +2,13 @@ # KubeRay integration with Apache YuniKorn -[Apache YuniKorn](https://yunikorn.apache.org/) is a light-weight, universal resource scheduler for container orchestrator systems. It's 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. +[Apache YuniKorn](https://yunikorn.apache.org/) is a light-weight, universal resource scheduler for container orchestrator systems. It performs 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. KubeRay's Apache YuniKorn integration enables more efficient scheduling of Ray Pods in multi-tenant Kubernetes environments. :::{note} -This feature requires KubeRay version 1.2.2 or newer, and it's still alpha. +This feature requires KubeRay version 1.2.2 or newer, and it's in alpha testing. ::: @@ -26,7 +26,7 @@ See [Get Started](https://yunikorn.apache.org/docs/) for Apache YuniKorn install ## Step 3: Install the KubeRay operator with Apache YuniKorn support -When installing KubeRay operator using Helm, you should pass the `--set batchScheduler.name=yunikorn` flag when running on the command line: +When installing KubeRay operator using Helm, pass the `--set batchScheduler.name=yunikorn` flag at the command line: ```shell helm install kuberay-operator kuberay/kuberay-operator --version 1.2.2 --set batchScheduler.name=yunikorn @@ -34,21 +34,21 @@ helm install kuberay-operator kuberay/kuberay-operator --version 1.2.2 --set bat ## Step 4: Use Apache YuniKorn for gang scheduling -This example walks through how gang scheduling works with Apache YuniKorn and KubeRay. +This example uses gang scheduling with Apache YuniKorn and KubeRay. First, create a queue with a capacity of 4 CPUs and 6Gi of RAM by editing the ConfigMap: Run `kubectl edit configmap -n yunikorn yunikorn-defaults` -This `ConfigMap` is created during the installation of the Apache YuniKorn Helm chart. +Helm creates this ConfigMap during the installation of the Apache YuniKorn Helm chart. -Add a `queues.yaml` config to under the `data` key, the final ConfigMap should look like this: +Add a `queues.yaml` config under the `data` key. The `ConfigMap` should look like the following: ```yaml apiVersion: v1 kind: ConfigMap metadata: - # Metadata for the ConfigMap, skip for brevity + # Metadata for the ConfigMap, skip for brevity. data: queues.yaml: | partitions: @@ -70,19 +70,19 @@ data: Save the changes and exit the editor. This configuration creates a queue named `root.test` with a capacity of 4 CPUs and 6Gi of RAM. -Next, create a RayCluster with a head node (1 CPU + 2Gi of RAM) and two workers (1 CPU + 1Gi of RAM each), for a total of 3 CPU and 4Gi of RAM: +Next, create a RayCluster with a head node with 1 CPU and 2GiB of RAM, and two workers with 1 CPU and 1GiB of RAM each, for a total of 3 CPU and 4GiB of RAM: ```shell # Path: kuberay/ray-operator/config/samples # Configure the necessary labels on the RayCluster custom resource for Apache YuniKorn scheduler's gang scheduling: -# - `ray.io/gang-scheduling-enabled`: This should be set to `true` to enable gang scheduling. -# - `yunikorn.apache.org/app-id`: This should be set to a unique identifier for the application in Kubernetes, even across different namespaces. -# - `yunikorn.apache.org/queue`: This should be set to the name of one of the queues in Apache YuniKorn. +# - `ray.io/gang-scheduling-enabled`: Set to `true` to enable gang scheduling. +# - `yunikorn.apache.org/app-id`: Set to a unique identifier for the application in Kubernetes, even across different namespaces. +# - `yunikorn.apache.org/queue`: Set to the name of one of the queues in Apache YuniKorn. wget https://raw.githubusercontent.com/ray-project/kuberay/master/ray-operator/config/samples/ray-cluster.yunikorn-scheduler.yaml kubectl apply -f ray-cluster.yunikorn-scheduler.yaml ``` -Check the RayCluster that was created: +Check the RayCluster that the KubeRay operator created: ```shell $ kubectl describe raycluster test-yunikorn-0 @@ -107,11 +107,11 @@ Note the labels on the RayCluster: `ray.io/gang-scheduling-enabled=true`, `yunik :::{note} -The `ray.io/gang-scheduling-enabled` label is only needed when Gang Scheduling is required. If this label is not set, the Ray cluster will be scheduled by YuniKorn without enforcing Gang Scheduling. +You only need the `ray.io/gang-scheduling-enabled` label when you require gang scheduling. If you don't set this label, YuniKorn schedules the Ray cluster without enforcing gang scheduling. ::: -Because the queue has a capacity of 4 CPU and 6Gi of RAM, this resource should schedule successfully without any issues. +Because the queue has a capacity of 4 CPU and 6GiB of RAM, this resource should schedule successfully without any issues. ```shell $ kubectl get pods @@ -122,20 +122,20 @@ test-yunikorn-0-worker-worker-42tgg 1/1 Running 0 67s test-yunikorn-0-worker-worker-467mn 1/1 Running 0 67s ``` -You can verify it by checking the [Apache YuniKorn dashboard](https://yunikorn.apache.org/docs/#access-the-web-ui). +Verify the scheduling by checking the [Apache YuniKorn dashboard](https://yunikorn.apache.org/docs/#access-the-web-ui). ```shell kubectl port-forward svc/yunikorn-service 9889:9889 -n yunikorn ``` -And then go to http://localhost:9889/#/applications to see the running applications. +Go to `http://localhost:9889/#/applications` to see the running apps. ![Apache YuniKorn dashboard](../images/yunikorn-dashboard-apps-running.png) Next, add an additional RayCluster with the same configuration of head and worker nodes, but with a different name: ```shell -# Replace the name with `test-yunikorn-1` +# Replace the name with `test-yunikorn-1`. sed 's/test-yunikorn-0/test-yunikorn-1/' ray-cluster.yunikorn-scheduler.yaml | kubectl apply -f- ``` @@ -156,13 +156,13 @@ tg-test-yunikorn-1-worker-eyti2bn2jv 1/1 Running 0 69s tg-test-yunikorn-1-worker-k8it0x6s73 0/1 Pending 0 69s ``` -Those Pods that prefixed with `tg-` are created by Apache YuniKorn for gang scheduling purpose. +Apache YuniKorn creates the Pods with the `tg-` prefix for gang scheduling purpose. -Go to http://localhost:9889/#/applications and then you can see `test-yunikorn-1` is in the `Accepted` state but not running yet: +Go to `http://localhost:9889/#/applications` and to see `test-yunikorn-1` in the `Accepted` state but not running yet: ![Apache YuniKorn dashboard](../images/yunikorn-dashboard-apps-pending.png) -Because the new cluster requires more CPU and RAM than the queue allows, even though one of the Pods would fit in the remaining 1 CPU and 2Gi of RAM, none of the cluster's Pods are placed until there is enough room for all the Pods. Without using Apache YuniKorn for gang scheduling in this way, one of the Pods would ordinarily be placed, leading to the cluster being partially allocated. +Because the new cluster requires more CPU and RAM than the queue allows, even though one of the Pods would fit in the remaining 1 CPU and 2GiB of RAM, Apache YuniKorn doesn't place the cluster's Pods until there's enough room for all of the Pods. Without using Apache YuniKorn for gang scheduling in this way, KubeRay would place one of the Pods, and only partially allocating the cluster. Delete the first RayCluster to free up resources in the queue: @@ -170,7 +170,7 @@ Delete the first RayCluster to free up resources in the queue: kubectl delete raycluster test-yunikorn-0 ``` -Now all the Pods for the second cluster changed to the `Running` state, because enough resources are now available to schedule the entire set of Pods: +Now all the Pods for the second cluster change to the `Running` state, because enough resources are now available to schedule the entire set of Pods: Check the Pods again to see that the second cluster is now up and running: