From 1515405271ee40d0a04af4865aae3a55459de082 Mon Sep 17 00:00:00 2001 From: hemantch01 Date: Wed, 3 Jun 2026 05:11:07 +0000 Subject: [PATCH 1/7] docs: sync and setup plugin documentation Signed-off-by: hemantch01 docs: reorganize plugin documentation into scheduler and controller Signed-off-by: hemantch01 docs: add controller overview and update sidebar category positions Signed-off-by: hemantch01 --- docs/Concepts/Queue.md | 2 +- docs/Contribution/_category_.json | 2 +- docs/Controller/Overview.md | 7 ++ .../Plugins/env.md} | 2 +- docs/Controller/Plugins/hcclrank.md | 59 ++++++++++ .../Plugins/mpi.md} | 2 +- .../Plugins/pytorch.md} | 2 +- .../Plugins/ray.md} | 2 +- .../Plugins/ssh.md} | 2 +- .../Plugins/svc.md} | 2 +- docs/Controller/_category_.json | 4 + docs/Ecosystem/RayOnVolcano.md | 2 +- docs/Ecosystem/_category_.json | 2 +- docs/KeyFeatures/QueueResourceManagement.md | 2 +- .../Plugins/capacity.md} | 2 +- .../Plugins/cdp.md} | 2 +- docs/Scheduler/Plugins/deviceshare.md | 41 +++++++ .../Plugins/nodegroup.md} | 2 +- docs/Scheduler/Plugins/overcommit.md | 44 ++++++++ docs/Scheduler/Plugins/pdb.md | 43 ++++++++ docs/Scheduler/Plugins/rescheduling.md | 72 ++++++++++++ .../Plugins/resource_strategy_fit.md} | 2 +- docs/Scheduler/Plugins/resourcequota.md | 40 +++++++ .../Plugins/task_topology.md} | 2 +- docs/Scheduler/Plugins/usage.md | 103 ++++++++++++++++++ docs/Scheduler/_category_.json | 2 +- docs/UserGuide/_category_.json | 4 + docs/UserGuide/user_guide.md | 23 ++-- docusaurus.config.js | 2 +- .../Volcano-1.10.0-release.md | 4 +- .../Volcano-1.13.0-release.md | 6 +- .../Volcano-1.7.0-release-en.md | 2 +- .../Volcano-1.9.0-release.md | 4 +- .../current/Concepts/Queue.md | 2 +- .../current/Ecosystem/RayOnVolcano.md | 2 +- .../KeyFeatures/QueueResourceManagement.md | 2 +- .../version-v1.10.0/Concepts/Queue.md | 2 +- .../version-v1.10.0/Ecosystem/RayOnVolcano.md | 2 +- .../version-v1.11.0/Concepts/Queue.md | 2 +- .../version-v1.11.0/Ecosystem/RayOnVolcano.md | 2 +- .../KeyFeatures/QueueResourceManagement.md | 2 +- .../version-v1.12.0/Concepts/Queue.md | 2 +- .../version-v1.12.0/Ecosystem/RayOnVolcano.md | 2 +- .../KeyFeatures/QueueResourceManagement.md | 2 +- .../version-v1.7.0/Concepts/Queue.md | 2 +- .../version-v1.7.0/Ecosystem/RayOnVolcano.md | 2 +- .../version-v1.8.2/Concepts/Queue.md | 2 +- .../version-v1.8.2/Ecosystem/RayOnVolcano.md | 2 +- .../version-v1.9.0/Concepts/Queue.md | 2 +- .../version-v1.9.0/Ecosystem/RayOnVolcano.md | 2 +- static/img/doc/descheduler-CN.svg | 3 - static/img/doc/descheduler_EN.svg | 3 - static/img/doc/volcano_global_design.svg | 3 - .../version-v1.10.0/Concepts/Queue.md | 2 +- .../version-v1.10.0/Ecosystem/RayOnVolcano.md | 2 +- .../version-v1.10.0/Scheduler/Plugins.md | 48 ++++++++ .../version-v1.11.0/Concepts/Queue.md | 2 +- .../version-v1.11.0/Ecosystem/RayOnVolcano.md | 2 +- .../KeyFeatures/QueueResourceManagement.md | 2 +- .../version-v1.11.0/Scheduler/Plugins.md | 47 ++++++++ .../version-v1.12.0/Concepts/Queue.md | 2 +- .../version-v1.12.0/Ecosystem/RayOnVolcano.md | 2 +- .../KeyFeatures/QueueResourceManagement.md | 2 +- .../version-v1.7.0/Concepts/Queue.md | 2 +- .../version-v1.7.0/Ecosystem/RayOnVolcano.md | 2 +- .../version-v1.8.2/Concepts/Queue.md | 2 +- .../version-v1.8.2/Ecosystem/RayOnVolcano.md | 2 +- .../version-v1.9.0/Concepts/Queue.md | 2 +- .../version-v1.9.0/Ecosystem/RayOnVolcano.md | 2 +- 69 files changed, 581 insertions(+), 77 deletions(-) create mode 100644 docs/Controller/Overview.md rename docs/{UserGuide/user_guide_how_to_use_env_plugin.md => Controller/Plugins/env.md} (98%) create mode 100644 docs/Controller/Plugins/hcclrank.md rename docs/{UserGuide/user_guide_how_to_use_mpi_plugin.md => Controller/Plugins/mpi.md} (98%) rename docs/{UserGuide/user_guide_how_to_use_pytorch_plugin.md => Controller/Plugins/pytorch.md} (99%) rename docs/{UserGuide/user_guide_how_to_use_ray_plugin.md => Controller/Plugins/ray.md} (99%) rename docs/{UserGuide/user_guide_how_to_use_ssh_plugin.md => Controller/Plugins/ssh.md} (99%) rename docs/{UserGuide/user_guide_how_to_use_svc_plugin.md => Controller/Plugins/svc.md} (99%) create mode 100644 docs/Controller/_category_.json rename docs/{UserGuide/user_guide_how_to_use_capacity_plugin.md => Scheduler/Plugins/capacity.md} (99%) rename docs/{UserGuide/user_guide_how_to_use_cdp_plugin.md => Scheduler/Plugins/cdp.md} (99%) create mode 100644 docs/Scheduler/Plugins/deviceshare.md rename docs/{UserGuide/user_guide_how_to_use_nodegroup_plugin.md => Scheduler/Plugins/nodegroup.md} (99%) create mode 100644 docs/Scheduler/Plugins/overcommit.md create mode 100644 docs/Scheduler/Plugins/pdb.md create mode 100644 docs/Scheduler/Plugins/rescheduling.md rename docs/{UserGuide/user_guide_how_to_use_resource_strategy_fit_plugin.md => Scheduler/Plugins/resource_strategy_fit.md} (99%) create mode 100644 docs/Scheduler/Plugins/resourcequota.md rename docs/{UserGuide/user_guide_how_to_use_task_topology_plugin.md => Scheduler/Plugins/task_topology.md} (97%) create mode 100644 docs/Scheduler/Plugins/usage.md create mode 100644 docs/UserGuide/_category_.json diff --git a/docs/Concepts/Queue.md b/docs/Concepts/Queue.md index 013626cd..03099e4e 100644 --- a/docs/Concepts/Queue.md +++ b/docs/Concepts/Queue.md @@ -51,7 +51,7 @@ deserved indicates the expected resource amount for all PodGroups in this queue. > **Note**: > -> 1. This field can only be configured when the capacity plugin is enabled, and must be less than or equal to the capability value. The proportion plugin uses weight to automatically calculate the queue's deserved value. For more information on using the capacity plugin, see: [capacity plugin user guide](../UserGuide/user_guide_how_to_use_capacity_plugin.md) +> 1. This field can only be configured when the capacity plugin is enabled, and must be less than or equal to the capability value. The proportion plugin uses weight to automatically calculate the queue's deserved value. For more information on using the capacity plugin, see: [capacity plugin user guide](../Scheduler/Plugins/capacity.md) > 2. If the allocated resources of a queue exceed its configured deserved value, the queue cannot reclaim resources from other queues * weight, *optional* diff --git a/docs/Contribution/_category_.json b/docs/Contribution/_category_.json index 6e7b3814..37feb0b4 100644 --- a/docs/Contribution/_category_.json +++ b/docs/Contribution/_category_.json @@ -1,4 +1,4 @@ { "label": "Contribution", - "position": 9 + "position": 10 } \ No newline at end of file diff --git a/docs/Controller/Overview.md b/docs/Controller/Overview.md new file mode 100644 index 00000000..ae48c502 --- /dev/null +++ b/docs/Controller/Overview.md @@ -0,0 +1,7 @@ +--- +title: Overview +--- + +## Introduction + +The Volcano Job Controller manages the lifecycle of jobs and dynamically configures job environments using plugins such as SSH, SVC, MPI, and PyTorch. diff --git a/docs/UserGuide/user_guide_how_to_use_env_plugin.md b/docs/Controller/Plugins/env.md similarity index 98% rename from docs/UserGuide/user_guide_how_to_use_env_plugin.md rename to docs/Controller/Plugins/env.md index 3b5d999f..99fab7ed 100644 --- a/docs/UserGuide/user_guide_how_to_use_env_plugin.md +++ b/docs/Controller/Plugins/env.md @@ -1,5 +1,5 @@ --- -title: "Volcano Job Plugin -- Env User Guide" +title: Env --- diff --git a/docs/Controller/Plugins/hcclrank.md b/docs/Controller/Plugins/hcclrank.md new file mode 100644 index 00000000..ab556003 --- /dev/null +++ b/docs/Controller/Plugins/hcclrank.md @@ -0,0 +1,59 @@ +--- +title: HCCLRank +--- + +## Introduction + +In distributed AI training, particularly when using Ascend NPUs (Neural Processing Units) or MindSpore frameworks, the compute nodes need a deterministic rank or index to communicate over HCCL (Huawei Collective Communication Library). + +The **HCCLRank Plugin** is a Volcano Job plugin that automatically injects a `hccl/rankIndex` annotation into the Pods of a Volcano Job. It calculates a unique rank for each pod based on its task type (`master` or `worker`) and its replica index. + +## Mechanism + +During the Pod creation phase (`OnPodCreate`), the HCCLRank Plugin intercepts the pod and adds the `hccl/rankIndex` annotation to it. + +The calculation is as follows: +- **Master Role**: Rank = Pod Index +- **Worker Role**: Rank = (Total Master Replicas) + Pod Index + +If the Pod already has a `RANK` environment variable defined in its container specifications, the plugin will use that value instead and simply map it to the `hccl/rankIndex` annotation. + +## Configuration + +To enable the HCCLRank plugin, configure it within the Volcano job controller's configuration or add it to the `plugins` field of your `VolcanoJob` spec. + +```yaml +apiVersion: batch.volcano.sh/v1alpha1 +kind: Job +metadata: + name: ascend-distributed-training +spec: + minAvailable: 3 + schedulerName: volcano + plugins: + hcclrank: + - --master=master + - --worker=worker + tasks: + - replicas: 1 + name: master + template: + spec: + containers: + - name: master + image: my-ascend-image + - replicas: 2 + name: worker + template: + spec: + containers: + - name: worker + image: my-ascend-image +``` + +### Arguments + +The HCCLRank plugin supports overriding the default task names used to identify master and worker roles: + +- **`--master`**: The name of the master role task in your Job spec. Default is `master`. +- **`--worker`**: The name of the worker role task in your Job spec. Default is `worker`. diff --git a/docs/UserGuide/user_guide_how_to_use_mpi_plugin.md b/docs/Controller/Plugins/mpi.md similarity index 98% rename from docs/UserGuide/user_guide_how_to_use_mpi_plugin.md rename to docs/Controller/Plugins/mpi.md index a46ece2f..77743da5 100644 --- a/docs/UserGuide/user_guide_how_to_use_mpi_plugin.md +++ b/docs/Controller/Plugins/mpi.md @@ -1,5 +1,5 @@ --- -title: "MPI Plugin User Guide" +title: MPI --- diff --git a/docs/UserGuide/user_guide_how_to_use_pytorch_plugin.md b/docs/Controller/Plugins/pytorch.md similarity index 99% rename from docs/UserGuide/user_guide_how_to_use_pytorch_plugin.md rename to docs/Controller/Plugins/pytorch.md index a4f604d6..9d7e1039 100644 --- a/docs/UserGuide/user_guide_how_to_use_pytorch_plugin.md +++ b/docs/Controller/Plugins/pytorch.md @@ -1,5 +1,5 @@ --- -title: "Pytorch Plugin User Guide" +title: Pytorch --- diff --git a/docs/UserGuide/user_guide_how_to_use_ray_plugin.md b/docs/Controller/Plugins/ray.md similarity index 99% rename from docs/UserGuide/user_guide_how_to_use_ray_plugin.md rename to docs/Controller/Plugins/ray.md index acd4c1d7..65c33136 100644 --- a/docs/UserGuide/user_guide_how_to_use_ray_plugin.md +++ b/docs/Controller/Plugins/ray.md @@ -1,5 +1,5 @@ --- -title: "Ray Plugin User Guide" +title: Ray --- diff --git a/docs/UserGuide/user_guide_how_to_use_ssh_plugin.md b/docs/Controller/Plugins/ssh.md similarity index 99% rename from docs/UserGuide/user_guide_how_to_use_ssh_plugin.md rename to docs/Controller/Plugins/ssh.md index 6bc4bd18..15c9e39e 100644 --- a/docs/UserGuide/user_guide_how_to_use_ssh_plugin.md +++ b/docs/Controller/Plugins/ssh.md @@ -1,5 +1,5 @@ --- -title: "Volcano Job Plugin -- SSH User Guide" +title: SSH --- diff --git a/docs/UserGuide/user_guide_how_to_use_svc_plugin.md b/docs/Controller/Plugins/svc.md similarity index 99% rename from docs/UserGuide/user_guide_how_to_use_svc_plugin.md rename to docs/Controller/Plugins/svc.md index 72a5a3b8..15145701 100644 --- a/docs/UserGuide/user_guide_how_to_use_svc_plugin.md +++ b/docs/Controller/Plugins/svc.md @@ -1,5 +1,5 @@ --- -title: "Volcano Job Plugin -- SVC User Guide" +title: SVC --- ## Background diff --git a/docs/Controller/_category_.json b/docs/Controller/_category_.json new file mode 100644 index 00000000..51e5301d --- /dev/null +++ b/docs/Controller/_category_.json @@ -0,0 +1,4 @@ +{ + "label": "Controller", + "position": 6 +} diff --git a/docs/Ecosystem/RayOnVolcano.md b/docs/Ecosystem/RayOnVolcano.md index 034c86c2..a3e8fc3b 100644 --- a/docs/Ecosystem/RayOnVolcano.md +++ b/docs/Ecosystem/RayOnVolcano.md @@ -203,4 +203,4 @@ ray job submit --address http://localhost:8265 -- python -c "import ray; ray.ini ### Learn More - For KubeRay integration details, visit the [KubeRay Volcano Scheduler Documentation](https://docs.ray.io/en/latest/cluster/kubernetes/k8s-ecosystem/volcano.html#kuberay-integration-with-volcano) -- For Volcano Job Ray plugin details, see the [Volcano Ray Plugin Guide](/docs/UserGuide/user_guide_how_to_use_ray_plugin) \ No newline at end of file +- For Volcano Job Ray plugin details, see the [Volcano Ray Plugin Guide](/docs/Plugins/user_guide_how_to_use_ray_plugin) \ No newline at end of file diff --git a/docs/Ecosystem/_category_.json b/docs/Ecosystem/_category_.json index ed0ef521..aaa2c623 100644 --- a/docs/Ecosystem/_category_.json +++ b/docs/Ecosystem/_category_.json @@ -1,4 +1,4 @@ { "label": "Ecosystem", - "position": 6 + "position": 9 } \ No newline at end of file diff --git a/docs/KeyFeatures/QueueResourceManagement.md b/docs/KeyFeatures/QueueResourceManagement.md index d7919757..12e71953 100644 --- a/docs/KeyFeatures/QueueResourceManagement.md +++ b/docs/KeyFeatures/QueueResourceManagement.md @@ -64,7 +64,7 @@ Queue scheduling in Volcano involves the following core actions: Volcano provides two core queue scheduling plugins: #### capacity plugin -[capacity plugin](/docs/UserGuide/user_guide_how_to_use_capacity_plugin) supports setting queue's deserved resource amount through explicit configuration, as shown in this example: +[capacity plugin](/docs/Plugins/user_guide_how_to_use_capacity_plugin) supports setting queue's deserved resource amount through explicit configuration, as shown in this example: ```yaml apiVersion: scheduling.volcano.sh/v1beta1 diff --git a/docs/UserGuide/user_guide_how_to_use_capacity_plugin.md b/docs/Scheduler/Plugins/capacity.md similarity index 99% rename from docs/UserGuide/user_guide_how_to_use_capacity_plugin.md rename to docs/Scheduler/Plugins/capacity.md index 8843a7de..9bb70dbf 100644 --- a/docs/UserGuide/user_guide_how_to_use_capacity_plugin.md +++ b/docs/Scheduler/Plugins/capacity.md @@ -1,5 +1,5 @@ --- -title: "Capacity Plugin User Guide" +title: Capacity --- diff --git a/docs/UserGuide/user_guide_how_to_use_cdp_plugin.md b/docs/Scheduler/Plugins/cdp.md similarity index 99% rename from docs/UserGuide/user_guide_how_to_use_cdp_plugin.md rename to docs/Scheduler/Plugins/cdp.md index f09a8b64..2e0ea628 100644 --- a/docs/UserGuide/user_guide_how_to_use_cdp_plugin.md +++ b/docs/Scheduler/Plugins/cdp.md @@ -1,5 +1,5 @@ --- -title: "Cooldown Protection Plugin User Guide" +title: CDP --- diff --git a/docs/Scheduler/Plugins/deviceshare.md b/docs/Scheduler/Plugins/deviceshare.md new file mode 100644 index 00000000..645ddd38 --- /dev/null +++ b/docs/Scheduler/Plugins/deviceshare.md @@ -0,0 +1,41 @@ +--- +title: DeviceShare +--- + +## Introduction + +The **DeviceShare Plugin** is an advanced resource scheduling plugin in Volcano that provides a common framework for sharing specialized hardware devices (like GPUs, NPUs, FPGAs) across multiple pods. + +Rather than implementing fragmented logic for each new hardware accelerator, Volcano exposes a unified `Devices` interface. The `deviceshare` plugin leverages this interface to perform robust allocation, node filtering, and resource tracking for shared devices. + +## Mechanism + +The DeviceShare plugin works in conjunction with device-specific implementations. It exposes standard scheduling operations such as `Predicate` (filtering nodes based on available device capacity) and `Allocate`/`Release` (assigning portions of a device to specific pods). + +Currently, the `deviceshare` plugin serves as the underlying engine powering features like: +- **GPU Sharing**: Allowing multiple pods to request fractions of a single physical GPU's memory. +- **vGPU and vNPU**: Virtualizing accelerator slices. +- **GPU Exclusive**: Restricting a pod to exclusively own a GPU to avoid contention. + +## Configuration and Usage + +The `deviceshare` plugin is typically enabled implicitly when you enable device sharing predicates in the Volcano scheduler config map. However, if you are developing custom device sharing logic or need to explicitly declare it, it can be configured in your `volcano-scheduler-configmap`: + +```yaml +actions: "enqueue, allocate, backfill" +tiers: + - plugins: + - name: priority + - name: gang + - name: conformance + - name: deviceshare # Enable the device share framework plugin + - plugins: + - name: overcommit + - name: drf + - name: predicates + - name: proportion + - name: nodeorder + - name: binpack +``` + +> **Note:** For specific guides on how to configure your workloads to request shared GPUs or NPUs, please refer to the dedicated guides for [GPU Sharing](../UserGuide/user_guide_how_to_use_gpu_sharing) and [vNPU](../UserGuide/user_guide_how_to_use_vnpu). diff --git a/docs/UserGuide/user_guide_how_to_use_nodegroup_plugin.md b/docs/Scheduler/Plugins/nodegroup.md similarity index 99% rename from docs/UserGuide/user_guide_how_to_use_nodegroup_plugin.md rename to docs/Scheduler/Plugins/nodegroup.md index 6499f4f5..c9495b4d 100644 --- a/docs/UserGuide/user_guide_how_to_use_nodegroup_plugin.md +++ b/docs/Scheduler/Plugins/nodegroup.md @@ -1,5 +1,5 @@ --- -title: "Nodegroup Plugin User Guide" +title: Nodegroup --- diff --git a/docs/Scheduler/Plugins/overcommit.md b/docs/Scheduler/Plugins/overcommit.md new file mode 100644 index 00000000..aad3d549 --- /dev/null +++ b/docs/Scheduler/Plugins/overcommit.md @@ -0,0 +1,44 @@ +--- +title: Overcommit +--- + +## Introduction + +In typical cluster environments, the scheduler calculates available idle resources strictly based on physical node capacity minus allocated resources. However, when cluster resources are nearly fully utilized, many PodGroups are rejected from entering the scheduling pipeline and are left completely un-enqueued, which might not be desirable for scenarios where you want the scheduler to tolerate a larger backlog of `pending` pods. + +The **Overcommit Plugin** allows the scheduler to artificially inflate the apparent "idle resources" of the cluster by applying an `overcommit-factor`. This permits more jobs to be enqueued and wait in the scheduling pipeline than the physical resources might typically allow. + +## Mechanism + +The Overcommit plugin evaluates whether a job can be enqueued based on the requested `MinResources` of the PodGroup and the expanded idle resources. + +Expanded idle resource is calculated as: +`Idle Resource = (Total Resource * overcommit-factor) - Used Resource` + +If the job's minimal requested resources can fit into this expanded idle resource pool, the job is permitted to be enqueued. + +## Configuration + +To use the Overcommit Plugin, add it to your `volcano-scheduler-configmap` under the `enqueue` tier, and provide an `overcommit-factor`. + +```yaml +actions: "enqueue, allocate, backfill" +tiers: + - plugins: + - name: overcommit # Enable the overcommit plugin + arguments: + overcommit-factor: 1.2 # The overcommit factor. Default is 1.2 + - name: priority + - name: gang + - name: conformance + - plugins: + - name: drf + - name: predicates + - name: proportion + - name: nodeorder + - name: binpack +``` + +### Arguments + +- **`overcommit-factor`**: A float value greater than or equal to `1.0`. For example, `1.2` means the scheduler will pretend the cluster has 20% more total resources when deciding whether to enqueue jobs into the pipeline. If a value less than `1.0` is provided, the plugin will automatically fallback to the default value of `1.2`. diff --git a/docs/Scheduler/Plugins/pdb.md b/docs/Scheduler/Plugins/pdb.md new file mode 100644 index 00000000..f409308c --- /dev/null +++ b/docs/Scheduler/Plugins/pdb.md @@ -0,0 +1,43 @@ +--- +title: PDB +--- + +## Introduction + +When users deploy highly available jobs or applications on Volcano, they often need to limit the number of pod replicas that can be evicted or destroyed simultaneously to avoid downtime. This constraint is managed via Kubernetes **PodDisruptionBudget (PDB)** resources. + +The **PDB Plugin** ensures that Volcano respects user-defined PDB constraints during the scheduling process, specifically during eviction actions like `reclaim`, `preempt`, and `shuffle`. + +## Prerequisites + +- Your Kubernetes version must be 1.21 or later. +- You must have created valid `PodDisruptionBudget` resources for your workloads. + +## Mechanism + +The PDB Plugin registers several functions (`ReclaimableFn`, `PreemptableFn`, and `VictimTasksFn`) under the `reclaim`, `preempt`, and `shuffle` actions. It maintains a cache of PDBs using `v1.PodDisruptionBudgetLister`. + +During eviction scenarios, the plugin filters out tasks whose eviction would violate the configured PDB constraints. It calculates the `DisruptedPods` (pods whose eviction was processed but not yet observed by the PDB controller) and ensures the remaining available replicas satisfy the budget. + +## Configuration + +To enable the PDB Plugin, update the `volcano-scheduler-configmap` to include the `pdb` plugin in your configuration tiers. + +```yaml +actions: "reclaim, preempt, shuffle" +tiers: +- plugins: + - name: pdb # Enable the PDB plugin + - name: priority + - name: gang + - name: conformance +- plugins: + - name: overcommit + - name: drf + - name: predicates + - name: proportion + - name: nodeorder + - name: binpack +``` + +*Note: The PDB plugin will be actively invoked when actions like `reclaim`, `preempt`, or `shuffle` are executed in the scheduler workflow.* diff --git a/docs/Scheduler/Plugins/rescheduling.md b/docs/Scheduler/Plugins/rescheduling.md new file mode 100644 index 00000000..a4c2e541 --- /dev/null +++ b/docs/Scheduler/Plugins/rescheduling.md @@ -0,0 +1,72 @@ +--- +title: Rescheduling +--- + +## Introduction + +Unbalanced resource utilization across a Kubernetes cluster often occurs due to unreasonable scheduling strategies, dynamic changes in job lifecycles, and node status changes (such as added/removed nodes or taint/affinity modifications). + +The **Rescheduling** plugin addresses these issues by actively rebalancing the cluster's resource utilization among nodes. It accomplishes this by evaluating real resource utilization (via Prometheus metrics) instead of merely the requested resource amounts, and it periodically evicts pods based on custom configured rescheduling strategies. + +## Rescheduling Workflow + +1. **Resource Filter**: Filters workloads which are eligible to be evicted based on queues or labels. +2. **Strategy Evaluation**: Evaluates filtered workloads against the configured rescheduling strategies to determine which ones should be evicted. +3. **Eviction**: Evicts the pods attached to the identified workloads. +4. **Periodical Execution**: Executes the above process periodically. + +## Rescheduling Strategies + +Volcano's rescheduling plugin supports multiple strategies to select potential evictees: + +- **LowNodeUtilization**: Targets unbalanced nodes by evicting pods from highly utilized nodes and shuffling them to low utilized nodes based on configured target thresholds. +- **OfflineOnly (OLO)**: Only selects offline workloads (annotated with `preemptable: true`) for rescheduling. +- **LowPriorityFirst (LPF)**: Sorts workloads by priority and evicts lower priority pods first. +- **ShortLifeTimeFirst (SLTF)**: Sorts workloads by running time. Pods with the shortest life time will be rescheduled first to ensure long-running workloads are not interrupted. +- **BigObjectFirst (BOF)**: Selects workloads which request the most dominant resource and reschedules them first to improve system throughput and avoid small workloads starvation. +- **MoreReplicasFirst (MRF)**: Sorts workloads by replica number. Workloads with the most replicas are rescheduled first, making it friendly to `gang` scheduling by considering `minAvailable`. + +## Configuration + +To enable the Rescheduling plugin, you must configure the `volcano-scheduler-configmap` by adding the `shuffle` action and configuring the `rescheduling` plugin within the tiers. + +```yaml +actions: "enqueue, allocate, backfill, shuffle" ## Add 'shuffle' action +tiers: + - plugins: + - name: priority + - name: gang + - name: conformance + - name: rescheduling ## Rescheduling plugin + arguments: + interval: 5m ## Optional. Frequency at which the strategies are called. Default is 5m. + metricsPeriod: 5m ## Optional. The duration of metrics to consider. Default is 5m. + strategies: ## Required. Strategies to execute in order. + - name: offlineOnly + - name: lowPriorityFirst + - name: lowNodeUtilization + params: + thresholds: + "cpu" : 20 ## Threshold below which a node is considered under-utilized + "memory": 20 + "pods": 20 + targetThresholds: + "cpu" : 50 ## Target utilization to reach for balance + "memory": 50 + "pods": 50 + queueSelector: ## Optional. Select workloads in specified queues as potential evictees. All queues by default. + - default + - test-queue + labelSelector: ## Optional. Select workloads with specified labels as potential evictees. All labels by default. + business: offline + team: test + - plugins: + - name: overcommit + - name: drf + - name: predicates + - name: proportion + - name: nodeorder + - name: binpack +``` + +> **Note:** The rescheduling decisions consider metrics collected from Prometheus. Ensure your metrics configuration is correctly set up as it evaluates real node resource utilization instead of requested resource amounts. diff --git a/docs/UserGuide/user_guide_how_to_use_resource_strategy_fit_plugin.md b/docs/Scheduler/Plugins/resource_strategy_fit.md similarity index 99% rename from docs/UserGuide/user_guide_how_to_use_resource_strategy_fit_plugin.md rename to docs/Scheduler/Plugins/resource_strategy_fit.md index ec395a45..0eced3c6 100644 --- a/docs/UserGuide/user_guide_how_to_use_resource_strategy_fit_plugin.md +++ b/docs/Scheduler/Plugins/resource_strategy_fit.md @@ -1,5 +1,5 @@ --- -title: "Resource Strategy Fit Plugin User Guide" +title: Resource Strategy Fit --- diff --git a/docs/Scheduler/Plugins/resourcequota.md b/docs/Scheduler/Plugins/resourcequota.md new file mode 100644 index 00000000..1a9f8411 --- /dev/null +++ b/docs/Scheduler/Plugins/resourcequota.md @@ -0,0 +1,40 @@ +--- +title: ResourceQuota +--- + +## Introduction + +In a multi-tenant cluster, administrators commonly use Kubernetes `ResourceQuota` to limit the total resource consumption per namespace. However, by default, the scheduler may continuously try to enqueue and schedule pod groups even if the namespace's `ResourceQuota` is insufficient, leading to pending jobs and scheduler overhead. + +The **ResourceQuota Plugin** solves this problem by ensuring that a PodGroup is only allowed to enqueue if there is sufficient resource capacity in the namespace to satisfy the minimal resource quota required by the PodGroup. + +## Mechanism + +Volcano implements the ResourceQuota plugin using the `AddJobEnqueueableFn` function. + +1. **Namespace Capacity Cache**: The plugin maintains an `RQStatus` map to cache all resource quotas for each namespace. +2. **Evaluation**: It calculates the `minQuotas`—which defines the minimal resource quota required to run the pod group. +3. **Enqueue Admission**: When evaluating pending PodGroups, the plugin allows them to enqueue *only* if the namespace's Kubernetes `ResourceQuota` has enough available capacity. It also considers PodGroups that have already been permitted in the current scheduling round to prevent race conditions that could exceed the namespace quota. + +## Configuration + +To enable the ResourceQuota Plugin, add it to your `volcano-scheduler-configmap`. + +```yaml +actions: "enqueue, allocate, backfill" +tiers: + - plugins: + - name: priority + - name: gang + - name: conformance + - name: resourcequota # Enable the ResourceQuota plugin + - plugins: + - name: overcommit + - name: drf + - name: predicates + - name: proportion + - name: nodeorder + - name: binpack +``` + +Once enabled, Volcano will respect the Kubernetes native `ResourceQuota` configuration and prevent jobs from enqueuing into the scheduling pipeline if they cannot possibly fit within their namespace quota. diff --git a/docs/UserGuide/user_guide_how_to_use_task_topology_plugin.md b/docs/Scheduler/Plugins/task_topology.md similarity index 97% rename from docs/UserGuide/user_guide_how_to_use_task_topology_plugin.md rename to docs/Scheduler/Plugins/task_topology.md index e253691f..58f02186 100644 --- a/docs/UserGuide/user_guide_how_to_use_task_topology_plugin.md +++ b/docs/Scheduler/Plugins/task_topology.md @@ -1,5 +1,5 @@ --- -title: "Task Topology Plugin User Guide" +title: Task Topology --- diff --git a/docs/Scheduler/Plugins/usage.md b/docs/Scheduler/Plugins/usage.md new file mode 100644 index 00000000..9b7c1cf9 --- /dev/null +++ b/docs/Scheduler/Plugins/usage.md @@ -0,0 +1,103 @@ +--- +title: Usage-based Scheduling +--- + +## Introduction + +Currently, Kubernetes pod scheduling is based on resource requests and node allocatable resources rather than the actual node usage. This can lead to unbalanced resource usage across compute nodes, where pods might be scheduled to nodes with higher actual usage and lower allocation rates. + +The **Usage-based scheduling** plugin allows Volcano to schedule pods based on real-time node usage. This helps to balance the cluster's actual resource usage and avoid scheduling pods on overloaded nodes. + +## Mechanism + +The Usage-based scheduling plugin primarily performs three functions: +1. **Predicate**: Filters nodes whose actual resource usage (e.g., CPU, Memory) is higher than the usage threshold defined by the user. +2. **Prioritize (NodeOrder)**: Prioritizes nodes with lower real-time usage, ensuring that nodes with more idle resources get higher scores. +3. **Preempt**: Pods on nodes with lower usage can preempt pods on nodes with higher usage to balance the cluster load. + +Volcano retrieves the node usage monitoring data from a metrics server (such as Prometheus, Prometheus Adaptor, or Elasticsearch). + +## Configuration + +To enable the Usage-based scheduling plugin, configure the `volcano-scheduler-configmap`. + +```yaml +actions: "enqueue, allocate, backfill" +tiers: + - plugins: + - name: priority + - name: gang + - name: conformance + - name: usage # usage based scheduling plugin + enablePredicate: false # If false, new pod scheduling is not disabled when node load reaches the threshold. If true or empty, new pod scheduling is disabled. + arguments: + usage.weight: 5 + cpu.weight: 1 + memory.weight: 1 + thresholds: + cpu: 80 # The node cannot schedule new pods if its actual CPU load reaches 80%. + mem: 70 # The node cannot schedule new pods if its actual Memory load reaches 70%. + - plugins: + - name: overcommit + - name: drf + - name: predicates + - name: proportion + - name: nodeorder + - name: binpack + +metrics: # metrics server related configuration + type: prometheus # Optional. The metrics source type. Supports "prometheus", "prometheus_adapt", and "elasticsearch". prometheus by default. + address: http://192.168.0.10:9090 # Mandatory. The metrics source address. + interval: 30s # Optional. The scheduler pulls metrics from Prometheus with this interval, 30s by default. +``` + +## Integrating with Metrics Sources + +### 1. Prometheus Adaptor (Custom Metrics API) + +**Recommended approach**. Ensure the Prometheus Adaptor is installed and custom metrics API is available. Add the following rules to Prometheus Adaptor configuration: + +```yaml +rules: + - seriesQuery: '{__name__=~"node_cpu_seconds_total"}' + resources: + overrides: + instance: + resource: node + name: + matches: "node_cpu_seconds_total" + as: "node_cpu_usage_avg" + metricsQuery: avg_over_time((1 - avg (irate(<<.Series>>{mode="idle"}[5m])) by (instance))[10m:30s]) + - seriesQuery: '{__name__=~"node_memory_MemTotal_bytes"}' + resources: + overrides: + instance: + resource: node + name: + matches: "node_memory_MemTotal_bytes" + as: "node_memory_usage_avg" + metricsQuery: avg_over_time(((1-node_memory_MemAvailable_bytes/<<.Series>>))[10m:30s]) +``` + +Set the metrics `type` in the scheduler configmap to `prometheus_adaptor`. + +### 2. Prometheus + +Set the `metrics.type` to `prometheus` and provide the `metrics.address` directly to the Prometheus server as shown in the configuration example. + +### 3. Elasticsearch + +Set the `metrics.type` to `elasticsearch` and provide the following configuration: +```yaml +metrics: + type: elasticsearch + address: http://192.168.0.10:9200 + interval: 30s + tls: + insecureSkipVerify: "false" + elasticsearch: + index: "custom-index-name" # Optional. "metricbeat-*" by default + username: "" + password: "" + hostnameFieldName: "host.hostname" # Optional. "host.hostname" by default +``` diff --git a/docs/Scheduler/_category_.json b/docs/Scheduler/_category_.json index a59dd3a2..78364d08 100644 --- a/docs/Scheduler/_category_.json +++ b/docs/Scheduler/_category_.json @@ -1,4 +1,4 @@ { "label": "Scheduler", - "position": 7 + "position": 5 } \ No newline at end of file diff --git a/docs/UserGuide/_category_.json b/docs/UserGuide/_category_.json new file mode 100644 index 00000000..ee56cffa --- /dev/null +++ b/docs/UserGuide/_category_.json @@ -0,0 +1,4 @@ +{ + "label": "User Guide", + "position": 7 +} diff --git a/docs/UserGuide/user_guide.md b/docs/UserGuide/user_guide.md index 1d8ef16b..b02f8b51 100644 --- a/docs/UserGuide/user_guide.md +++ b/docs/UserGuide/user_guide.md @@ -6,8 +6,8 @@ sidebar_position: 5 This section contains the User Guide for Volcano. * [Ascend vNPU User Guide](./user_guide_how_to_use_vnpu.md) -* [Capacity Plugin User Guide](./user_guide_how_to_use_capacity_plugin.md) -* [Cooldown Protection Plugin User Guide](./user_guide_how_to_use_cdp_plugin.md) +* [Capacity Plugin User Guide](../Scheduler/Plugins/capacity.md) +* [Cooldown Protection Plugin User Guide](../Scheduler/Plugins/cdp.md) * [Extender User Guide](./user_guide_how_to_use_extender.md) * [GPU Number User Guide](./user_guide_how_to_use_gpu_number.md) * [GPU Sharing User Guide](./user_guide_how_to_use_gpu_sharing.md) @@ -17,17 +17,18 @@ This section contains the User Guide for Volcano. * [Dynamic Resource Allocation (DRA) User Guide](./user_guide_how_to_enable_dra.md) * [How to Tune Volcano Performance in Large-Scale Scenarios](./user_guide_how_to_tune_volcano_performance.md) * [How to configure priorityclass for job](./user_guide_how_to_configure_priorityclass_for_job.md) -* [MPI Plugin User Guide](./user_guide_how_to_use_mpi_plugin.md) +* [MPI Plugin User Guide](../Controller/Plugins/mpi.md) * [NUMA Aware User Guide](./user_guide_how_to_use_numa_aware.md) * [Network Topology Aware Scheduling User Guide](./user_guide_how_to_use_network_topology_aware_scheduling.md) -* [Nodegroup Plugin User Guide](./user_guide_how_to_use_nodegroup_plugin.md) -* [Pytorch Plugin User Guide](./user_guide_how_to_use_pytorch_plugin.md) -* [Ray Plugin User Guide](./user_guide_how_to_use_ray_plugin.md) -* [Resource Strategy Fit Plugin User Guide](./user_guide_how_to_use_resource_strategy_fit_plugin.md) -* [Task Topology Plugin User Guide](./user_guide_how_to_use_task_topology_plugin.md) +* [Nodegroup Plugin User Guide](../Scheduler/Plugins/nodegroup.md) +* [Pytorch Plugin User Guide](../Controller/Plugins/pytorch.md) +* [Ray Plugin User Guide](../Controller/Plugins/ray.md) +* [Resource Strategy Fit Plugin User Guide](../Scheduler/Plugins/resource_strategy_fit.md) +* [Task Topology Plugin User Guide](../Scheduler/Plugins/task_topology.md) * [HyperNode Auto Discovery User Guide](./user_guide_how_to_use_hypernode_auto_discovery.md) -* [Volcano Job Plugin -- Env User Guide](./user_guide_how_to_use_env_plugin.md) -* [Volcano Job Plugin -- SSH User Guide](./user_guide_how_to_use_ssh_plugin.md) -* [Volcano Job Plugin -- SVC User Guide](./user_guide_how_to_use_svc_plugin.md) +* [Volcano Job Plugin -- Env User Guide](../Controller/Plugins/env.md) +* [Volcano Job Plugin -- SSH User Guide](../Controller/Plugins/ssh.md) +* [Volcano Job Plugin -- SVC User Guide](../Controller/Plugins/svc.md) * [Volcano vGPU User Guide](./user_guide_how_to_use_volcano_vgpu.md) * [Scheduling Gates Queue Admission User Guide](./user_guide_how_to_use_scheduling_gates_queue_admission.md) + diff --git a/docusaurus.config.js b/docusaurus.config.js index c6fb4fef..3325431f 100644 --- a/docusaurus.config.js +++ b/docusaurus.config.js @@ -5,7 +5,7 @@ import { themes as prismThemes } from "prism-react-renderer"; const config = { title: "Volcano", tagline: "Cloud native batch scheduling system", - + favicon: "img/favicons/favicon.ico", future: { v4: true, diff --git a/i18n/zh-Hans/docusaurus-plugin-content-blog/Volcano-1.10.0-release.md b/i18n/zh-Hans/docusaurus-plugin-content-blog/Volcano-1.10.0-release.md index 5da3c46f..530c5895 100644 --- a/i18n/zh-Hans/docusaurus-plugin-content-blog/Volcano-1.10.0-release.md +++ b/i18n/zh-Hans/docusaurus-plugin-content-blog/Volcano-1.10.0-release.md @@ -65,7 +65,7 @@ Volcano在v1.9版本发布了弹性队列容量capacity调度功能,用户可 弹性队列容量`capacity`调度的设计文档请参考:[Capacity scheduling Design](https://github.com/volcano-sh/volcano/blob/master/docs/design/capacity-scheduling.md) -使用指导请参考:[Capacity Plugin User Guide](/docs/UserGuide/user_guide_how_to_use_capacity_plugin). +使用指导请参考:[Capacity Plugin User Guide](/docs/Plugins/user_guide_how_to_use_capacity_plugin). 为队列配置每一维度deserved使用样例: @@ -89,7 +89,7 @@ spec: **注意:** -`capacity`在v1.10.0版本中作为了默认的队列管理插件,`capacity`与`proportion`插件互相冲突,当升级到v1.10.0后,你需要再设置队列的`deserved`字段,以保证队列功能正常工作,具体的使用说明请参考:[Capacity Plugin User Guide](/docs/UserGuide/user_guide_how_to_use_capacity_plugin). +`capacity`在v1.10.0版本中作为了默认的队列管理插件,`capacity`与`proportion`插件互相冲突,当升级到v1.10.0后,你需要再设置队列的`deserved`字段,以保证队列功能正常工作,具体的使用说明请参考:[Capacity Plugin User Guide](/docs/Plugins/user_guide_how_to_use_capacity_plugin). `capacity`插件根据用户指定的队列`deserved`值来划分集群资源,而`proportion`插件则根据队列权重动态划分集群资源,用户可以根据实际场景选择使用`capacity`或者`proportion`插件进行队列管理。proportion插件的介绍请参考:[proportion plugin](/docs/Scheduler/Plugins/proportion). diff --git a/i18n/zh-Hans/docusaurus-plugin-content-blog/Volcano-1.13.0-release.md b/i18n/zh-Hans/docusaurus-plugin-content-blog/Volcano-1.13.0-release.md index 04838157..87c6409d 100644 --- a/i18n/zh-Hans/docusaurus-plugin-content-blog/Volcano-1.13.0-release.md +++ b/i18n/zh-Hans/docusaurus-plugin-content-blog/Volcano-1.13.0-release.md @@ -141,7 +141,7 @@ labels: 设计文档:[Ray Framework Plugin Design Doc](https://github.com/volcano-sh/volcano/blob/master/docs/design/distributed-framework-plugins.md)。 -使用文档:[Ray Plugin User Guide](/docs/UserGuide/user_guide_how_to_use_ray_plugin)。 +使用文档:[Ray Plugin User Guide](/docs/Plugins/user_guide_how_to_use_ray_plugin)。 ## 新增HCCL插件支持 @@ -188,7 +188,7 @@ tiers: NodeGroup设计文档:[NodeGroup Design.](https://github.com/volcano-sh/volcano/blob/master/docs/design/node-group.md) -NodeGroup使用文档:[NodeGroup User Guide.](/docs/UserGuide/user_guide_how_to_use_nodegroup_plugin) +NodeGroup使用文档:[NodeGroup User Guide.](/docs/Plugins/user_guide_how_to_use_nodegroup_plugin) ## 引入ResourceStrategyFit插件 @@ -273,7 +273,7 @@ tiers: 设计文档:[ResourceStrategyFit Design](https://github.com/volcano-sh/volcano/blob/master/docs/design/resource-strategy-fit-scheduling.md) -使用文档:[ResourceStrategyFit User Guide](/docs/UserGuide/user_guide_how_to_use_resource_strategy_fit_plugin) +使用文档:[ResourceStrategyFit User Guide](/docs/Plugins/user_guide_how_to_use_resource_strategy_fit_plugin) ## 混部能力与操作系统解耦 diff --git a/i18n/zh-Hans/docusaurus-plugin-content-blog/Volcano-1.7.0-release-en.md b/i18n/zh-Hans/docusaurus-plugin-content-blog/Volcano-1.7.0-release-en.md index 1eab4eef..3240a2e3 100644 --- a/i18n/zh-Hans/docusaurus-plugin-content-blog/Volcano-1.7.0-release-en.md +++ b/i18n/zh-Hans/docusaurus-plugin-content-blog/Volcano-1.7.0-release-en.md @@ -32,7 +32,7 @@ Volcano社区当前提供了TensorFlow、MPI和Pytorch等Job强化功能插件 此外,Volcano还提供了Job插件的扩展开发框架,满足高阶用户针对复杂场景定制Job插件的需求。 设计文档:[Pytorch-plugin](https://github.com/volcano-sh/volcano/blob/master/docs/design/distributed-framework-plugins.md#pytorch-plugin)
-用户手册:[PyTorch 插件用户指南](/docs/UserGuide/user_guide_how_to_use_pytorch_plugin)
+用户手册:[PyTorch 插件用户指南](/docs/Plugins/user_guide_how_to_use_pytorch_plugin)
Issue:[#2292](https://github.com/volcano-sh/volcano/issues/2292)
#### 2. Ray on Volcano diff --git a/i18n/zh-Hans/docusaurus-plugin-content-blog/Volcano-1.9.0-release.md b/i18n/zh-Hans/docusaurus-plugin-content-blog/Volcano-1.9.0-release.md index 10d0c9a7..d45e4d26 100644 --- a/i18n/zh-Hans/docusaurus-plugin-content-blog/Volcano-1.9.0-release.md +++ b/i18n/zh-Hans/docusaurus-plugin-content-blog/Volcano-1.9.0-release.md @@ -59,7 +59,7 @@ spec: nvidia.com/v100: 80 ``` -队列弹性容量调度的完整使用例子,请参考:[How to use capacity plugin](/docs/UserGuide/user_guide_how_to_use_capacity_plugin). +队列弹性容量调度的完整使用例子,请参考:[How to use capacity plugin](/docs/Plugins/user_guide_how_to_use_capacity_plugin). 关于弹性队列容量设计文档,请参考[Capacity scheduling Design](https://github.com/volcano-sh/volcano/blob/master/docs/design/capacity-scheduling.md). @@ -94,7 +94,7 @@ metadata: - ``` -该功能对应的调度插件名为nodegroup,完整使用例子请参考:[How to use nodegroup plugin](/docs/UserGuide/user_guide_how_to_use_nodegroup_plugin). +该功能对应的调度插件名为nodegroup,完整使用例子请参考:[How to use nodegroup plugin](/docs/Plugins/user_guide_how_to_use_nodegroup_plugin). 详细设计文档请参考:[The nodegroup design](https://github.com/volcano-sh/volcano/blob/master/docs/design/node-group.md). diff --git a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Concepts/Queue.md b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Concepts/Queue.md index 13831c77..c06fdf5c 100644 --- a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Concepts/Queue.md +++ b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Concepts/Queue.md @@ -52,7 +52,7 @@ deserved表示该queue内所有podgroup的资源应得量,若该queue已分配 **注意**: -1. 该字段只有在capacity插件开启时可按需配置,需要小于等于capability值,proportion插件使用weight来自动计算queue的deserved值。capacity插件使用文档详见:[capacity plugin User Guide](/docs/UserGuide/user_guide_how_to_use_capacity_plugin) +1. 该字段只有在capacity插件开启时可按需配置,需要小于等于capability值,proportion插件使用weight来自动计算queue的deserved值。capacity插件使用文档详见:[capacity plugin User Guide](/docs/Plugins/user_guide_how_to_use_capacity_plugin) > 2. 若queue中已分配的资源量超过了自己配置的deserved值,则queue不可再回收其他队列中的资源 diff --git a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Ecosystem/RayOnVolcano.md b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Ecosystem/RayOnVolcano.md index daf7fe82..8196e9d4 100644 --- a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Ecosystem/RayOnVolcano.md +++ b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Ecosystem/RayOnVolcano.md @@ -200,4 +200,4 @@ ray job submit --address http://localhost:8265 -- python -c "import ray; ray.ini ### 了解更多 - 有关KubeRay集成的详细信息,请访问[KubeRay Volcano调度器文档](https://docs.ray.io/en/latest/cluster/kubernetes/k8s-ecosystem/volcano.html#kuberay-integration-with-volcano) -- 有关Volcano Job Ray插件的详细信息,请参阅[Volcano Ray插件指南](/docs/UserGuide/user_guide_how_to_use_ray_plugin) \ No newline at end of file +- 有关Volcano Job Ray插件的详细信息,请参阅[Volcano Ray插件指南](/docs/Plugins/user_guide_how_to_use_ray_plugin) \ No newline at end of file diff --git a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/KeyFeatures/QueueResourceManagement.md b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/KeyFeatures/QueueResourceManagement.md index b16fb496..04ad386f 100644 --- a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/KeyFeatures/QueueResourceManagement.md +++ b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/KeyFeatures/QueueResourceManagement.md @@ -64,7 +64,7 @@ Volcano中的队列调度涉及以下核心action: Volcano提供了两个核心的队列调度插件: #### capacity插件 -[capacity插件](/docs/UserGuide/user_guide_how_to_use_capacity_plugin)支持通过显式配置deserverd值来设置队列资源应得量,如以下队列配置示例: +[capacity插件](/docs/Plugins/user_guide_how_to_use_capacity_plugin)支持通过显式配置deserverd值来设置队列资源应得量,如以下队列配置示例: ```yaml apiVersion: scheduling.volcano.sh/v1beta1 diff --git a/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v1.10.0/Concepts/Queue.md b/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v1.10.0/Concepts/Queue.md index 13831c77..c06fdf5c 100644 --- a/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v1.10.0/Concepts/Queue.md +++ b/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v1.10.0/Concepts/Queue.md @@ -52,7 +52,7 @@ deserved表示该queue内所有podgroup的资源应得量,若该queue已分配 **注意**: -1. 该字段只有在capacity插件开启时可按需配置,需要小于等于capability值,proportion插件使用weight来自动计算queue的deserved值。capacity插件使用文档详见:[capacity plugin User Guide](/docs/UserGuide/user_guide_how_to_use_capacity_plugin) +1. 该字段只有在capacity插件开启时可按需配置,需要小于等于capability值,proportion插件使用weight来自动计算queue的deserved值。capacity插件使用文档详见:[capacity plugin User Guide](/docs/Plugins/user_guide_how_to_use_capacity_plugin) > 2. 若queue中已分配的资源量超过了自己配置的deserved值,则queue不可再回收其他队列中的资源 diff --git a/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v1.10.0/Ecosystem/RayOnVolcano.md b/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v1.10.0/Ecosystem/RayOnVolcano.md index daf7fe82..8196e9d4 100644 --- a/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v1.10.0/Ecosystem/RayOnVolcano.md +++ b/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v1.10.0/Ecosystem/RayOnVolcano.md @@ -200,4 +200,4 @@ ray job submit --address http://localhost:8265 -- python -c "import ray; ray.ini ### 了解更多 - 有关KubeRay集成的详细信息,请访问[KubeRay Volcano调度器文档](https://docs.ray.io/en/latest/cluster/kubernetes/k8s-ecosystem/volcano.html#kuberay-integration-with-volcano) -- 有关Volcano Job Ray插件的详细信息,请参阅[Volcano Ray插件指南](/docs/UserGuide/user_guide_how_to_use_ray_plugin) \ No newline at end of file +- 有关Volcano Job Ray插件的详细信息,请参阅[Volcano Ray插件指南](/docs/Plugins/user_guide_how_to_use_ray_plugin) \ No newline at end of file diff --git a/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v1.11.0/Concepts/Queue.md b/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v1.11.0/Concepts/Queue.md index 13831c77..c06fdf5c 100644 --- a/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v1.11.0/Concepts/Queue.md +++ b/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v1.11.0/Concepts/Queue.md @@ -52,7 +52,7 @@ deserved表示该queue内所有podgroup的资源应得量,若该queue已分配 **注意**: -1. 该字段只有在capacity插件开启时可按需配置,需要小于等于capability值,proportion插件使用weight来自动计算queue的deserved值。capacity插件使用文档详见:[capacity plugin User Guide](/docs/UserGuide/user_guide_how_to_use_capacity_plugin) +1. 该字段只有在capacity插件开启时可按需配置,需要小于等于capability值,proportion插件使用weight来自动计算queue的deserved值。capacity插件使用文档详见:[capacity plugin User Guide](/docs/Plugins/user_guide_how_to_use_capacity_plugin) > 2. 若queue中已分配的资源量超过了自己配置的deserved值,则queue不可再回收其他队列中的资源 diff --git a/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v1.11.0/Ecosystem/RayOnVolcano.md b/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v1.11.0/Ecosystem/RayOnVolcano.md index daf7fe82..8196e9d4 100644 --- a/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v1.11.0/Ecosystem/RayOnVolcano.md +++ b/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v1.11.0/Ecosystem/RayOnVolcano.md @@ -200,4 +200,4 @@ ray job submit --address http://localhost:8265 -- python -c "import ray; ray.ini ### 了解更多 - 有关KubeRay集成的详细信息,请访问[KubeRay Volcano调度器文档](https://docs.ray.io/en/latest/cluster/kubernetes/k8s-ecosystem/volcano.html#kuberay-integration-with-volcano) -- 有关Volcano Job Ray插件的详细信息,请参阅[Volcano Ray插件指南](/docs/UserGuide/user_guide_how_to_use_ray_plugin) \ No newline at end of file +- 有关Volcano Job Ray插件的详细信息,请参阅[Volcano Ray插件指南](/docs/Plugins/user_guide_how_to_use_ray_plugin) \ No newline at end of file diff --git a/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v1.11.0/KeyFeatures/QueueResourceManagement.md b/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v1.11.0/KeyFeatures/QueueResourceManagement.md index b16fb496..04ad386f 100644 --- a/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v1.11.0/KeyFeatures/QueueResourceManagement.md +++ b/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v1.11.0/KeyFeatures/QueueResourceManagement.md @@ -64,7 +64,7 @@ Volcano中的队列调度涉及以下核心action: Volcano提供了两个核心的队列调度插件: #### capacity插件 -[capacity插件](/docs/UserGuide/user_guide_how_to_use_capacity_plugin)支持通过显式配置deserverd值来设置队列资源应得量,如以下队列配置示例: +[capacity插件](/docs/Plugins/user_guide_how_to_use_capacity_plugin)支持通过显式配置deserverd值来设置队列资源应得量,如以下队列配置示例: ```yaml apiVersion: scheduling.volcano.sh/v1beta1 diff --git a/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v1.12.0/Concepts/Queue.md b/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v1.12.0/Concepts/Queue.md index 13831c77..c06fdf5c 100644 --- a/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v1.12.0/Concepts/Queue.md +++ b/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v1.12.0/Concepts/Queue.md @@ -52,7 +52,7 @@ deserved表示该queue内所有podgroup的资源应得量,若该queue已分配 **注意**: -1. 该字段只有在capacity插件开启时可按需配置,需要小于等于capability值,proportion插件使用weight来自动计算queue的deserved值。capacity插件使用文档详见:[capacity plugin User Guide](/docs/UserGuide/user_guide_how_to_use_capacity_plugin) +1. 该字段只有在capacity插件开启时可按需配置,需要小于等于capability值,proportion插件使用weight来自动计算queue的deserved值。capacity插件使用文档详见:[capacity plugin User Guide](/docs/Plugins/user_guide_how_to_use_capacity_plugin) > 2. 若queue中已分配的资源量超过了自己配置的deserved值,则queue不可再回收其他队列中的资源 diff --git a/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v1.12.0/Ecosystem/RayOnVolcano.md b/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v1.12.0/Ecosystem/RayOnVolcano.md index daf7fe82..8196e9d4 100644 --- a/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v1.12.0/Ecosystem/RayOnVolcano.md +++ b/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v1.12.0/Ecosystem/RayOnVolcano.md @@ -200,4 +200,4 @@ ray job submit --address http://localhost:8265 -- python -c "import ray; ray.ini ### 了解更多 - 有关KubeRay集成的详细信息,请访问[KubeRay Volcano调度器文档](https://docs.ray.io/en/latest/cluster/kubernetes/k8s-ecosystem/volcano.html#kuberay-integration-with-volcano) -- 有关Volcano Job Ray插件的详细信息,请参阅[Volcano Ray插件指南](/docs/UserGuide/user_guide_how_to_use_ray_plugin) \ No newline at end of file +- 有关Volcano Job Ray插件的详细信息,请参阅[Volcano Ray插件指南](/docs/Plugins/user_guide_how_to_use_ray_plugin) \ No newline at end of file diff --git a/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v1.12.0/KeyFeatures/QueueResourceManagement.md b/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v1.12.0/KeyFeatures/QueueResourceManagement.md index b16fb496..04ad386f 100644 --- a/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v1.12.0/KeyFeatures/QueueResourceManagement.md +++ b/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v1.12.0/KeyFeatures/QueueResourceManagement.md @@ -64,7 +64,7 @@ Volcano中的队列调度涉及以下核心action: Volcano提供了两个核心的队列调度插件: #### capacity插件 -[capacity插件](/docs/UserGuide/user_guide_how_to_use_capacity_plugin)支持通过显式配置deserverd值来设置队列资源应得量,如以下队列配置示例: +[capacity插件](/docs/Plugins/user_guide_how_to_use_capacity_plugin)支持通过显式配置deserverd值来设置队列资源应得量,如以下队列配置示例: ```yaml apiVersion: scheduling.volcano.sh/v1beta1 diff --git a/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v1.7.0/Concepts/Queue.md b/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v1.7.0/Concepts/Queue.md index 13831c77..c06fdf5c 100644 --- a/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v1.7.0/Concepts/Queue.md +++ b/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v1.7.0/Concepts/Queue.md @@ -52,7 +52,7 @@ deserved表示该queue内所有podgroup的资源应得量,若该queue已分配 **注意**: -1. 该字段只有在capacity插件开启时可按需配置,需要小于等于capability值,proportion插件使用weight来自动计算queue的deserved值。capacity插件使用文档详见:[capacity plugin User Guide](/docs/UserGuide/user_guide_how_to_use_capacity_plugin) +1. 该字段只有在capacity插件开启时可按需配置,需要小于等于capability值,proportion插件使用weight来自动计算queue的deserved值。capacity插件使用文档详见:[capacity plugin User Guide](/docs/Plugins/user_guide_how_to_use_capacity_plugin) > 2. 若queue中已分配的资源量超过了自己配置的deserved值,则queue不可再回收其他队列中的资源 diff --git a/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v1.7.0/Ecosystem/RayOnVolcano.md b/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v1.7.0/Ecosystem/RayOnVolcano.md index daf7fe82..8196e9d4 100644 --- a/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v1.7.0/Ecosystem/RayOnVolcano.md +++ b/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v1.7.0/Ecosystem/RayOnVolcano.md @@ -200,4 +200,4 @@ ray job submit --address http://localhost:8265 -- python -c "import ray; ray.ini ### 了解更多 - 有关KubeRay集成的详细信息,请访问[KubeRay Volcano调度器文档](https://docs.ray.io/en/latest/cluster/kubernetes/k8s-ecosystem/volcano.html#kuberay-integration-with-volcano) -- 有关Volcano Job Ray插件的详细信息,请参阅[Volcano Ray插件指南](/docs/UserGuide/user_guide_how_to_use_ray_plugin) \ No newline at end of file +- 有关Volcano Job Ray插件的详细信息,请参阅[Volcano Ray插件指南](/docs/Plugins/user_guide_how_to_use_ray_plugin) \ No newline at end of file diff --git a/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v1.8.2/Concepts/Queue.md b/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v1.8.2/Concepts/Queue.md index 13831c77..c06fdf5c 100644 --- a/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v1.8.2/Concepts/Queue.md +++ b/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v1.8.2/Concepts/Queue.md @@ -52,7 +52,7 @@ deserved表示该queue内所有podgroup的资源应得量,若该queue已分配 **注意**: -1. 该字段只有在capacity插件开启时可按需配置,需要小于等于capability值,proportion插件使用weight来自动计算queue的deserved值。capacity插件使用文档详见:[capacity plugin User Guide](/docs/UserGuide/user_guide_how_to_use_capacity_plugin) +1. 该字段只有在capacity插件开启时可按需配置,需要小于等于capability值,proportion插件使用weight来自动计算queue的deserved值。capacity插件使用文档详见:[capacity plugin User Guide](/docs/Plugins/user_guide_how_to_use_capacity_plugin) > 2. 若queue中已分配的资源量超过了自己配置的deserved值,则queue不可再回收其他队列中的资源 diff --git a/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v1.8.2/Ecosystem/RayOnVolcano.md b/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v1.8.2/Ecosystem/RayOnVolcano.md index daf7fe82..8196e9d4 100644 --- a/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v1.8.2/Ecosystem/RayOnVolcano.md +++ b/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v1.8.2/Ecosystem/RayOnVolcano.md @@ -200,4 +200,4 @@ ray job submit --address http://localhost:8265 -- python -c "import ray; ray.ini ### 了解更多 - 有关KubeRay集成的详细信息,请访问[KubeRay Volcano调度器文档](https://docs.ray.io/en/latest/cluster/kubernetes/k8s-ecosystem/volcano.html#kuberay-integration-with-volcano) -- 有关Volcano Job Ray插件的详细信息,请参阅[Volcano Ray插件指南](/docs/UserGuide/user_guide_how_to_use_ray_plugin) \ No newline at end of file +- 有关Volcano Job Ray插件的详细信息,请参阅[Volcano Ray插件指南](/docs/Plugins/user_guide_how_to_use_ray_plugin) \ No newline at end of file diff --git a/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v1.9.0/Concepts/Queue.md b/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v1.9.0/Concepts/Queue.md index 13831c77..c06fdf5c 100644 --- a/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v1.9.0/Concepts/Queue.md +++ b/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v1.9.0/Concepts/Queue.md @@ -52,7 +52,7 @@ deserved表示该queue内所有podgroup的资源应得量,若该queue已分配 **注意**: -1. 该字段只有在capacity插件开启时可按需配置,需要小于等于capability值,proportion插件使用weight来自动计算queue的deserved值。capacity插件使用文档详见:[capacity plugin User Guide](/docs/UserGuide/user_guide_how_to_use_capacity_plugin) +1. 该字段只有在capacity插件开启时可按需配置,需要小于等于capability值,proportion插件使用weight来自动计算queue的deserved值。capacity插件使用文档详见:[capacity plugin User Guide](/docs/Plugins/user_guide_how_to_use_capacity_plugin) > 2. 若queue中已分配的资源量超过了自己配置的deserved值,则queue不可再回收其他队列中的资源 diff --git a/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v1.9.0/Ecosystem/RayOnVolcano.md b/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v1.9.0/Ecosystem/RayOnVolcano.md index daf7fe82..8196e9d4 100644 --- a/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v1.9.0/Ecosystem/RayOnVolcano.md +++ b/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v1.9.0/Ecosystem/RayOnVolcano.md @@ -200,4 +200,4 @@ ray job submit --address http://localhost:8265 -- python -c "import ray; ray.ini ### 了解更多 - 有关KubeRay集成的详细信息,请访问[KubeRay Volcano调度器文档](https://docs.ray.io/en/latest/cluster/kubernetes/k8s-ecosystem/volcano.html#kuberay-integration-with-volcano) -- 有关Volcano Job Ray插件的详细信息,请参阅[Volcano Ray插件指南](/docs/UserGuide/user_guide_how_to_use_ray_plugin) \ No newline at end of file +- 有关Volcano Job Ray插件的详细信息,请参阅[Volcano Ray插件指南](/docs/Plugins/user_guide_how_to_use_ray_plugin) \ No newline at end of file diff --git a/static/img/doc/descheduler-CN.svg b/static/img/doc/descheduler-CN.svg index f433cfa2..7684d3a6 100644 --- a/static/img/doc/descheduler-CN.svg +++ b/static/img/doc/descheduler-CN.svg @@ -1,4 +1 @@ - - -
空闲节点
热点节点
正常节点
热点水位80%
空闲水位30%
资源利用率
\ No newline at end of file diff --git a/static/img/doc/descheduler_EN.svg b/static/img/doc/descheduler_EN.svg index bcc4d388..56aadf0a 100644 --- a/static/img/doc/descheduler_EN.svg +++ b/static/img/doc/descheduler_EN.svg @@ -1,4 +1 @@ - - -
Under-utilized
 node
Over-utilized 
node
Appropriately utilized
node
high threshold 80%
low threshold 30%
resource utilization
\ No newline at end of file diff --git a/static/img/doc/volcano_global_design.svg b/static/img/doc/volcano_global_design.svg index 83bd2baf..7b8a91ae 100644 --- a/static/img/doc/volcano_global_design.svg +++ b/static/img/doc/volcano_global_design.svg @@ -1,4 +1 @@ - - -
Create ResourceBinding
Volcano global
Set ResourceBinding.
Suspension.Scheduling=false when admit success
Controller
Find the Queue related to ResourceBinding
Sort ResourceBidning by Queue prioriry
Queue capacity management
CRDs
  • Vc Job
  • Queue
Webhook
Set ResourceBinding.
Suspension.Scheduling=true
User
Submit Deployment
Submit Volcano Job
Submit Pod(AI Traing)
Submit PropogationPolicy
Karmada
APIServer
Scheduler
Schedule when ResourceBinding.
Suspension.Scheduling=false
icon-color
Cluster A
Other Clusters
Cluster B
\ No newline at end of file diff --git a/versioned_docs/version-v1.10.0/Concepts/Queue.md b/versioned_docs/version-v1.10.0/Concepts/Queue.md index 72a62e7e..501c3ed0 100644 --- a/versioned_docs/version-v1.10.0/Concepts/Queue.md +++ b/versioned_docs/version-v1.10.0/Concepts/Queue.md @@ -51,7 +51,7 @@ deserved indicates the expected resource amount for all PodGroups in this queue. > **Note**: > -> 1. This field can only be configured when the capacity plugin is enabled, and must be less than or equal to the capability value. The proportion plugin uses weight to automatically calculate the queue's deserved value. For more information on using the capacity plugin, see: [capacity plugin user guide](/docs/UserGuide/user_guide_how_to_use_capacity_plugin) +> 1. This field can only be configured when the capacity plugin is enabled, and must be less than or equal to the capability value. The proportion plugin uses weight to automatically calculate the queue's deserved value. For more information on using the capacity plugin, see: [capacity plugin user guide](/docs/Plugins/user_guide_how_to_use_capacity_plugin) > 2. If the allocated resources of a queue exceed its configured deserved value, the queue cannot reclaim resources from other queues * weight, *optional* diff --git a/versioned_docs/version-v1.10.0/Ecosystem/RayOnVolcano.md b/versioned_docs/version-v1.10.0/Ecosystem/RayOnVolcano.md index 034c86c2..a3e8fc3b 100644 --- a/versioned_docs/version-v1.10.0/Ecosystem/RayOnVolcano.md +++ b/versioned_docs/version-v1.10.0/Ecosystem/RayOnVolcano.md @@ -203,4 +203,4 @@ ray job submit --address http://localhost:8265 -- python -c "import ray; ray.ini ### Learn More - For KubeRay integration details, visit the [KubeRay Volcano Scheduler Documentation](https://docs.ray.io/en/latest/cluster/kubernetes/k8s-ecosystem/volcano.html#kuberay-integration-with-volcano) -- For Volcano Job Ray plugin details, see the [Volcano Ray Plugin Guide](/docs/UserGuide/user_guide_how_to_use_ray_plugin) \ No newline at end of file +- For Volcano Job Ray plugin details, see the [Volcano Ray Plugin Guide](/docs/Plugins/user_guide_how_to_use_ray_plugin) \ No newline at end of file diff --git a/versioned_docs/version-v1.10.0/Scheduler/Plugins.md b/versioned_docs/version-v1.10.0/Scheduler/Plugins.md index f8e84469..461da705 100644 --- a/versioned_docs/version-v1.10.0/Scheduler/Plugins.md +++ b/versioned_docs/version-v1.10.0/Scheduler/Plugins.md @@ -143,3 +143,51 @@ The Numa-Aware Plugin aims to address these limitations. #### Scenario Common scenarios for NUMA-Aware are computation-intensive jobs that are sensitive to CPU parameters, scheduling delays. Such as scientific calculation, video decoding, animation rendering, big data offline processing and other specific scenes. + +### Usage + +#### Overview +The Usage-based scheduling plugin evaluates actual real-time resource utilization (e.g., CPU, Memory) collected from monitoring systems like Prometheus instead of only depending on requested resources. It prevents new pods from being scheduled onto overloaded nodes and actively balances the cluster workload. + +#### Scenario +Useful in clusters experiencing unbalanced node resource consumption where some nodes are overburdened while others remain idle despite having similar requested resources. + +### Rescheduling + +#### Overview +The Rescheduling plugin periodically rebalances the cluster by evaluating real resource utilization. It actively evicts pods from heavily utilized nodes and shuffles them to under-utilized nodes based on configured target thresholds and strategies like LowNodeUtilization or OfflineOnly. + +#### Scenario +Perfect for long-running clusters where dynamic workload lifecycles lead to fragmentation and resource imbalances over time. + +### ResourceQuota + +#### Overview +The ResourceQuota plugin interfaces with Kubernetes' native `ResourceQuota` objects to ensure that a PodGroup is only enqueued if there is sufficient resource capacity in its namespace. + +#### Scenario +Highly beneficial in multi-tenant environments to prevent jobs from entering the scheduling pipeline and clogging the queue when they have no chance of running due to namespace quota restrictions. + +### Pod Disruption Budget (PDB) + +#### Overview +The PDB Plugin ensures that Volcano respects user-defined Kubernetes PodDisruptionBudget (PDB) constraints during any eviction-based scheduling actions, such as `reclaim`, `preempt`, and `shuffle`. + +#### Scenario +Crucial for highly available workloads where simultaneous eviction of multiple replicas could result in service disruption. + +### Overcommit + +#### Overview +The Overcommit Plugin allows the scheduler to artificially inflate the apparent "idle resources" of the cluster by a configurable factor (e.g., 1.2), permitting more jobs to enqueue in the scheduling pipeline than the physical capacity. + +#### Scenario +Useful when administrators want the scheduler to tolerate a larger backlog of `pending` pods waiting for resources without rejecting them outright during peak loads. + +### DeviceShare + +#### Overview +The DeviceShare Plugin provides a unified framework for sharing specialized hardware devices such as GPUs, NPUs, and FPGAs across multiple pods. + +#### Scenario +Ideal for advanced AI/ML environments needing granular hardware sharing, like vGPU, vNPU, and GPU exclusive deployments. diff --git a/versioned_docs/version-v1.11.0/Concepts/Queue.md b/versioned_docs/version-v1.11.0/Concepts/Queue.md index 72a62e7e..501c3ed0 100644 --- a/versioned_docs/version-v1.11.0/Concepts/Queue.md +++ b/versioned_docs/version-v1.11.0/Concepts/Queue.md @@ -51,7 +51,7 @@ deserved indicates the expected resource amount for all PodGroups in this queue. > **Note**: > -> 1. This field can only be configured when the capacity plugin is enabled, and must be less than or equal to the capability value. The proportion plugin uses weight to automatically calculate the queue's deserved value. For more information on using the capacity plugin, see: [capacity plugin user guide](/docs/UserGuide/user_guide_how_to_use_capacity_plugin) +> 1. This field can only be configured when the capacity plugin is enabled, and must be less than or equal to the capability value. The proportion plugin uses weight to automatically calculate the queue's deserved value. For more information on using the capacity plugin, see: [capacity plugin user guide](/docs/Plugins/user_guide_how_to_use_capacity_plugin) > 2. If the allocated resources of a queue exceed its configured deserved value, the queue cannot reclaim resources from other queues * weight, *optional* diff --git a/versioned_docs/version-v1.11.0/Ecosystem/RayOnVolcano.md b/versioned_docs/version-v1.11.0/Ecosystem/RayOnVolcano.md index 034c86c2..a3e8fc3b 100644 --- a/versioned_docs/version-v1.11.0/Ecosystem/RayOnVolcano.md +++ b/versioned_docs/version-v1.11.0/Ecosystem/RayOnVolcano.md @@ -203,4 +203,4 @@ ray job submit --address http://localhost:8265 -- python -c "import ray; ray.ini ### Learn More - For KubeRay integration details, visit the [KubeRay Volcano Scheduler Documentation](https://docs.ray.io/en/latest/cluster/kubernetes/k8s-ecosystem/volcano.html#kuberay-integration-with-volcano) -- For Volcano Job Ray plugin details, see the [Volcano Ray Plugin Guide](/docs/UserGuide/user_guide_how_to_use_ray_plugin) \ No newline at end of file +- For Volcano Job Ray plugin details, see the [Volcano Ray Plugin Guide](/docs/Plugins/user_guide_how_to_use_ray_plugin) \ No newline at end of file diff --git a/versioned_docs/version-v1.11.0/KeyFeatures/QueueResourceManagement.md b/versioned_docs/version-v1.11.0/KeyFeatures/QueueResourceManagement.md index a0918d2b..51601bf8 100644 --- a/versioned_docs/version-v1.11.0/KeyFeatures/QueueResourceManagement.md +++ b/versioned_docs/version-v1.11.0/KeyFeatures/QueueResourceManagement.md @@ -50,7 +50,7 @@ deserved indicates the expected resource amount for all PodGroups in this queue. > **Note**: > -> 1. This field can only be configured when the capacity plugin is enabled, and must be less than or equal to the capability value. The proportion plugin uses weight to automatically calculate the queue's deserved value. For more information on using the capacity plugin, see: [capacity plugin user guide](/docs/UserGuide/user_guide_how_to_use_capacity_plugin) +> 1. This field can only be configured when the capacity plugin is enabled, and must be less than or equal to the capability value. The proportion plugin uses weight to automatically calculate the queue's deserved value. For more information on using the capacity plugin, see: [capacity plugin user guide](/docs/Plugins/user_guide_how_to_use_capacity_plugin) > 2. If the allocated resources of a queue exceed its configured deserved value, the queue cannot reclaim resources from other queues * weight, *optional* diff --git a/versioned_docs/version-v1.11.0/Scheduler/Plugins.md b/versioned_docs/version-v1.11.0/Scheduler/Plugins.md index f8e84469..71bed0f2 100644 --- a/versioned_docs/version-v1.11.0/Scheduler/Plugins.md +++ b/versioned_docs/version-v1.11.0/Scheduler/Plugins.md @@ -143,3 +143,50 @@ The Numa-Aware Plugin aims to address these limitations. #### Scenario Common scenarios for NUMA-Aware are computation-intensive jobs that are sensitive to CPU parameters, scheduling delays. Such as scientific calculation, video decoding, animation rendering, big data offline processing and other specific scenes. +### Usage + +#### Overview +The Usage-based scheduling plugin evaluates actual real-time resource utilization (e.g., CPU, Memory) collected from monitoring systems like Prometheus instead of only depending on requested resources. It prevents new pods from being scheduled onto overloaded nodes and actively balances the cluster workload. + +#### Scenario +Useful in clusters experiencing unbalanced node resource consumption where some nodes are overburdened while others remain idle despite having similar requested resources. + +### Rescheduling + +#### Overview +The Rescheduling plugin periodically rebalances the cluster by evaluating real resource utilization. It actively evicts pods from heavily utilized nodes and shuffles them to under-utilized nodes based on configured target thresholds and strategies like LowNodeUtilization or OfflineOnly. + +#### Scenario +Perfect for long-running clusters where dynamic workload lifecycles lead to fragmentation and resource imbalances over time. + +### ResourceQuota + +#### Overview +The ResourceQuota plugin interfaces with Kubernetes' native `ResourceQuota` objects to ensure that a PodGroup is only enqueued if there is sufficient resource capacity in its namespace. + +#### Scenario +Highly beneficial in multi-tenant environments to prevent jobs from entering the scheduling pipeline and clogging the queue when they have no chance of running due to namespace quota restrictions. + +### Pod Disruption Budget (PDB) + +#### Overview +The PDB Plugin ensures that Volcano respects user-defined Kubernetes PodDisruptionBudget (PDB) constraints during any eviction-based scheduling actions, such as `reclaim`, `preempt`, and `shuffle`. + +#### Scenario +Crucial for highly available workloads where simultaneous eviction of multiple replicas could result in service disruption. + +### Overcommit + +#### Overview +The Overcommit Plugin allows the scheduler to artificially inflate the apparent "idle resources" of the cluster by a configurable factor (e.g., 1.2), permitting more jobs to enqueue in the scheduling pipeline than the physical capacity. + +#### Scenario +Useful when administrators want the scheduler to tolerate a larger backlog of `pending` pods waiting for resources without rejecting them outright during peak loads. + +### DeviceShare + +#### Overview +The DeviceShare Plugin provides a unified framework for sharing specialized hardware devices such as GPUs, NPUs, and FPGAs across multiple pods. + +#### Scenario +Ideal for advanced AI/ML environments needing granular hardware sharing, like vGPU, vNPU, and GPU exclusive deployments. diff --git a/versioned_docs/version-v1.12.0/Concepts/Queue.md b/versioned_docs/version-v1.12.0/Concepts/Queue.md index 72a62e7e..501c3ed0 100644 --- a/versioned_docs/version-v1.12.0/Concepts/Queue.md +++ b/versioned_docs/version-v1.12.0/Concepts/Queue.md @@ -51,7 +51,7 @@ deserved indicates the expected resource amount for all PodGroups in this queue. > **Note**: > -> 1. This field can only be configured when the capacity plugin is enabled, and must be less than or equal to the capability value. The proportion plugin uses weight to automatically calculate the queue's deserved value. For more information on using the capacity plugin, see: [capacity plugin user guide](/docs/UserGuide/user_guide_how_to_use_capacity_plugin) +> 1. This field can only be configured when the capacity plugin is enabled, and must be less than or equal to the capability value. The proportion plugin uses weight to automatically calculate the queue's deserved value. For more information on using the capacity plugin, see: [capacity plugin user guide](/docs/Plugins/user_guide_how_to_use_capacity_plugin) > 2. If the allocated resources of a queue exceed its configured deserved value, the queue cannot reclaim resources from other queues * weight, *optional* diff --git a/versioned_docs/version-v1.12.0/Ecosystem/RayOnVolcano.md b/versioned_docs/version-v1.12.0/Ecosystem/RayOnVolcano.md index 034c86c2..a3e8fc3b 100644 --- a/versioned_docs/version-v1.12.0/Ecosystem/RayOnVolcano.md +++ b/versioned_docs/version-v1.12.0/Ecosystem/RayOnVolcano.md @@ -203,4 +203,4 @@ ray job submit --address http://localhost:8265 -- python -c "import ray; ray.ini ### Learn More - For KubeRay integration details, visit the [KubeRay Volcano Scheduler Documentation](https://docs.ray.io/en/latest/cluster/kubernetes/k8s-ecosystem/volcano.html#kuberay-integration-with-volcano) -- For Volcano Job Ray plugin details, see the [Volcano Ray Plugin Guide](/docs/UserGuide/user_guide_how_to_use_ray_plugin) \ No newline at end of file +- For Volcano Job Ray plugin details, see the [Volcano Ray Plugin Guide](/docs/Plugins/user_guide_how_to_use_ray_plugin) \ No newline at end of file diff --git a/versioned_docs/version-v1.12.0/KeyFeatures/QueueResourceManagement.md b/versioned_docs/version-v1.12.0/KeyFeatures/QueueResourceManagement.md index a0918d2b..51601bf8 100644 --- a/versioned_docs/version-v1.12.0/KeyFeatures/QueueResourceManagement.md +++ b/versioned_docs/version-v1.12.0/KeyFeatures/QueueResourceManagement.md @@ -50,7 +50,7 @@ deserved indicates the expected resource amount for all PodGroups in this queue. > **Note**: > -> 1. This field can only be configured when the capacity plugin is enabled, and must be less than or equal to the capability value. The proportion plugin uses weight to automatically calculate the queue's deserved value. For more information on using the capacity plugin, see: [capacity plugin user guide](/docs/UserGuide/user_guide_how_to_use_capacity_plugin) +> 1. This field can only be configured when the capacity plugin is enabled, and must be less than or equal to the capability value. The proportion plugin uses weight to automatically calculate the queue's deserved value. For more information on using the capacity plugin, see: [capacity plugin user guide](/docs/Plugins/user_guide_how_to_use_capacity_plugin) > 2. If the allocated resources of a queue exceed its configured deserved value, the queue cannot reclaim resources from other queues * weight, *optional* diff --git a/versioned_docs/version-v1.7.0/Concepts/Queue.md b/versioned_docs/version-v1.7.0/Concepts/Queue.md index 72a62e7e..501c3ed0 100644 --- a/versioned_docs/version-v1.7.0/Concepts/Queue.md +++ b/versioned_docs/version-v1.7.0/Concepts/Queue.md @@ -51,7 +51,7 @@ deserved indicates the expected resource amount for all PodGroups in this queue. > **Note**: > -> 1. This field can only be configured when the capacity plugin is enabled, and must be less than or equal to the capability value. The proportion plugin uses weight to automatically calculate the queue's deserved value. For more information on using the capacity plugin, see: [capacity plugin user guide](/docs/UserGuide/user_guide_how_to_use_capacity_plugin) +> 1. This field can only be configured when the capacity plugin is enabled, and must be less than or equal to the capability value. The proportion plugin uses weight to automatically calculate the queue's deserved value. For more information on using the capacity plugin, see: [capacity plugin user guide](/docs/Plugins/user_guide_how_to_use_capacity_plugin) > 2. If the allocated resources of a queue exceed its configured deserved value, the queue cannot reclaim resources from other queues * weight, *optional* diff --git a/versioned_docs/version-v1.7.0/Ecosystem/RayOnVolcano.md b/versioned_docs/version-v1.7.0/Ecosystem/RayOnVolcano.md index 034c86c2..a3e8fc3b 100644 --- a/versioned_docs/version-v1.7.0/Ecosystem/RayOnVolcano.md +++ b/versioned_docs/version-v1.7.0/Ecosystem/RayOnVolcano.md @@ -203,4 +203,4 @@ ray job submit --address http://localhost:8265 -- python -c "import ray; ray.ini ### Learn More - For KubeRay integration details, visit the [KubeRay Volcano Scheduler Documentation](https://docs.ray.io/en/latest/cluster/kubernetes/k8s-ecosystem/volcano.html#kuberay-integration-with-volcano) -- For Volcano Job Ray plugin details, see the [Volcano Ray Plugin Guide](/docs/UserGuide/user_guide_how_to_use_ray_plugin) \ No newline at end of file +- For Volcano Job Ray plugin details, see the [Volcano Ray Plugin Guide](/docs/Plugins/user_guide_how_to_use_ray_plugin) \ No newline at end of file diff --git a/versioned_docs/version-v1.8.2/Concepts/Queue.md b/versioned_docs/version-v1.8.2/Concepts/Queue.md index 72a62e7e..501c3ed0 100644 --- a/versioned_docs/version-v1.8.2/Concepts/Queue.md +++ b/versioned_docs/version-v1.8.2/Concepts/Queue.md @@ -51,7 +51,7 @@ deserved indicates the expected resource amount for all PodGroups in this queue. > **Note**: > -> 1. This field can only be configured when the capacity plugin is enabled, and must be less than or equal to the capability value. The proportion plugin uses weight to automatically calculate the queue's deserved value. For more information on using the capacity plugin, see: [capacity plugin user guide](/docs/UserGuide/user_guide_how_to_use_capacity_plugin) +> 1. This field can only be configured when the capacity plugin is enabled, and must be less than or equal to the capability value. The proportion plugin uses weight to automatically calculate the queue's deserved value. For more information on using the capacity plugin, see: [capacity plugin user guide](/docs/Plugins/user_guide_how_to_use_capacity_plugin) > 2. If the allocated resources of a queue exceed its configured deserved value, the queue cannot reclaim resources from other queues * weight, *optional* diff --git a/versioned_docs/version-v1.8.2/Ecosystem/RayOnVolcano.md b/versioned_docs/version-v1.8.2/Ecosystem/RayOnVolcano.md index 034c86c2..a3e8fc3b 100644 --- a/versioned_docs/version-v1.8.2/Ecosystem/RayOnVolcano.md +++ b/versioned_docs/version-v1.8.2/Ecosystem/RayOnVolcano.md @@ -203,4 +203,4 @@ ray job submit --address http://localhost:8265 -- python -c "import ray; ray.ini ### Learn More - For KubeRay integration details, visit the [KubeRay Volcano Scheduler Documentation](https://docs.ray.io/en/latest/cluster/kubernetes/k8s-ecosystem/volcano.html#kuberay-integration-with-volcano) -- For Volcano Job Ray plugin details, see the [Volcano Ray Plugin Guide](/docs/UserGuide/user_guide_how_to_use_ray_plugin) \ No newline at end of file +- For Volcano Job Ray plugin details, see the [Volcano Ray Plugin Guide](/docs/Plugins/user_guide_how_to_use_ray_plugin) \ No newline at end of file diff --git a/versioned_docs/version-v1.9.0/Concepts/Queue.md b/versioned_docs/version-v1.9.0/Concepts/Queue.md index 72a62e7e..501c3ed0 100644 --- a/versioned_docs/version-v1.9.0/Concepts/Queue.md +++ b/versioned_docs/version-v1.9.0/Concepts/Queue.md @@ -51,7 +51,7 @@ deserved indicates the expected resource amount for all PodGroups in this queue. > **Note**: > -> 1. This field can only be configured when the capacity plugin is enabled, and must be less than or equal to the capability value. The proportion plugin uses weight to automatically calculate the queue's deserved value. For more information on using the capacity plugin, see: [capacity plugin user guide](/docs/UserGuide/user_guide_how_to_use_capacity_plugin) +> 1. This field can only be configured when the capacity plugin is enabled, and must be less than or equal to the capability value. The proportion plugin uses weight to automatically calculate the queue's deserved value. For more information on using the capacity plugin, see: [capacity plugin user guide](/docs/Plugins/user_guide_how_to_use_capacity_plugin) > 2. If the allocated resources of a queue exceed its configured deserved value, the queue cannot reclaim resources from other queues * weight, *optional* diff --git a/versioned_docs/version-v1.9.0/Ecosystem/RayOnVolcano.md b/versioned_docs/version-v1.9.0/Ecosystem/RayOnVolcano.md index 034c86c2..a3e8fc3b 100644 --- a/versioned_docs/version-v1.9.0/Ecosystem/RayOnVolcano.md +++ b/versioned_docs/version-v1.9.0/Ecosystem/RayOnVolcano.md @@ -203,4 +203,4 @@ ray job submit --address http://localhost:8265 -- python -c "import ray; ray.ini ### Learn More - For KubeRay integration details, visit the [KubeRay Volcano Scheduler Documentation](https://docs.ray.io/en/latest/cluster/kubernetes/k8s-ecosystem/volcano.html#kuberay-integration-with-volcano) -- For Volcano Job Ray plugin details, see the [Volcano Ray Plugin Guide](/docs/UserGuide/user_guide_how_to_use_ray_plugin) \ No newline at end of file +- For Volcano Job Ray plugin details, see the [Volcano Ray Plugin Guide](/docs/Plugins/user_guide_how_to_use_ray_plugin) \ No newline at end of file From b5b3ae60eaadaf897ffc59b8e1aa2b67ed4829af Mon Sep 17 00:00:00 2001 From: hemantch01 Date: Wed, 3 Jun 2026 05:02:52 +0000 Subject: [PATCH 2/7] docs: update svg images Signed-off-by: hemantch01 --- static/img/doc/descheduler-CN.svg | 2 +- static/img/doc/descheduler_EN.svg | 2 +- static/img/doc/volcano_global_design.svg | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/static/img/doc/descheduler-CN.svg b/static/img/doc/descheduler-CN.svg index 7684d3a6..846e1bc1 100644 --- a/static/img/doc/descheduler-CN.svg +++ b/static/img/doc/descheduler-CN.svg @@ -1 +1 @@ -
空闲节点
热点节点
正常节点
热点水位80%
空闲水位30%
资源利用率
\ No newline at end of file +
空闲节点
热点节点
正常节点
热点水位80%
空闲水位30%
资源利用率
\ No newline at end of file diff --git a/static/img/doc/descheduler_EN.svg b/static/img/doc/descheduler_EN.svg index 56aadf0a..044474e0 100644 --- a/static/img/doc/descheduler_EN.svg +++ b/static/img/doc/descheduler_EN.svg @@ -1 +1 @@ -
Under-utilized
 node
Over-utilized 
node
Appropriately utilized
node
high threshold 80%
low threshold 30%
resource utilization
\ No newline at end of file +
Under-utilized
 node
Over-utilized 
node
Appropriately utilized
node
high threshold 80%
low threshold 30%
resource utilization
\ No newline at end of file diff --git a/static/img/doc/volcano_global_design.svg b/static/img/doc/volcano_global_design.svg index 7b8a91ae..45925161 100644 --- a/static/img/doc/volcano_global_design.svg +++ b/static/img/doc/volcano_global_design.svg @@ -1 +1 @@ -
Create ResourceBinding
Volcano global
Set ResourceBinding.
Suspension.Scheduling=false when admit success
Controller
Find the Queue related to ResourceBinding
Sort ResourceBidning by Queue prioriry
Queue capacity management
CRDs
  • Vc Job
  • Queue
Webhook
Set ResourceBinding.
Suspension.Scheduling=true
User
Submit Deployment
Submit Volcano Job
Submit Pod(AI Traing)
Submit PropogationPolicy
Karmada
APIServer
Scheduler
Schedule when ResourceBinding.
Suspension.Scheduling=false
icon-color
Cluster A
Other Clusters
Cluster B
\ No newline at end of file +
Create ResourceBinding
Volcano global
Set ResourceBinding.
Suspension.Scheduling=false when admit success
Controller
Find the Queue related to ResourceBinding
Sort ResourceBidning by Queue prioriry
Queue capacity management
CRDs
  • Vc Job
  • Queue
Webhook
Set ResourceBinding.
Suspension.Scheduling=true
User
Submit Deployment
Submit Volcano Job
Submit Pod(AI Traing)
Submit PropogationPolicy
Karmada
APIServer
Scheduler
Schedule when ResourceBinding.
Suspension.Scheduling=false
icon-color
Cluster A
Other Clusters
Cluster B
\ No newline at end of file From d6bfa7f3083e7b692beb8569cc95ad53d1d79f96 Mon Sep 17 00:00:00 2001 From: hemantch01 Date: Wed, 3 Jun 2026 05:15:19 +0000 Subject: [PATCH 3/7] fix: resolve sidebar translation key conflict for Plugins categories Signed-off-by: hemantch01 docs(i18n): add zh-Hans fallback content for Controller and new Scheduler plugins Signed-off-by: hemantch01 --- docs/Controller/Plugins/_category_.json | 4 + docs/Scheduler/Plugins/_category_.json | 4 + .../current/Concepts/Queue.md | 2 +- .../current/Controller/Overview.md | 7 + .../Controller/Plugins/_category_.json | 4 + .../current/Controller/Plugins/env.md | 104 ++++ .../current/Controller/Plugins/hcclrank.md | 59 +++ .../current/Controller/Plugins/mpi.md | 80 ++++ .../current/Controller/Plugins/pytorch.md | 95 ++++ .../current/Controller/Plugins/ray.md | 147 ++++++ .../current/Controller/Plugins/ssh.md | 125 +++++ .../current/Controller/Plugins/svc.md | 356 ++++++++++++++ .../current/Controller/_category_.json | 4 + .../current/Scheduler/Plugins/_category_.json | 4 + .../current/Scheduler/Plugins/capacity.md | 197 ++++++++ .../current/Scheduler/Plugins/cdp.md | 205 ++++++++ .../current/Scheduler/Plugins/deviceshare.md | 41 ++ .../current/Scheduler/Plugins/nodegroup.md | 444 ++++++++++++++++++ .../current/Scheduler/Plugins/overcommit.md | 44 ++ .../current/Scheduler/Plugins/pdb.md | 43 ++ .../current/Scheduler/Plugins/rescheduling.md | 72 +++ .../Plugins/resource_strategy_fit.md | 376 +++++++++++++++ .../Scheduler/Plugins/resourcequota.md | 40 ++ .../Scheduler/Plugins/task_topology.md | 66 +++ .../current/Scheduler/Plugins/usage.md | 103 ++++ .../current/UserGuide/user_guide.md | 22 +- 26 files changed, 2636 insertions(+), 12 deletions(-) create mode 100644 docs/Controller/Plugins/_category_.json create mode 100644 docs/Scheduler/Plugins/_category_.json create mode 100644 i18n/zh-Hans/docusaurus-plugin-content-docs/current/Controller/Overview.md create mode 100644 i18n/zh-Hans/docusaurus-plugin-content-docs/current/Controller/Plugins/_category_.json create mode 100644 i18n/zh-Hans/docusaurus-plugin-content-docs/current/Controller/Plugins/env.md create mode 100644 i18n/zh-Hans/docusaurus-plugin-content-docs/current/Controller/Plugins/hcclrank.md create mode 100644 i18n/zh-Hans/docusaurus-plugin-content-docs/current/Controller/Plugins/mpi.md create mode 100644 i18n/zh-Hans/docusaurus-plugin-content-docs/current/Controller/Plugins/pytorch.md create mode 100644 i18n/zh-Hans/docusaurus-plugin-content-docs/current/Controller/Plugins/ray.md create mode 100644 i18n/zh-Hans/docusaurus-plugin-content-docs/current/Controller/Plugins/ssh.md create mode 100644 i18n/zh-Hans/docusaurus-plugin-content-docs/current/Controller/Plugins/svc.md create mode 100644 i18n/zh-Hans/docusaurus-plugin-content-docs/current/Controller/_category_.json create mode 100644 i18n/zh-Hans/docusaurus-plugin-content-docs/current/Scheduler/Plugins/_category_.json create mode 100644 i18n/zh-Hans/docusaurus-plugin-content-docs/current/Scheduler/Plugins/capacity.md create mode 100644 i18n/zh-Hans/docusaurus-plugin-content-docs/current/Scheduler/Plugins/cdp.md create mode 100644 i18n/zh-Hans/docusaurus-plugin-content-docs/current/Scheduler/Plugins/deviceshare.md create mode 100644 i18n/zh-Hans/docusaurus-plugin-content-docs/current/Scheduler/Plugins/nodegroup.md create mode 100644 i18n/zh-Hans/docusaurus-plugin-content-docs/current/Scheduler/Plugins/overcommit.md create mode 100644 i18n/zh-Hans/docusaurus-plugin-content-docs/current/Scheduler/Plugins/pdb.md create mode 100644 i18n/zh-Hans/docusaurus-plugin-content-docs/current/Scheduler/Plugins/rescheduling.md create mode 100644 i18n/zh-Hans/docusaurus-plugin-content-docs/current/Scheduler/Plugins/resource_strategy_fit.md create mode 100644 i18n/zh-Hans/docusaurus-plugin-content-docs/current/Scheduler/Plugins/resourcequota.md create mode 100644 i18n/zh-Hans/docusaurus-plugin-content-docs/current/Scheduler/Plugins/task_topology.md create mode 100644 i18n/zh-Hans/docusaurus-plugin-content-docs/current/Scheduler/Plugins/usage.md diff --git a/docs/Controller/Plugins/_category_.json b/docs/Controller/Plugins/_category_.json new file mode 100644 index 00000000..f3accd2f --- /dev/null +++ b/docs/Controller/Plugins/_category_.json @@ -0,0 +1,4 @@ +{ + "label": "Plugins", + "key": "controller-plugins" +} diff --git a/docs/Scheduler/Plugins/_category_.json b/docs/Scheduler/Plugins/_category_.json new file mode 100644 index 00000000..d4eb446f --- /dev/null +++ b/docs/Scheduler/Plugins/_category_.json @@ -0,0 +1,4 @@ +{ + "label": "Plugins", + "key": "scheduler-plugins" +} diff --git a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Concepts/Queue.md b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Concepts/Queue.md index c06fdf5c..00569dce 100644 --- a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Concepts/Queue.md +++ b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Concepts/Queue.md @@ -52,7 +52,7 @@ deserved表示该queue内所有podgroup的资源应得量,若该queue已分配 **注意**: -1. 该字段只有在capacity插件开启时可按需配置,需要小于等于capability值,proportion插件使用weight来自动计算queue的deserved值。capacity插件使用文档详见:[capacity plugin User Guide](/docs/Plugins/user_guide_how_to_use_capacity_plugin) +1. 该字段只有在capacity插件开启时可按需配置,需要小于等于capability值,proportion插件使用weight来自动计算queue的deserved值。capacity插件使用文档详见:[capacity plugin User Guide](../Scheduler/Plugins/capacity.md) > 2. 若queue中已分配的资源量超过了自己配置的deserved值,则queue不可再回收其他队列中的资源 diff --git a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Controller/Overview.md b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Controller/Overview.md new file mode 100644 index 00000000..ae48c502 --- /dev/null +++ b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Controller/Overview.md @@ -0,0 +1,7 @@ +--- +title: Overview +--- + +## Introduction + +The Volcano Job Controller manages the lifecycle of jobs and dynamically configures job environments using plugins such as SSH, SVC, MPI, and PyTorch. diff --git a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Controller/Plugins/_category_.json b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Controller/Plugins/_category_.json new file mode 100644 index 00000000..f3accd2f --- /dev/null +++ b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Controller/Plugins/_category_.json @@ -0,0 +1,4 @@ +{ + "label": "Plugins", + "key": "controller-plugins" +} diff --git a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Controller/Plugins/env.md b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Controller/Plugins/env.md new file mode 100644 index 00000000..99fab7ed --- /dev/null +++ b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Controller/Plugins/env.md @@ -0,0 +1,104 @@ +--- +title: Env + +--- + + +## Background +**Env Plugin** is designed for business that a pod should be aware of its index in the task such as [MPI](https://www.open-mpi.org/) +and [TensorFlow](https://tensorflow.google.cn/). The indices will be registered as **environment variables** automatically +when the Volcano job is created. For example, a tensorflow job consists of *1* ps and *2* workers. And each worker maps +to a slice of raw data. In order to make the workers be aware of its target slice, they get their index in the environment +variables. + +## Key Points +* The index keys of the environment variables are `VK_TASK_INDEX` and `VC_TASK_INDEX`, they have the same value. +* The value of the indices is a number which ranges from `0` to `length - 1`. The `length` equals to the number of replicas +of the task. It is also the index of the pod in the task. + +## Examples +```yaml +apiVersion: batch.volcano.sh/v1alpha1 +kind: Job +metadata: + name: tensorflow-dist-mnist +spec: + minAvailable: 3 + schedulerName: volcano + plugins: + env: [] ## Env plugin register, note that no values are needed in the array. + svc: [] + policies: + - event: PodEvicted + action: RestartJob + queue: default + tasks: + - replicas: 1 + name: ps + template: + spec: + containers: + - command: + - sh + - -c + - | + PS_HOST=`cat /etc/volcano/ps.host | sed 's/$/&:2222/g' | sed 's/^/"/;s/$/"/' | tr "\n" ","`; + WORKER_HOST=`cat /etc/volcano/worker.host | sed 's/$/&:2222/g' | sed 's/^/"/;s/$/"/' | tr "\n" ","`; + export TF_CONFIG={\"cluster\":{\"ps\":[${PS_HOST}],\"worker\":[${WORKER_HOST}]},\"task\":{\"type\":\"ps\",\"index\":${VK_TASK_INDEX}},\"environment\":\"cloud\"}; ## Get the index from the environment variable and configure it in the TF job. + python /var/tf_dist_mnist/dist_mnist.py + image: volcanosh/dist-mnist-tf-example:0.0.1 + name: tensorflow + ports: + - containerPort: 2222 + name: tfjob-port + resources: {} + restartPolicy: Never + - replicas: 2 + name: worker + policies: + - event: TaskCompleted + action: CompleteJob + template: + spec: + containers: + - command: + - sh + - -c + - | + PS_HOST=`cat /etc/volcano/ps.host | sed 's/$/&:2222/g' | sed 's/^/"/;s/$/"/' | tr "\n" ","`; + WORKER_HOST=`cat /etc/volcano/worker.host | sed 's/$/&:2222/g' | sed 's/^/"/;s/$/"/' | tr "\n" ","`; + export TF_CONFIG={\"cluster\":{\"ps\":[${PS_HOST}],\"worker\":[${WORKER_HOST}]},\"task\":{\"type\":\"worker\",\"index\":${VK_TASK_INDEX}},\"environment\":\"cloud\"}; + python /var/tf_dist_mnist/dist_mnist.py + image: volcanosh/dist-mnist-tf-example:0.0.1 + name: tensorflow + ports: + - containerPort: 2222 + name: tfjob-port + resources: {} + restartPolicy: Never +``` +## Note: +* When config env plugin in the tensorflow job above, all the pods will have 2 environment variables `VK_TASK_INDEX` and +`VC_TASK_INDEX`. The environment variables registered in the `ps` pod are as follows. +``` +[root@tensorflow-dist-mnist-ps-0 /] env | grep TASK_INDEX +VK_TASK_INDEX=0 +VC_TASK_INDEX=0 +``` +* Considering the 2 workers, you will get that their names are `tensorflow-dist-mnist-worker-0` and +`tensorflow-dist-mnist-worker-1`. And the corresponding values of the index environment variables are `0` and `1`. +``` +[root@tensorflow-dist-mnist-worker-0 /] env | grep TASK_INDEX +VK_TASK_INDEX=0 +VC_TASK_INDEX=0 +``` +``` +[root@tensorflow-dist-mnist-worker-1 /] env | grep TASK_INDEX +VK_TASK_INDEX=1 +VC_TASK_INDEX=1 +``` + +## Note: +* Because of historical reasons, environment variables `VK_TASK_INDEX` and `VC_TASK_INDEX` both exist, `VK_TASK_INDEX` will +be **deprecated** in the future releases. +* No value are needed when register env plugin in the volcano job. diff --git a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Controller/Plugins/hcclrank.md b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Controller/Plugins/hcclrank.md new file mode 100644 index 00000000..ab556003 --- /dev/null +++ b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Controller/Plugins/hcclrank.md @@ -0,0 +1,59 @@ +--- +title: HCCLRank +--- + +## Introduction + +In distributed AI training, particularly when using Ascend NPUs (Neural Processing Units) or MindSpore frameworks, the compute nodes need a deterministic rank or index to communicate over HCCL (Huawei Collective Communication Library). + +The **HCCLRank Plugin** is a Volcano Job plugin that automatically injects a `hccl/rankIndex` annotation into the Pods of a Volcano Job. It calculates a unique rank for each pod based on its task type (`master` or `worker`) and its replica index. + +## Mechanism + +During the Pod creation phase (`OnPodCreate`), the HCCLRank Plugin intercepts the pod and adds the `hccl/rankIndex` annotation to it. + +The calculation is as follows: +- **Master Role**: Rank = Pod Index +- **Worker Role**: Rank = (Total Master Replicas) + Pod Index + +If the Pod already has a `RANK` environment variable defined in its container specifications, the plugin will use that value instead and simply map it to the `hccl/rankIndex` annotation. + +## Configuration + +To enable the HCCLRank plugin, configure it within the Volcano job controller's configuration or add it to the `plugins` field of your `VolcanoJob` spec. + +```yaml +apiVersion: batch.volcano.sh/v1alpha1 +kind: Job +metadata: + name: ascend-distributed-training +spec: + minAvailable: 3 + schedulerName: volcano + plugins: + hcclrank: + - --master=master + - --worker=worker + tasks: + - replicas: 1 + name: master + template: + spec: + containers: + - name: master + image: my-ascend-image + - replicas: 2 + name: worker + template: + spec: + containers: + - name: worker + image: my-ascend-image +``` + +### Arguments + +The HCCLRank plugin supports overriding the default task names used to identify master and worker roles: + +- **`--master`**: The name of the master role task in your Job spec. Default is `master`. +- **`--worker`**: The name of the worker role task in your Job spec. Default is `worker`. diff --git a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Controller/Plugins/mpi.md b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Controller/Plugins/mpi.md new file mode 100644 index 00000000..77743da5 --- /dev/null +++ b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Controller/Plugins/mpi.md @@ -0,0 +1,80 @@ +--- +title: MPI + +--- + + +## Introduction + +**MPI plugin** is designed to optimize the user experience when running MPI jobs, it not only allows users to write less yaml, but also ensures the normal operation of MPI jobs. + +## How the MPI Plugin Works + +The MPI plugin will do three things: + +* Open ports used by MPI for all containers of the job +* Force open `ssh` and `svc` plugins +* add `MPI_HOST` environment variable for master pod, this environment variable includes the worker's domain name, It is used by the `--host` parameter of `mpiexec` + +## Parameters of the MPI Plugin + +### Key Points + +* If `master` or `worker` is configured, please ensure that the tasks corresponding to their values exist, and the roles of these tasks correspond to the meaning of the parameters +* If `port` is configured, make the port value of `sshd` the same as the value of the parameter. +* If the `gang` plugin is enabled, then make sure that the value of `minAvailable` is **equal** to the number of `replicas of the worker`. + +### Arguments + +| ID | Name | Type | Default Value | Required | Description | Example | +| ---- | ------ | ------ | ------------- | -------- | ---------------------------------- | ------------------ | +| 1 | master | string | master | No | Name of MPI master | --master=mpimaster | +| 2 | worker | string | worker | No | Name of MPI worker | --worker=mpiworker | +| 3 | port | string | 22 | No | The port to open for the container | --port=5000 | + +## Examples + +```yaml +apiVersion: batch.volcano.sh/v1alpha1 +kind: Job +metadata: + name: lm-mpi-job +spec: + minAvailable: 1 + schedulerName: volcano + plugins: + mpi: ["--master=mpimaster","--worker=mpiworker","--port=22"] ## MPI plugin register + tasks: + - replicas: 1 + name: mpimaster + policies: + - event: TaskCompleted + action: CompleteJob + template: + spec: + containers: + - command: + - /bin/sh + - -c + - | + mkdir -p /var/run/sshd; /usr/sbin/sshd; + mpiexec --allow-run-as-root --host ${MPI_HOST} -np 2 mpi_hello_world; + image: volcanosh/example-mpi:0.0.3 + name: mpimaster + workingDir: /home + restartPolicy: OnFailure + - replicas: 2 + name: mpiworker + template: + spec: + containers: + - command: + - /bin/sh + - -c + - | + mkdir -p /var/run/sshd; /usr/sbin/sshd -D; + image: volcanosh/example-mpi:0.0.3 + name: mpiworker + workingDir: /home + restartPolicy: OnFailure +``` diff --git a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Controller/Plugins/pytorch.md b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Controller/Plugins/pytorch.md new file mode 100644 index 00000000..9d7e1039 --- /dev/null +++ b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Controller/Plugins/pytorch.md @@ -0,0 +1,95 @@ +--- +title: Pytorch +--- + + +## Introduction + +**Pytorch plugin** is designed to optimize the user experience when running pytorch jobs, it not only allows users to write less yaml, but also ensures the normal operation of Pytorch jobs. + +## How the Pytorch Plugin Works + +The Pytorch Plugin will do the following: + +* Open ports used by Pytorch for all containers of the job +* Force open `svc` plugins +* Add some envs such like `MASTER_ADDR`, `MASTER_PORT`, `WORLD_SIZE`, `RANK` which pytorch distributed training needed to containers automatically +* Add an init container to worker pods to wait for the master node to be ready before starting (ensures master starts first) + +## Parameters of the Pytorch Plugin + +### Arguments + +| ID | Name | Type | Default Value | Required | Description | Example | +| ---- | -------------------- | ------ | ------------------ | -------- | ------------------------------------------------------------------------------------ | -------------------------------------- | +| 1 | master | string | master | No | Name of Pytorch master | --master=master | +| 2 | worker | string | worker | No | Name of Pytorch worker | --worker=worker | +| 3 | port | int | 23456 | No | The port to open for the container | --port=23456 | +| 4 | wait-master-enabled | bool | false | No | Enable init container to wait for master | --wait-master-enabled=true | +| 5 | wait-master-timeout | int | 300 | No | Timeout in seconds for waiting master (only effective when wait-master-enabled=true) | --wait-master-timeout=600 | +| 6 | wait-master-image | string | busybox:1.36.1 | No | Image for wait-for-master init container (only effective when wait-master-enabled=true) | --wait-master-image=busybox:latest | + +## Examples + +```yaml +apiVersion: batch.volcano.sh/v1alpha1 +kind: Job +metadata: + name: pytorch-job +spec: + minAvailable: 1 + schedulerName: volcano + plugins: + pytorch: [ + "--master=master", + "--worker=worker", + "--port=23456", + "--wait-master-enabled=true", # Enable init container to wait for master (optional, default: false) + "--wait-master-timeout=600", # Timeout in seconds (optional, default: 300) + "--wait-master-image=busybox:1.36.1" # Init container image (optional, default: busybox:1.36.1) + ] + tasks: + - replicas: 1 + name: master + policies: + - event: TaskCompleted + action: CompleteJob + template: + spec: + containers: + - image: gcr.io/kubeflow-ci/pytorch-dist-sendrecv-test:1.0 + imagePullPolicy: IfNotPresent + name: master + restartPolicy: OnFailure + - replicas: 2 + name: worker + template: + spec: + containers: + - image: gcr.io/kubeflow-ci/pytorch-dist-sendrecv-test:1.0 + imagePullPolicy: IfNotPresent + name: worker + workingDir: /home + restartPolicy: OnFailure +``` + +## Notes + +* The `wait-for-master` init container feature is **disabled by default**. Enable it by setting `--wait-master-enabled=true` +* When enabled, an init container will be added to worker pods to ensure the master is ready before starting workers +* Default init container image is `busybox:1.36.1`, can be customized via `--wait-master-image` +* Workers will wait for the master to become ready with a configurable timeout (default 300 seconds / 5 minutes) +* If the master doesn't become ready within the timeout, the worker pod will fail with an error message +* The init container checks the master's port connectivity using multiple fallback methods: + 1. `nc -z` (netcat) if available + 2. `/dev/tcp` with timeout command if available + 3. `/dev/tcp` direct connection as fallback +* **Note**: The parameters `--wait-master-timeout` and `--wait-master-image` are only effective when `--wait-master-enabled=true` +* **Image Requirements**: The custom image should have at least one of the following: + * `nc` (netcat) command - recommended, available in busybox, alpine + * `/dev/tcp` support in shell - available in bash/sh + * Recommended images: `busybox:1.36.1`, `alpine:latest`, `bash:latest` +* Customization examples: + * Enable feature: `--wait-master-enabled=true` + * Custom timeout: `--wait-master-enabled=true --wait-master-timeout=600` (10 minutes) + * Custom image: `--wait-master-enabled=true --wait-master-image=busybox:latest` diff --git a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Controller/Plugins/ray.md b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Controller/Plugins/ray.md new file mode 100644 index 00000000..65c33136 --- /dev/null +++ b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Controller/Plugins/ray.md @@ -0,0 +1,147 @@ +--- +title: Ray +--- + + +## Introduction + +**Ray plugin** is designed to optimize the user experience when deploying a ray cluster, it not only allows users to write less yaml, but also supports users to deploy a ray cluster. + +## How the Ray Plugin Works + +The Ray Plugin will do three things: + +* Configure the commands of head and worker nodes in a ray cluster. +* Open three ports used by ray head node. (GCS, Ray dashboard and Client server) +* Create a service mapped to the ray head node container ports. (ex, submit a ray job, Access a ray dashboard and client server) + +> *Note* +> - This plugin is based on the ray cli (Command Line Interface) and this guide use the [official ray docker image](https://hub.docker.com/r/rayproject/ray). +> - **svc plugin is necessary** when you use the ray plugin. + +## Parameters of the Ray Plugin + +### Arguments + +| ID | Name | Type | Default Value | Required | Description | Example | +| --- | ---------------- | ------ | ------------- | -------- | --------------------------------------- | ------------------------ | +| 1 | head | string | head | No | Name of Head Task in Volcano Job | --head=head | +| 2 | worker | string | worker | No | Name of Worker Task in Volcano Job | --worker=worker | +| 3 | headContainer | string | head | No | Name of Main Container in a head task | --headContainer=head | +| 4 | workerContainer | string | worker | No | Name of Main Container in a worker task | --workerContainer=worker | +| 5 | port | string | 6379 | No | The port to open for the GCS | --port=6379 | +| 6 | dashboardPort | string | 8265 | No | The port to open for the Ray dashboard | --dashboardPort=8265 | +| 7 | clientServerPort | string | 10001 | No | The port to open for the client server | --clientServerPort=10001 | + +## Examples +> This guide is based on the instructions provided in the [RayCluster Quick Start.](https://docs.ray.io/en/master/cluster/kubernetes/getting-started/raycluster-quick-start.html#step-4-run-an-application-on-a-raycluster) + +First, create a Ray cluster using the YAML manifest shown below. +- For more details about Ray clusters, see the [Ray Cluster Key Concepts documentation](https://docs.ray.io/en/latest/cluster/key-concepts.html). +- For more details about How to compose a ray cluster, see the [Launching an On-Premise Cluster](https://docs.ray.io/en/latest/cluster/vms/user-guides/launching-clusters/on-premises.html#on-prem). +```yaml +apiVersion: batch.volcano.sh/v1alpha1 +kind: Job +metadata: + name: ray-cluster-job +spec: + minAvailable: 3 + schedulerName: volcano + plugins: + ray: [] + svc: [] + policies: + - event: PodEvicted + action: RestartJob + queue: default + tasks: + - replicas: 1 + name: head + template: + spec: + containers: + - name: head + image: rayproject/ray:latest-py311-cpu + resources: {} + restartPolicy: OnFailure + - replicas: 2 + name: worker + template: + spec: + containers: + - name: worker + image: rayproject/ray:latest-py311-cpu + resources: {} + restartPolicy: OnFailure + +``` + +Once applied, a Ray cluster consisting of a `head node` and one or more `worker nodes` will be provisioned. + +```sh +kubectl get pod +``` + +```sh +NAME READY STATUS RESTARTS AGE +ray-cluster-job-head-0 1/1 Running 0 106s +ray-cluster-job-worker-0 1/1 Running 0 106s +ray-cluster-job-worker-1 1/1 Running 0 106s +``` + +Along with the cluster, a `ray-cluster-job-head-svc` [Kubernetes service](https://kubernetes.io/docs/concepts/services-networking/service/) resource is also created. +(`ray-cluster-job` `service` is created by `svc` plugin.) +```sh +kubectl get service +``` + +```bash +NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE +ray-cluster-job ClusterIP None 3s +ray-cluster-job-head-svc ClusterIP 10.96.184.65 6379/TCP,8265/TCP,10001/TCP 3s +``` + +Now that the service name is available, use port-forwarding to access the Ray Dashboard port which is 8265 by default. + +```sh +# Execute this in a separate shell. +kubectl port-forward service/ray-cluster-job-head-svc 8265:8265 > /dev/null & +``` + +Now that the Dashboard port is accessible, submit jobs to the RayCluster: +```sh +# The following job's logs will show the Ray cluster's total resource capacity, including 2 CPUs. +ray job submit --address http://localhost:8265 -- python -c "import ray; ray.init(); print(ray.cluster_resources())" +``` + +```sh +Job submission server address: http://localhost:8265 + +------------------------------------------------------- +Job 'raysubmit_W8nYZjW4HEFG6Mqa' submitted successfully +------------------------------------------------------- + +Next steps + Query the logs of the job: + ray job logs raysubmit_W8nYZjW4HEFG6Mqa + Query the status of the job: + ray job status raysubmit_W8nYZjW4HEFG6Mqa + Request the job to be stopped: + ray job stop raysubmit_W8nYZjW4HEFG6Mqa + +Tailing logs until the job exits (disable with --no-wait): +2025-09-23 14:58:49,442 INFO job_manager.py:531 -- Runtime env is setting up. +2025-09-23 14:59:00,106 INFO worker.py:1630 -- Using address 10.244.2.42:6379 set in the environment variable RAY_ADDRESS +2025-09-23 14:59:00,144 INFO worker.py:1771 -- Connecting to existing Ray cluster at address: 10.244.2.42:6379... +2025-09-23 14:59:00,161 INFO worker.py:1942 -- Connected to Ray cluster. View the dashboard at http://10.244.2.42:8265 +{'memory': 16277940225.0, 'node:10.244.4.41': 1.0, 'object_store_memory': 6976260095.0, 'CPU': 30.0, 'node:10.244.3.42': 1.0, 'node:10.244.2.42': 1.0, 'node:__internal_head__': 1.0} + +------------------------------------------ +Job 'raysubmit_W8nYZjW4HEFG6Mqa' succeeded +------------------------------------------ + +``` + +Visit `${YOUR_IP}:8265` in your browser for the Dashboard. For example, `127.0.0.1:8265`. See the job you submitted the above in the Recent jobs pane as shown below. + +![ray_dashboard](/img/ray-dashboard.png) diff --git a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Controller/Plugins/ssh.md b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Controller/Plugins/ssh.md new file mode 100644 index 00000000..15c9e39e --- /dev/null +++ b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Controller/Plugins/ssh.md @@ -0,0 +1,125 @@ +--- +title: SSH + +--- + + +## Background +**SSH Plugin** is designed for the login without password for pods within a volcano job , which is necessary for workloads +such as [MPI](https://www.open-mpi.org/). It often works with `SVC` plugin. + +## Key Points +* If `ssh-key-file-path` is configured, please ensure the private and public keys exist under the target directory. +Suggest keeping default value in most scenarios. +* If `ssh-private-key` or `ssh-public-key` is configured, please ensure the value is correct. Suggest keeping the default +keys in most scenarios. +* Once `SSH` plugin is configured, a secret whose name joins the job name and `-ssh` will be created, which contains +`authorized_keys`/`id_rsa`/`config` and `id_rsa.pub`. It will be mounted to the given path as a volume for all containers +(including initContainers) within the job. +* You can get all the hostnames within the job in `/root/.ssh/config` by default. This file contains the pairs of hostname +and subdomain. +* If `SSH` plugin is configured, you can sign in any other pods in the same job by `ssh hostname` without password. + +## Arguments +| ID | Name | Type | Default Value | Required | Description | Example | +|-----|----------------------|--------|---------------------|----------|-----------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| 1 | `ssh-key-file-path` | String | `/root/.ssh` | N | The path used to store ssh private and public keys. | ssh: ["--ssh-key-file-path=/home/user/.ssh"] | +| 2 | `ssh-private-key` | String | DEFAULT_PRIVATE_KEY | N | The input string of the private key. | ssh: ["--ssh-private-key=-----BEGIN RSA PRIVATE KEY-----\nMIIEpAIBAAKCAQEAyeyZjWDx5Na9bw1f61M4s+QlLT/kyrB37AR2j5Sb/A9hvJak\nLNQQpNC+KVfYNl4jePG+6lwHqye//pcC9+0SWsHWwgaahjMLnAthR2k8JAakNA9x\nV/wHz0YU99OKEetaOuxXpWZPXCHX0zuQO87YbdKzRbgxACirM3Phkwr7XLtQtWZk\nyXG34CQXZQWgBIS1Fl+PlGOpVpOPnWoZPMpbAK74i/Tz4sP8Zhqc6dya1hrbUwY3\nYfMZNYXpaAw7wWVjq8grfs0+Fl3SxHrzTXge2m+eZAZ6iPJ8cX4uYKxi0ZmxpM/a\ngI6Mmjq0MU75Vxpq22LaUvHIpOfX5UxhkrsxlwIDAQABAoIBAQDGOuIb6zpNn4rl\nBMpPqamW4LimjX08hrWUHGWQWyIu96LJk1GlOKMGSm8FA1odNZm5WApG5QYaPrG7\na+DcJ/7G3ljIrdbxPBd/n6RmiKcj7ukwuqBY8fFwyKo5CZEYOmagRfldRO1P02Gf\n22+jZ1MNrbWVElf4gfRgVLj0s+lEhFkzhi+QGMmMpjEJnnG98xxVGEvWMw1rnKJm\n3Gi771Gltbg3GuEPs3IeoBgba3EaHmSxJnBivAL4zsO8UUCAXB13cUiXx8qO7y1e\nCSWSenRmK2ugbL6v0co12O0n0pxF9xlJ6fALdRWzpJsFlN3ttkY9N5GrQc/pVjOa\nvqa172RRAoGBAOSAIMNLT6QjgYDk5Z7ZxjNnxH/lMso+cx6bxk9YMKRrw0fDQh8m\ncBAihXhuntCPDGhrzQ+Anqx4jJVDFqac0xBck90a8LmmzD0q72eDTCYPouDWe6DL\nJQAc/HDmIC13sADEXmGW3c0Qn4hjBnMd89ouYj7ZajU2sED2irPPc/HLAoGBAOI5\nruL4Q0FarGrP3a9z9EDrVJsK2OfSTaJ7rhZ+uvB838svbHU+4mEYPhx4PCwvrYyi\nFn4hyau003ZmLc1qTABjmwcO/PPiYyoRHJDUIIhiIyIL+id/G53uG2eTzqYtU6uS\nnAIB2rKwwhU8ek+zbJBLu5uxuxlf4mdZITdkwtXlAoGBALH3RQ02A9JgQQYFwP2G\nucLhx/6goX05RGoLg1na4w+8Sr0Cy+X9BvzaFkAlUBY5w700cOLpFyxXO48pUGP1\n8sFkiVmFGQZPbfUaEpn5ff6K4R3ijyk97xR2fvrjkR44gOEoECZL3XZQwx/zmFti\nccF1rNksdnb5oC8IliDTq4cfAoGANyy6asECJj5nLuXju5ccS3kZ+XZ70I6KQMbJ\nftMJ5P2P146JdU8RB31SKL9qbZxzR4mA0uKKvUYtDQN+yErUnoOsm9wb9Z+RcAEc\nZnZWOO02hGdHa7qkkbAxHuH91KnZbk8jnZm2LT7PFz7Y1fd80vSlnSOL7nRkU7B5\nWXlJy8ECgYA4g0wc0Jq8c1Q0FulMkOQqYRDXaDo34987L+mZ70i/RtdkKjK/IKJ9\n18UDCyEaDPD0BWBJGPejZkY8UD6FBG/5k7wNIbT7hHLRSRlw4iRmVX2hRVXrXzD8\nvc86Qyg2iG0JqkMAvRdH40amPKp5bW4VcfcvQo4TSsI972u12rgwtg==\n-----END RSA PRIVATE KEY-----\n"] | +| 3 | `ssh-public-key` | String | DEFAULT_PUBLIC_KEY | N | The input string of the public key. | ssh: ["--ssh-public-key=ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDJ7JmNYPHk1r1vDV/rUziz5CUtP+TKsHfsBHaPlJv8D2G8lqQs1BCk0L4pV9g2XiN48b7qXAerJ7/+lwL37RJawdbCBpqGMwucC2FHaTwkBqQ0D3FX/AfPRhT304oR61o67FelZk9cIdfTO5A7ztht0rNFuDEAKKszc+GTCvtcu1C1ZmTJcbfgJBdlBaAEhLUWX4+UY6lWk4+dahk8ylsArviL9PPiw/xmGpzp3JrWGttTBjdh8xk1heloDDvBZWOryCt+zT4WXdLEevNNeB7ab55kBnqI8nxxfi5grGLRmbGkz9qAjoyaOrQxTvlXGmrbYtpS8cik59flTGGSuzGX root@aiplatform"] | + +## Note: +* `DEFAULT_PRIVATE_KEY` and `DEFAULT_PUBLIC_KEY` are not fully listed for they are too long. Please refer to the examples +behind for cases. +* Volcano is not responsible for the validation of `ssh-key-file-path`. So please guarantee it correct yourself. +* Suggest keeping blank and making use of the default values in most scenarios just like the example behind. If that, +Volcano will help generate a pair of keys and finish all the configuration by default. + +## Examples +```yaml +apiVersion: batch.volcano.sh/v1alpha1 +kind: Job +metadata: + name: mpi-job +spec: + minAvailable: 3 + schedulerName: volcano + plugins: + ssh: [] ## SSH plugin register + svc: [] + tasks: + - replicas: 1 + name: mpimaster + template: + spec: + containers: + - command: + - /bin/bash + - -c + - | + mkdir -p /var/run/sshd; /usr/sbin/sshd; + MPI_HOST=`cat /etc/volcano/mpiworker.host | tr "\n" ","`; + sleep 10; + mpiexec --allow-run-as-root --host ${MPI_HOST} -np 2 --prefix /usr/local/openmpi-3.1.5 python /tmp/gpu-test.py; + sleep 3600; + image: lyd911/mindspore-gpu-example:0.2.0 + name: mpimaster + ports: + - containerPort: 22 + name: mpijob-port + workingDir: /home + restartPolicy: OnFailure + - replicas: 2 + name: mpiworker + template: + spec: + containers: + - command: + - /bin/bash + - -c + - | + mkdir -p /var/run/sshd; /usr/sbin/sshd -D; + image: lyd911/mindspore-gpu-example:0.2.0 + name: mpiworker + resources: + limits: + nvidia.com/gpu: "1" + ports: + - containerPort: 22 + name: mpijob-port + workingDir: /home + restartPolicy: OnFailure +``` +## Note: +* This example will create a mpi job with 1 `master` and 2 `workers`. +* Because the `SVC` plugin is enabled, you can get all the hosts in any pod by environment variables. Also, you can get +the hosts in `/root/.ssh/config` if you use the default ssh configuration. +``` +[root@mpi-job-master-0 /]# cat /root/.ssh/config +StrictHostKeyChecking no +UserKnownHostsFile /dev/null +Host mpi-job-mpimaster-0 + HostName mpi-job-mpimaster-0.mpi-job +Host mpi-job-mpiworker-0 + HostName mpi-job-mpiworker-0.mpi-job +Host mpi-job-mpiworker-1 + HostName mpi-job-mpiworker-1.mpi-job +``` +* You can sign in other hosts in `master` pod as follows. +``` +[root@mpi-job-master-0 /]# ssh mpi-job-mpiworker-0 +Warning: Permanently added 'mpi-job-mpiworker-0.mpi-job,X.X.X.X' (ECDSA) to the list of known hosts. +Welcome to Ubuntu 18.04.3 LTS (GNU/Linux 3.10.0-1160.36.2.el7.x86_64 x86_64) + + * Documentation: https://help.ubuntu.com + * Management: https://landscape.canonical.com + * Support: https://ubuntu.com/advantage + +This system has been minimized by removing packages and content that are +not required on a system that users do not log into. + +To restore this content, you can run the 'unminimize' command. +Last login: Thu Apr 14 07:19:05 2022 from 10.244.0.67 +root@mpi-job-mpiworker-0:~# +``` +## Note +* Please ensure `sshd` service is available in all containers. diff --git a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Controller/Plugins/svc.md b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Controller/Plugins/svc.md new file mode 100644 index 00000000..15145701 --- /dev/null +++ b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Controller/Plugins/svc.md @@ -0,0 +1,356 @@ +--- +title: SVC +--- + +## Background + +**SVC Plugin** is designed for the communication for pods within a volcano job, which is essential for workloads such as +[TensorFlow](https://tensorflow.google.cn/) and [MPI](https://www.open-mpi.org/). For example, it is necessary for +`tensorflow job` to contact with each other between `ps` and `worker`. Volcano job plugin `svc` enable pods within a job +to visit each other by domain. + +## Key Points + +- Once `svc` plugin is configured, value of field `hostname` under `spec` will be filled out to be **the pod name** for + all pods under the job automatically. Namely, `pod.spec.hostname` is `pod.metadata.name`. +- Once `svc` plugin is configured, value of field `subdomain` under `spec` will be filled out to be **the job name** for + all pods under the job automatically. Namely, `pod.spec.subdomain` is `job.metadata.name`. +- Once `svc` plugin is configured, environment variables `VC_%s_NUM` will be registered to all the containers(including + initContainers) under the job automatically. `%s` will be replaced by the **task name** which the pod belongs to. The value + of the environment variable is the **task replicas**. The number of the environment variables depends on the number of tasks, + which is usually `2` for most AI and Big Data jobs contains 2 roles. For example, a Spark job contains `driver` and `executor`. +- Once `svc` plugin is configured, environment variables `VC_%s_HOSTS` will be registered to all the containers(including + initContainers) under the job automatically. `%s` will be replaced by the **task name** which the pod belongs to. The value + of the environment variable are the domains of all the pods under the task. The number of the environment variables depends + on the number of tasks, which is usually `2` for most AI and Big Data jobs contains 2 roles. For example, a TensorFlow job + contains `ps` and `worker`. +- A configmap whose name joins job-name and `svc` with `-` will be created automatically, which contains replicas of all + tasks and domains of all pods under the task. It will be mounted as a volume for all pods under the job and serves as the + host files under the directory `/etc/volcano/`. +- A headless service whose name is the same with job will be created. +- If `disable-network-policy` is set to be false, a `NetworkPolicy` object with the type `Ingress` will be created for + the job. + +## Arguments + +| ID | Name | Value | Default Value | Required | Description | Example | +| --- | ----------------------------- | -------------- | ------------- | -------- | ---------------------------------------------------- | ------------------------------------------- | +| 1 | `publish-not-ready-addresses` | `true`/`false` | `false` | N | whether publish the pod address when it is not ready | svc: ["--publish-not-ready-addresses=true"] | +| 2 | `disable-network-policy` | `true`/`false` | `false` | N | whether disable network policy for the job | svc: ["--disable-network-policy=true"] | + +## Examples + +```yaml +apiVersion: batch.volcano.sh/v1alpha1 +kind: Job +metadata: + name: tensorflow-dist-mnist +spec: + minAvailable: 3 + schedulerName: volcano + plugins: + env: [] + svc: [ + "--publish-not-ready-addresses=false", + "--disable-network-policy=false", + ] ## SVC plugin register + policies: + - event: PodEvicted + action: RestartJob + queue: default + tasks: + - replicas: 1 + name: ps + template: + spec: + containers: + - command: + - sh + - -c + - | + PS_HOST=`cat /etc/volcano/ps.host | sed 's/$/&:2222/g' | sed 's/^/"/;s/$/"/' | tr "\n" ","`; ## Get host domain from host files generated + WORKER_HOST=`cat /etc/volcano/worker.host | sed 's/$/&:2222/g' | sed 's/^/"/;s/$/"/' | tr "\n" ","`; + export TF_CONFIG={\"cluster\":{\"ps\":[${PS_HOST}],\"worker\":[${WORKER_HOST}]},\"task\":{\"type\":\"ps\",\"index\":${VK_TASK_INDEX}},\"environment\":\"cloud\"}; + python /var/tf_dist_mnist/dist_mnist.py + image: volcanosh/dist-mnist-tf-example:0.0.1 + name: tensorflow + ports: + - containerPort: 2222 + name: tfjob-port + resources: {} + restartPolicy: Never + - replicas: 2 + name: worker + policies: + - event: TaskCompleted + action: CompleteJob + template: + spec: + containers: + - command: + - sh + - -c + - | + PS_HOST=`cat /etc/volcano/ps.host | sed 's/$/&:2222/g' | sed 's/^/"/;s/$/"/' | tr "\n" ","`; + WORKER_HOST=`cat /etc/volcano/worker.host | sed 's/$/&:2222/g' | sed 's/^/"/;s/$/"/' | tr "\n" ","`; + export TF_CONFIG={\"cluster\":{\"ps\":[${PS_HOST}],\"worker\":[${WORKER_HOST}]},\"task\":{\"type\":\"worker\",\"index\":${VK_TASK_INDEX}},\"environment\":\"cloud\"}; + python /var/tf_dist_mnist/dist_mnist.py + image: volcanosh/dist-mnist-tf-example:0.0.1 + name: tensorflow + ports: + - containerPort: 2222 + name: tfjob-port + resources: {} + restartPolicy: Never +``` + +## Note: + +- Fields `hostname` and `subdomain` have been added to the pods under job `tensorflow-dist-mnist`. The following is part + yaml of the `ps` pod. + +```yaml +apiVersion: v1 +kind: Pod +metadata: + annotations: + scheduling.k8s.io/group-name: tensorflow-dist-mnist + volcano.sh/job-name: tensorflow-dist-mnist + volcano.sh/job-version: "0" + volcano.sh/queue-name: default + volcano.sh/task-spec: ps + volcano.sh/template-uid: tensorflow-dist-mnist-ps + labels: + volcano.sh/job-name: tensorflow-dist-mnist + volcano.sh/job-namespace: default + volcano.sh/queue-name: default + volcano.sh/task-spec: ps + name: tensorflow-dist-mnist-ps-0 + namespace: default + ownerReferences: + - apiVersion: batch.volcano.sh/v1alpha1 + blockOwnerDeletion: true + controller: true + kind: Job + name: tensorflow-dist-mnist + uid: 52c98cc2-4791-490f-8572-22df2c16ef8f + resourceVersion: "855403" + uid: 1b9e834b-de7e-4760-9b23-2a673d38e5d9 +spec: + containers: + - command: + - sh + - -c + - | + PS_HOST=`cat /etc/volcano/ps.host | sed 's/$/&:2222/g' | sed 's/^/"/;s/$/"/' | tr "\n" ","`; ## Get host domain from host files generated + WORKER_HOST=`cat /etc/volcano/worker.host | sed 's/$/&:2222/g' | sed 's/^/"/;s/$/"/' | tr "\n" ","`; + export TF_CONFIG={\"cluster\":{\"ps\":[${PS_HOST}],\"worker\":[${WORKER_HOST}]},\"task\":{\"type\":\"ps\",\"index\":${VK_TASK_INDEX}},\"environment\":\"cloud\"}; + python /var/tf_dist_mnist/dist_mnist.py + env: + - name: VK_TASK_INDEX + value: "0" + - name: VC_TASK_INDEX + value: "0" + - name: VC_PS_HOSTS ## Environment variable `VC_PS_HOSTS` contains the domains of all the `ps` hosts. + valueFrom: + configMapKeyRef: + key: VC_PS_HOSTS + name: tensorflow-dist-mnist-svc + - name: VC_PS_NUM ## Environment variable `VC_PS_NUM` contains the number of `ps` hosts. + valueFrom: + configMapKeyRef: + key: VC_PS_NUM + name: tensorflow-dist-mnist-svc + - name: VC_WORKER_HOSTS ## Environment variable `VC_WORKER_HOSTS` contains the domains of all the `worker` hosts. + valueFrom: + configMapKeyRef: + key: VC_WORKER_HOSTS + name: tensorflow-dist-mnist-svc + - name: VC_WORKER_NUM ## Environment variable `VC_WORKER_NUM` contains the number of `worker` hosts. + valueFrom: + configMapKeyRef: + key: VC_WORKER_NUM + name: tensorflow-dist-mnist-svc + image: volcanosh/dist-mnist-tf-example:0.0.1 + name: tensorflow + ports: + - containerPort: 2222 + name: tfjob-port + protocol: TCP + resources: {} + volumeMounts: ## Mount the configmap generated for the job under `/etc/volcano`, which contains all host files. + - mountPath: /etc/volcano + name: tensorflow-dist-mnist-svc + - mountPath: /var/run/secrets/kubernetes.io/serviceaccount + name: kube-api-access-wflz5 + readOnly: true + dnsPolicy: ClusterFirst + enableServiceLinks: true + hostname: tensorflow-dist-mnist-ps-0 ## Add `hostname` field + nodeName: volcano-control-plane + restartPolicy: Never + schedulerName: volcano + subdomain: tensorflow-dist-mnist ## Add `subdomain` field + tolerations: + - effect: NoExecute + key: node.kubernetes.io/not-ready + operator: Exists + tolerationSeconds: 300 + - effect: NoExecute + key: node.kubernetes.io/unreachable + operator: Exists + tolerationSeconds: 300 + volumes: + - configMap: ## Configmap generated for the job + defaultMode: 420 + name: tensorflow-dist-mnist-svc + name: tensorflow-dist-mnist-svc +status: + conditions: + - lastProbeTime: null + lastTransitionTime: "2022-04-13T02:08:17Z" + status: "True" + type: Initialized + - lastProbeTime: null + lastTransitionTime: "2022-04-13T02:08:18Z" + status: "True" + type: Ready + - lastProbeTime: null + lastTransitionTime: "2022-04-13T02:08:18Z" + status: "True" + type: ContainersReady + - lastProbeTime: null + lastTransitionTime: "2022-04-13T02:08:17Z" + status: "True" + type: PodScheduled + hostIP: x.x.x.x + phase: Running + podIP: x.x.x.x + podIPs: + - ip: x.x.x.x + qosClass: BestEffort + startTime: "2022-04-13T02:08:17Z" +``` + +- Host information is registered to all pods under the job. The following are registered environment variables for `ps` pod. + +``` +[root@tensorflow-dist-mnist-ps-0 /] env | grep VC +VC_PS_NUM=1 +VC_PS_HOSTS=tensorflow-dist-mnist-ps-0.tensorflow-dist-mnist ## ps pod domain +VC_WORKER_NUM=2 +VC_WORKER_HOSTS=tensorflow-dist-mnist-worker-0.tensorflow-dist-mnist,tensorflow-dist-mnist-worker-1.tensorflow-dist-mnist ## worker pods domains +``` + +- The host files added under `/etc/volcano` are as follows. + +``` +[root@tensorflow-dist-mnist-ps-0 /] ls /etc/volcano/ +VC_PS_HOSTS VC_PS_NUM VC_WORKER_HOSTS VC_WORKER_NUM ps.host worker.host +[root@tensorflow-dist-mnist-ps-0 /]# cat /etc/volcano/ps.host +tensorflow-dist-mnist-ps-0.tensorflow-dist-mnist +[root@tensorflow-dist-mnist-ps-0 /]# cat /etc/volcano/worker.host +tensorflow-dist-mnist-worker-0.tensorflow-dist-mnist +tensorflow-dist-mnist-worker-1.tensorflow-dist-mnist +``` + +- The headless service `tensorflow-dist-mnist` generated for the job is as follows. + +```yaml +apiVersion: v1 +kind: Service +metadata: + creationTimestamp: "2022-04-13T02:08:15Z" + name: tensorflow-dist-mnist + namespace: default + ownerReferences: + - apiVersion: batch.volcano.sh/v1alpha1 + blockOwnerDeletion: true + controller: true + kind: Job + name: tensorflow-dist-mnist + uid: 52c98cc2-4791-490f-8572-22df2c16ef8f + resourceVersion: "855341" + uid: a77cb081-72ae-442f-96da-e36974dfed48 +spec: + clusterIP: None + clusterIPs: + - None + ipFamilies: + - IPv4 + ipFamilyPolicy: SingleStack + selector: + volcano.sh/job-name: tensorflow-dist-mnist + volcano.sh/job-namespace: default + sessionAffinity: None + type: ClusterIP +status: + loadBalancer: {} +``` + +- The configmap `tensorflow-dist-mnist-svc` generated for the job is as follows. + +```yaml +apiVersion: v1 +data: + VC_PS_HOSTS: tensorflow-dist-mnist-ps-0.tensorflow-dist-mnist + VC_PS_NUM: "1" + VC_WORKER_HOSTS: tensorflow-dist-mnist-worker-0.tensorflow-dist-mnist,tensorflow-dist-mnist-worker-1.tensorflow-dist-mnist + VC_WORKER_NUM: "2" + ps.host: tensorflow-dist-mnist-ps-0.tensorflow-dist-mnist + worker.host: |- + tensorflow-dist-mnist-worker-0.tensorflow-dist-mnist + tensorflow-dist-mnist-worker-1.tensorflow-dist-mnist +kind: ConfigMap +metadata: + creationTimestamp: "2022-04-13T02:08:15Z" + name: tensorflow-dist-mnist-svc + namespace: default + ownerReferences: + - apiVersion: batch.volcano.sh/v1alpha1 + blockOwnerDeletion: true + controller: true + kind: Job + name: tensorflow-dist-mnist + uid: 52c98cc2-4791-490f-8572-22df2c16ef8f + resourceVersion: "855340" + uid: c4f3db21-6857-451f-b8b8-bbd5aa8b06ec +``` + +- The networkpolicy `tensorflow-dist-mnist` generated for the job is as follows. + +```yaml +apiVersion: networking.k8s.io/v1 +kind: NetworkPolicy +metadata: + creationTimestamp: "2022-04-13T02:08:15Z" + name: tensorflow-dist-mnist + namespace: default + ownerReferences: + - apiVersion: batch.volcano.sh/v1alpha1 + blockOwnerDeletion: true + controller: true + kind: Job + name: tensorflow-dist-mnist + uid: 52c98cc2-4791-490f-8572-22df2c16ef8f + resourceVersion: "855343" + uid: ddf8aada-51d7-47c1-99a0-5e0d8a913a4d +spec: + ingress: + - from: + - podSelector: + matchLabels: + volcano.sh/job-name: tensorflow-dist-mnist + volcano.sh/job-namespace: default + podSelector: + matchLabels: + volcano.sh/job-name: tensorflow-dist-mnist + volcano.sh/job-namespace: default + policyTypes: + - Ingress +``` + +## Note + +- DNS plugin is required in your Kubernetes cluster such as `corndns`. +- Kubernetes version >= v1.14 diff --git a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Controller/_category_.json b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Controller/_category_.json new file mode 100644 index 00000000..51e5301d --- /dev/null +++ b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Controller/_category_.json @@ -0,0 +1,4 @@ +{ + "label": "Controller", + "position": 6 +} diff --git a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Scheduler/Plugins/_category_.json b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Scheduler/Plugins/_category_.json new file mode 100644 index 00000000..d4eb446f --- /dev/null +++ b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Scheduler/Plugins/_category_.json @@ -0,0 +1,4 @@ +{ + "label": "Plugins", + "key": "scheduler-plugins" +} diff --git a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Scheduler/Plugins/capacity.md b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Scheduler/Plugins/capacity.md new file mode 100644 index 00000000..9bb70dbf --- /dev/null +++ b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Scheduler/Plugins/capacity.md @@ -0,0 +1,197 @@ +--- +title: Capacity + +--- + + +## Introduction + +Capacity plugin is a replacement of proportion plugin, but instead of dividing the queue's deserved resources by weight, it realizes elastic queue capacity management i.e., queue's resource borrowing and lending mechanism by specifying the amount of deserved resources for each dimension resource of the queue. + +A queue can use the idle resources of other queues, and when other queues submit jobs, they can reclaim the resources that have been lent, and the amount of reclaimed resources is the amount of queue's deserved resources. For more detail, please see [Capacity scheduling design](https://github.com/volcano-sh/volcano/blob/master/docs/design/capacity-scheduling.md) + +## Environment setup + +### Install volcano + +Refer to [Install Guide](https://github.com/volcano-sh/volcano/blob/master/installer/README.md) to install volcano. + +After installed, update the scheduler configuration: + +```shell +kubectl edit cm -n volcano-system volcano-scheduler-configmap +``` + +Please make sure + +- reclaim action is enabled. +- capacity plugin is enabled and proportion plugin is removed. + +Note: capacity and proportion plugin are in conflict, the two plugins cannot be used together. + +```yaml +kind: ConfigMap +apiVersion: v1 +metadata: + name: volcano-scheduler-configmap + namespace: volcano-system +data: + volcano-scheduler.conf: | + actions: "enqueue, allocate, backfill, reclaim" # add reclaim action. + tiers: + - plugins: + - name: priority + - name: gang + enablePreemptable: false + - name: conformance + - plugins: + - name: drf + enablePreemptable: false + - name: predicates + - name: capacity # add this field and remove proportion plugin. + - name: nodeorder + - name: binpack +``` + +## Config queue's deserved resources + +Assume there are two nodes and two queues named queue1 and queue2 in your kubernetes cluster, and each node has 4 CPU and 16Gi memory, then there will be total 8 CPU and 32Gi memory in your cluster. + +```yaml +allocatable: + cpu: "4" + memory: 16Gi + pods: "110" +``` + +config queue1's deserved field with 2 cpu and 8Gi memory. + +```yaml +apiVersion: scheduling.volcano.sh/v1beta1 +kind: Queue +metadata: + name: queue1 +spec: + reclaimable: true + deserved: # set the deserved field. + cpu: 2 + memory: 8Gi +``` + +config queue2's deserved field with 6 cpu and 24Gi memory. + +```yaml +apiVersion: scheduling.volcano.sh/v1beta1 +kind: Queue +metadata: + name: queue2 +spec: + reclaimable: true + deserved: # set the deserved field. + cpu: 6 + memory: 24Gi +``` + +## Submit pods to each queue + +First, submit a deployment named demo-1 to queue1 with replicas=8 and each pod requests 1 cpu and 4Gi memory, because queue2 is idle, so queue1 can use the whole clusters' resources, and you can see that 8 pods are in Running state. + +```yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: demo-1 +spec: + selector: + matchLabels: + app: demo-1 + replicas: 8 + template: + metadata: + labels: + app: demo-1 + annotations: + scheduling.volcano.sh/queue-name: "queue1" # set the queue + spec: + schedulerName: volcano + containers: + - name: nginx + image: nginx:1.14.2 + resources: + requests: + cpu: 1 + memory: 4Gi + ports: + - containerPort: 80 +``` + +Expected result: + +```shell +$ kubectl get po +NAME READY STATUS RESTARTS AGE +demo-1-7bc649f544-2wjg7 1/1 Running 0 5s +demo-1-7bc649f544-cvsmr 1/1 Running 0 5s +demo-1-7bc649f544-j5lzp 1/1 Running 0 5s +demo-1-7bc649f544-jvlbx 1/1 Running 0 5s +demo-1-7bc649f544-mzgg2 1/1 Running 0 5s +demo-1-7bc649f544-ntrs2 1/1 Running 0 5s +demo-1-7bc649f544-nv424 1/1 Running 0 5s +demo-1-7bc649f544-zd6d9 1/1 Running 0 5s +``` + +Then submit a deployment named demo-2 to queue2 with replicas=8 and each pod requests 1 cpu and 4Gi memory. + +```yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: demo-2 +spec: + selector: + matchLabels: + app: demo-2 + replicas: 8 + template: + metadata: + labels: + app: demo-2 + annotations: + scheduling.volcano.sh/queue-name: "queue2" # set the queue + spec: + schedulerName: volcano + containers: + - name: nginx + image: nginx:1.14.2 + resources: + requests: + cpu: 1 + memory: 4Gi + ports: + - containerPort: 80 +``` + +Because queue1 occupied queue2's resources, so queue2 will reclaim its deserved resources with 6 cpu and 24Gi memory. And each pod of demo-2 request 1 cpu and 4Gi memory, so there will be 6 Pods in Running state of demo-2, and demo-1's pods will be evicted. + +Finally, you can see that there are 2 Running pods in demo-1(belongs to queue1), and 6 Running pods in demo-2(belongs to queue2), which meets queue's deserved resources respectively. + +```shell +$ kubectl get po +NAME READY STATUS RESTARTS AGE +demo-1-7bc649f544-4vvdv 0/1 Pending 0 37s +demo-1-7bc649f544-c6mds 0/1 Pending 0 37s +demo-1-7bc649f544-j5lzp 1/1 Running 0 14m +demo-1-7bc649f544-mzgg2 1/1 Running 0 14m +demo-1-7bc649f544-pqdgk 0/1 Pending 0 37s +demo-1-7bc649f544-tx6wp 0/1 Pending 0 37s +demo-1-7bc649f544-wmshq 0/1 Pending 0 37s +demo-1-7bc649f544-wrhrr 0/1 Pending 0 37s +demo-2-6dfb86c49b-2jvgm 0/1 Pending 0 37s +demo-2-6dfb86c49b-dnjzv 1/1 Running 0 37s +demo-2-6dfb86c49b-fzvmp 1/1 Running 0 37s +demo-2-6dfb86c49b-jlf69 1/1 Running 0 37s +demo-2-6dfb86c49b-k62f7 1/1 Running 0 37s +demo-2-6dfb86c49b-k9b9v 1/1 Running 0 37s +demo-2-6dfb86c49b-rpzvg 0/1 Pending 0 37s +demo-2-6dfb86c49b-zch7w 1/1 Running 0 37s +``` diff --git a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Scheduler/Plugins/cdp.md b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Scheduler/Plugins/cdp.md new file mode 100644 index 00000000..2e0ea628 --- /dev/null +++ b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Scheduler/Plugins/cdp.md @@ -0,0 +1,205 @@ +--- +title: CDP + +--- + + +## Background +When we need to enable elastic training or serving, preemptible job's pods can be preempted or back to running repeatedly, if no cooldown protection set, these pods can be preempted again after they just started for a short time, this may cause service stability dropped. +So we add "cdp" plugin to ensure preemptible job's pods can run for at least some time set by user. + +## Environment setup + +### Install volcano + +Refer to [Install Guide](https://github.com/volcano-sh/volcano/blob/master/installer/README.md) to install volcano. + +### Update scheduler configmap + +After installed, update the scheduler configuration: + +```shell +kubectl edit configmap -n volcano-system volcano-scheduler-configmap +``` + +Register `cdp` plugin in configmap while enable `preempt` action + +```yaml +kind: ConfigMap +apiVersion: v1 +metadata: + name: volcano-scheduler-configmap + namespace: volcano-system +data: + volcano-scheduler.conf: | + actions: "enqueue, allocate, preempt, backfill" + tiers: + - plugins: + - name: priority + - name: gang + - name: conformance + - name: cdp + - plugins: + - name: drf + - name: predicates + - name: task-topology + arguments: + task-topology.weight: 10 + - name: proportion + - name: nodeorder + - name: binpack +``` + +### Running Jobs + +Take a simple volcano job as sample. + +original job yaml is as below, which has "ps" and "worker" task + +```yaml +apiVersion: batch.volcano.sh/v1alpha1 +kind: Job +metadata: + name: test-job +spec: + minAvailable: 3 + schedulerName: volcano + priorityClassName: high-priority + plugins: + ssh: [] + env: [] + svc: [] + maxRetry: 5 + queue: default + volumes: + - mountPath: "/myinput" + - mountPath: "/myoutput" + volumeClaimName: "testvolumeclaimname" + volumeClaim: + accessModes: [ "ReadWriteOnce" ] + storageClassName: "my-storage-class" + resources: + requests: + storage: 1Gi + tasks: + - replicas: 6 + name: "worker" + template: + metadata: + name: worker + spec: + containers: + - image: nginx + imagePullPolicy: IfNotPresent + name: nginx + resources: + requests: + cpu: "1" + restartPolicy: OnFailure + - replicas: 2 + name: "ps" + template: + metadata: + name: ps + spec: + containers: + - image: nginx + imagePullPolicy: IfNotPresent + name: nginx + resources: + requests: + cpu: "1" + restartPolicy: OnFailure + +``` + +#### Edit yaml of vcjob + +1. add annotations in volcano job in format below. + 1. `volcano.sh/preemptable` annotation indicates that job or task is preemptable + 2. `volcano.sh/cooldown-time` annotation indicates cooldown time for the entire job or dedicated task. Value for the annotation indicates cooldown time, valid time units are "ns", "us" (or "µs"), "ms", "s", "m", "h". + + ```yaml + volcano.sh/preemptable: "true" + volcano.sh/cooldown-time: "600s" + ``` + +**Example 1** + +Add annotation to entire job, then "ps" and "worker" task can be preempted and all have cooldown time support. + +```yaml +apiVersion: batch.volcano.sh/v1alpha1 +kind: Job +metadata: + name: test-job + annotations: + volcano.sh/preemptable: "true" + volcano.sh/cooldown-time: "600s" +spec: + ... # below keep the same +``` + +**Example 2** + +Add annotation to dedicated task, as shown below, only "worker" can be preempted and have cooldown time support. + +```yaml +apiVersion: batch.volcano.sh/v1alpha1 +kind: Job +metadata: + name: test-job +spec: + minAvailable: 3 + schedulerName: volcano + priorityClassName: high-priority + plugins: + ssh: [] + env: [] + svc: [] + maxRetry: 5 + queue: default + volumes: + - mountPath: "/myinput" + - mountPath: "/myoutput" + volumeClaimName: "testvolumeclaimname" + volumeClaim: + accessModes: [ "ReadWriteOnce" ] + storageClassName: "my-storage-class" + resources: + requests: + storage: 1Gi + tasks: + - replicas: 6 + name: "worker" + template: + metadata: + name: worker + annotations: # add annotation in tasks + volcano.sh/preemptable: "true" + volcano.sh/cooldown-time: "600s" + spec: + containers: + - image: nginx + imagePullPolicy: IfNotPresent + name: nginx + resources: + requests: + cpu: "1" + restartPolicy: OnFailure + - replicas: 2 + name: "ps" + template: + metadata: + name: ps + spec: + containers: + - image: nginx + imagePullPolicy: IfNotPresent + name: nginx + resources: + requests: + cpu: "1" + restartPolicy: OnFailure + +``` diff --git a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Scheduler/Plugins/deviceshare.md b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Scheduler/Plugins/deviceshare.md new file mode 100644 index 00000000..645ddd38 --- /dev/null +++ b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Scheduler/Plugins/deviceshare.md @@ -0,0 +1,41 @@ +--- +title: DeviceShare +--- + +## Introduction + +The **DeviceShare Plugin** is an advanced resource scheduling plugin in Volcano that provides a common framework for sharing specialized hardware devices (like GPUs, NPUs, FPGAs) across multiple pods. + +Rather than implementing fragmented logic for each new hardware accelerator, Volcano exposes a unified `Devices` interface. The `deviceshare` plugin leverages this interface to perform robust allocation, node filtering, and resource tracking for shared devices. + +## Mechanism + +The DeviceShare plugin works in conjunction with device-specific implementations. It exposes standard scheduling operations such as `Predicate` (filtering nodes based on available device capacity) and `Allocate`/`Release` (assigning portions of a device to specific pods). + +Currently, the `deviceshare` plugin serves as the underlying engine powering features like: +- **GPU Sharing**: Allowing multiple pods to request fractions of a single physical GPU's memory. +- **vGPU and vNPU**: Virtualizing accelerator slices. +- **GPU Exclusive**: Restricting a pod to exclusively own a GPU to avoid contention. + +## Configuration and Usage + +The `deviceshare` plugin is typically enabled implicitly when you enable device sharing predicates in the Volcano scheduler config map. However, if you are developing custom device sharing logic or need to explicitly declare it, it can be configured in your `volcano-scheduler-configmap`: + +```yaml +actions: "enqueue, allocate, backfill" +tiers: + - plugins: + - name: priority + - name: gang + - name: conformance + - name: deviceshare # Enable the device share framework plugin + - plugins: + - name: overcommit + - name: drf + - name: predicates + - name: proportion + - name: nodeorder + - name: binpack +``` + +> **Note:** For specific guides on how to configure your workloads to request shared GPUs or NPUs, please refer to the dedicated guides for [GPU Sharing](../UserGuide/user_guide_how_to_use_gpu_sharing) and [vNPU](../UserGuide/user_guide_how_to_use_vnpu). diff --git a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Scheduler/Plugins/nodegroup.md b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Scheduler/Plugins/nodegroup.md new file mode 100644 index 00000000..c9495b4d --- /dev/null +++ b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Scheduler/Plugins/nodegroup.md @@ -0,0 +1,444 @@ +--- +title: Nodegroup + +--- + +## Introduction + +**Nodegroup plugin** is designed to isolate resources by assigning labels to nodes and set node label affinty on Queue. + +## Usage + +### assign label to node + +Assign label to node, label key is `volcano.sh/nodegroup-name`. + +```shell script +kubectl label nodes volcano.sh/nodegroup-name= +``` + +### configure queue + +Create queue and bind nodegroup to it. + +```yaml +apiVersion: scheduling.volcano.sh/v1beta1 +kind: Queue +metadata: + name: default + spec: + reclaimable: true + weight: 1 + affinity: # added field + nodeGroupAffinity: + requiredDuringSchedulingIgnoredDuringExecution: + - + preferredDuringSchedulingIgnoredDuringExecution: + - + nodeGroupAntiAffinity: + requiredDuringSchedulingIgnoredDuringExecution: + - + preferredDuringSchedulingIgnoredDuringExecution: + - +``` + +### submit a vcjob + +submit vcjob job-1 to default queue. + +```shell script +$ cat < -o yaml +# Verify parent hierarchy and affinity inheritance +``` + +2. Override restrictive inheritance: + +```yaml +apiVersion: scheduling.volcano.sh/v1beta1 +kind: Queue +metadata: + name: flexible-team +spec: + parent: restrictive-parent + affinity: + nodeGroupAffinity: + requiredDuringSchedulingIgnoredDuringExecution: + - flexible-nodes +``` + +### Issue: Unexpected affinity behavior + +**Symptoms:** + +- Tasks scheduled on unexpected nodegroups +- Inheritance not working as expected + +**Debugging Steps:** + +1. Enable detailed logging: + +```bash +# Check scheduler logs with higher verbosity +kubectl logs -n volcano-system volcano-scheduler-xxx --tail=100 | grep -i nodegroup +``` + +2. Verify queue configuration: + +```bash +# List all queues with their hierarchy +kubectl get queues -o custom-columns=NAME:.metadata.name,PARENT:.spec.parent,WEIGHT:.spec.weight +``` + +### Issue: Circular queue dependencies + +**Symptoms:** + +- Queues not building ancestry correctly +- Warning messages about cycle detection + +**Solutions:** + +1. Review queue hierarchy: + +```bash +# Check for circular references +kubectl get queues -o custom-columns=NAME:.metadata.name,PARENT:.spec.parent +``` + +2. Fix circular dependencies by updating parent references: + +```yaml +# Remove or correct circular parent relationships +apiVersion: scheduling.volcano.sh/v1beta1 +kind: Queue +metadata: + name: problematic-queue +spec: + parent: "" # Remove circular reference + weight: 1 +``` diff --git a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Scheduler/Plugins/overcommit.md b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Scheduler/Plugins/overcommit.md new file mode 100644 index 00000000..aad3d549 --- /dev/null +++ b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Scheduler/Plugins/overcommit.md @@ -0,0 +1,44 @@ +--- +title: Overcommit +--- + +## Introduction + +In typical cluster environments, the scheduler calculates available idle resources strictly based on physical node capacity minus allocated resources. However, when cluster resources are nearly fully utilized, many PodGroups are rejected from entering the scheduling pipeline and are left completely un-enqueued, which might not be desirable for scenarios where you want the scheduler to tolerate a larger backlog of `pending` pods. + +The **Overcommit Plugin** allows the scheduler to artificially inflate the apparent "idle resources" of the cluster by applying an `overcommit-factor`. This permits more jobs to be enqueued and wait in the scheduling pipeline than the physical resources might typically allow. + +## Mechanism + +The Overcommit plugin evaluates whether a job can be enqueued based on the requested `MinResources` of the PodGroup and the expanded idle resources. + +Expanded idle resource is calculated as: +`Idle Resource = (Total Resource * overcommit-factor) - Used Resource` + +If the job's minimal requested resources can fit into this expanded idle resource pool, the job is permitted to be enqueued. + +## Configuration + +To use the Overcommit Plugin, add it to your `volcano-scheduler-configmap` under the `enqueue` tier, and provide an `overcommit-factor`. + +```yaml +actions: "enqueue, allocate, backfill" +tiers: + - plugins: + - name: overcommit # Enable the overcommit plugin + arguments: + overcommit-factor: 1.2 # The overcommit factor. Default is 1.2 + - name: priority + - name: gang + - name: conformance + - plugins: + - name: drf + - name: predicates + - name: proportion + - name: nodeorder + - name: binpack +``` + +### Arguments + +- **`overcommit-factor`**: A float value greater than or equal to `1.0`. For example, `1.2` means the scheduler will pretend the cluster has 20% more total resources when deciding whether to enqueue jobs into the pipeline. If a value less than `1.0` is provided, the plugin will automatically fallback to the default value of `1.2`. diff --git a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Scheduler/Plugins/pdb.md b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Scheduler/Plugins/pdb.md new file mode 100644 index 00000000..f409308c --- /dev/null +++ b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Scheduler/Plugins/pdb.md @@ -0,0 +1,43 @@ +--- +title: PDB +--- + +## Introduction + +When users deploy highly available jobs or applications on Volcano, they often need to limit the number of pod replicas that can be evicted or destroyed simultaneously to avoid downtime. This constraint is managed via Kubernetes **PodDisruptionBudget (PDB)** resources. + +The **PDB Plugin** ensures that Volcano respects user-defined PDB constraints during the scheduling process, specifically during eviction actions like `reclaim`, `preempt`, and `shuffle`. + +## Prerequisites + +- Your Kubernetes version must be 1.21 or later. +- You must have created valid `PodDisruptionBudget` resources for your workloads. + +## Mechanism + +The PDB Plugin registers several functions (`ReclaimableFn`, `PreemptableFn`, and `VictimTasksFn`) under the `reclaim`, `preempt`, and `shuffle` actions. It maintains a cache of PDBs using `v1.PodDisruptionBudgetLister`. + +During eviction scenarios, the plugin filters out tasks whose eviction would violate the configured PDB constraints. It calculates the `DisruptedPods` (pods whose eviction was processed but not yet observed by the PDB controller) and ensures the remaining available replicas satisfy the budget. + +## Configuration + +To enable the PDB Plugin, update the `volcano-scheduler-configmap` to include the `pdb` plugin in your configuration tiers. + +```yaml +actions: "reclaim, preempt, shuffle" +tiers: +- plugins: + - name: pdb # Enable the PDB plugin + - name: priority + - name: gang + - name: conformance +- plugins: + - name: overcommit + - name: drf + - name: predicates + - name: proportion + - name: nodeorder + - name: binpack +``` + +*Note: The PDB plugin will be actively invoked when actions like `reclaim`, `preempt`, or `shuffle` are executed in the scheduler workflow.* diff --git a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Scheduler/Plugins/rescheduling.md b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Scheduler/Plugins/rescheduling.md new file mode 100644 index 00000000..a4c2e541 --- /dev/null +++ b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Scheduler/Plugins/rescheduling.md @@ -0,0 +1,72 @@ +--- +title: Rescheduling +--- + +## Introduction + +Unbalanced resource utilization across a Kubernetes cluster often occurs due to unreasonable scheduling strategies, dynamic changes in job lifecycles, and node status changes (such as added/removed nodes or taint/affinity modifications). + +The **Rescheduling** plugin addresses these issues by actively rebalancing the cluster's resource utilization among nodes. It accomplishes this by evaluating real resource utilization (via Prometheus metrics) instead of merely the requested resource amounts, and it periodically evicts pods based on custom configured rescheduling strategies. + +## Rescheduling Workflow + +1. **Resource Filter**: Filters workloads which are eligible to be evicted based on queues or labels. +2. **Strategy Evaluation**: Evaluates filtered workloads against the configured rescheduling strategies to determine which ones should be evicted. +3. **Eviction**: Evicts the pods attached to the identified workloads. +4. **Periodical Execution**: Executes the above process periodically. + +## Rescheduling Strategies + +Volcano's rescheduling plugin supports multiple strategies to select potential evictees: + +- **LowNodeUtilization**: Targets unbalanced nodes by evicting pods from highly utilized nodes and shuffling them to low utilized nodes based on configured target thresholds. +- **OfflineOnly (OLO)**: Only selects offline workloads (annotated with `preemptable: true`) for rescheduling. +- **LowPriorityFirst (LPF)**: Sorts workloads by priority and evicts lower priority pods first. +- **ShortLifeTimeFirst (SLTF)**: Sorts workloads by running time. Pods with the shortest life time will be rescheduled first to ensure long-running workloads are not interrupted. +- **BigObjectFirst (BOF)**: Selects workloads which request the most dominant resource and reschedules them first to improve system throughput and avoid small workloads starvation. +- **MoreReplicasFirst (MRF)**: Sorts workloads by replica number. Workloads with the most replicas are rescheduled first, making it friendly to `gang` scheduling by considering `minAvailable`. + +## Configuration + +To enable the Rescheduling plugin, you must configure the `volcano-scheduler-configmap` by adding the `shuffle` action and configuring the `rescheduling` plugin within the tiers. + +```yaml +actions: "enqueue, allocate, backfill, shuffle" ## Add 'shuffle' action +tiers: + - plugins: + - name: priority + - name: gang + - name: conformance + - name: rescheduling ## Rescheduling plugin + arguments: + interval: 5m ## Optional. Frequency at which the strategies are called. Default is 5m. + metricsPeriod: 5m ## Optional. The duration of metrics to consider. Default is 5m. + strategies: ## Required. Strategies to execute in order. + - name: offlineOnly + - name: lowPriorityFirst + - name: lowNodeUtilization + params: + thresholds: + "cpu" : 20 ## Threshold below which a node is considered under-utilized + "memory": 20 + "pods": 20 + targetThresholds: + "cpu" : 50 ## Target utilization to reach for balance + "memory": 50 + "pods": 50 + queueSelector: ## Optional. Select workloads in specified queues as potential evictees. All queues by default. + - default + - test-queue + labelSelector: ## Optional. Select workloads with specified labels as potential evictees. All labels by default. + business: offline + team: test + - plugins: + - name: overcommit + - name: drf + - name: predicates + - name: proportion + - name: nodeorder + - name: binpack +``` + +> **Note:** The rescheduling decisions consider metrics collected from Prometheus. Ensure your metrics configuration is correctly set up as it evaluates real node resource utilization instead of requested resource amounts. diff --git a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Scheduler/Plugins/resource_strategy_fit.md b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Scheduler/Plugins/resource_strategy_fit.md new file mode 100644 index 00000000..0eced3c6 --- /dev/null +++ b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Scheduler/Plugins/resource_strategy_fit.md @@ -0,0 +1,376 @@ +--- +title: Resource Strategy Fit + +--- + + +## Introduction + +The **Resource Strategy Fit Plugin** is a Volcano scheduler plugin that provides intelligent resource allocation strategies for pod scheduling. It supports both global configuration and pod-level annotations to optimize resource utilization across different workloads. + +## Key Features + +- **Multiple Scoring Strategies**: Supports `LeastAllocated` and `MostAllocated` strategies +- **Resource-Specific Configuration**: Configure different strategies for different resource types (CPU, Memory, GPU, etc.) +- **Pod-Level Override**: Allow individual pods to override global configuration via annotations +- **Weighted Scoring**: Fine-tune resource importance with configurable weights +- **Wildcard Support**: Use wildcard patterns for resource matching + +## Installation + +### 1. Install Volcano + +Refer to [Install Guide](https://github.com/volcano-sh/volcano/blob/master/installer/README.md) to install Volcano. + +### 2. Configure the Plugin + +Update the Volcano scheduler configuration: + +```bash +kubectl edit cm -n volcano-system volcano-scheduler-configmap +``` + +Add the `resource-strategy-fit` plugin to your configuration: + +```yaml +kind: ConfigMap +apiVersion: v1 +metadata: + name: volcano-scheduler-configmap + namespace: volcano-system +data: + volcano-scheduler.conf: | + actions: "reclaim, allocate, backfill, preempt" + tiers: + - plugins: + - name: priority + - name: gang + - name: conformance + - plugins: + - name: drf + - name: predicates + - name: resource-strategy-fit + arguments: + resourceStrategyFitWeight: 10 + resources: + cpu: + type: "LeastAllocated" + weight: 1 + memory: + type: "LeastAllocated" + weight: 1 + nvidia.com/gpu: + type: "MostAllocated" + weight: 2 +``` + +## Global Configuration + +### Basic Configuration + +The plugin supports two main scoring strategies: + +| Strategy | Description | Use Case | +|----------|-------------|----------| +| `LeastAllocated` | Prefers nodes with more available resources | General workloads, load balancing | +| `MostAllocated` | Prefers nodes with higher resource utilization | GPU workloads, resource consolidation | + +### Configuration Parameters + +```yaml +arguments: + resourceStrategyFitWeight: 10 # Plugin weight (default: 10) + resources: # Resource-specific configuration + cpu: # Resource name + type: "LeastAllocated" # Scoring strategy + weight: 1 # Resource weight + memory: + type: "LeastAllocated" + weight: 1 + nvidia.com/gpu: + type: "MostAllocated" + weight: 2 +``` + +### Advanced Configuration Examples + +#### 1. GPU-Optimized Configuration + +```yaml +arguments: + resourceStrategyFitWeight: 20 + resources: + cpu: + type: "LeastAllocated" + weight: 1 + memory: + type: "LeastAllocated" + weight: 1 + nvidia.com/gpu: + type: "MostAllocated" + weight: 5 + nvidia.com/gpu/*: # Wildcard for all GPU types + type: "MostAllocated" + weight: 3 +``` + +#### 2. Mixed Strategy Configuration + +```yaml +arguments: + resourceStrategyFitWeight: 15 + resources: + cpu: + type: "LeastAllocated" + weight: 3 + memory: + type: "MostAllocated" + weight: 1 + example.com/custom-resource: + type: "LeastAllocated" + weight: 2 +``` + +## Pod-Level Configuration + +### Pod Annotations + +Individual pods can override the global configuration using annotations: + +| Annotation Key | Description | Example | +|----------------|-------------|---------| +| `volcano.sh/resource-strategy-scoring-type` | Override scoring strategy | `"LeastAllocated"` or `"MostAllocated"` | +| `volcano.sh/resource-strategy-weight` | Override resource weights | `{"cpu": 2, "memory": 1, "nvidia.com/gpu": 3}` | + +### Pod-Level Examples + +#### 1. Override Strategy for Specific Pod + +```yaml +apiVersion: v1 +kind: Pod +metadata: + name: gpu-workload + annotations: + volcano.sh/resource-strategy-scoring-type: "MostAllocated" + volcano.sh/resource-strategy-weight: '{"nvidia.com/gpu": 5, "cpu": 1}' +spec: + containers: + - name: gpu-container + image: nvidia/cuda:11.0-runtime + resources: + requests: + nvidia.com/gpu: 1 + cpu: "2" + memory: "4Gi" + limits: + nvidia.com/gpu: 1 + cpu: "2" + memory: "4Gi" + schedulerName: volcano +``` + +#### 2. Custom Resource Weights + +```yaml +apiVersion: v1 +kind: Pod +metadata: + name: custom-resource-pod + annotations: + volcano.sh/resource-strategy-scoring-type: "LeastAllocated" + volcano.sh/resource-strategy-weight: '{"cpu": 3, "memory": 2, "example.com/custom": 5}' +spec: + containers: + - name: app + image: my-app:latest + resources: + requests: + cpu: "1" + memory: "2Gi" + example.com/custom: "1" + schedulerName: volcano +``` + +## Volcano Job Integration + +### Basic Volcano Job + +```yaml +apiVersion: batch.volcano.sh/v1alpha1 +kind: Job +metadata: + name: resource-strategy-job +spec: + minAvailable: 2 + schedulerName: volcano + plugins: + env: [] + svc: [] + tasks: + - replicas: 2 + name: worker + template: + metadata: + annotations: + volcano.sh/resource-strategy-scoring-type: "LeastAllocated" + volcano.sh/resource-strategy-weight: '{"cpu": 2, "memory": 1}' + spec: + containers: + - name: worker + image: my-worker:latest + resources: + requests: + cpu: "2" + memory: "4Gi" + limits: + cpu: "2" + memory: "4Gi" + restartPolicy: Never +``` + +### Multi-Task Job with Different Strategies + +```yaml +apiVersion: batch.volcano.sh/v1alpha1 +kind: Job +metadata: + name: mixed-strategy-job +spec: + minAvailable: 3 + schedulerName: volcano + plugins: + env: [] + svc: [] + tasks: + - replicas: 1 + name: gpu-task + template: + metadata: + annotations: + volcano.sh/resource-strategy-scoring-type: "MostAllocated" + volcano.sh/resource-strategy-weight: '{"nvidia.com/gpu": 5, "cpu": 1}' + spec: + containers: + - name: gpu-worker + image: gpu-app:latest + resources: + requests: + nvidia.com/gpu: 1 + cpu: "1" + memory: "2Gi" + - replicas: 2 + name: cpu-task + template: + metadata: + annotations: + volcano.sh/resource-strategy-scoring-type: "LeastAllocated" + volcano.sh/resource-strategy-weight: '{"cpu": 3, "memory": 2}' + spec: + containers: + - name: cpu-worker + image: cpu-app:latest + resources: + requests: + cpu: "2" + memory: "4Gi" +``` + +## Use Cases + +### 1. GPU Workload Optimization + +For GPU-intensive workloads, use `MostAllocated` strategy to consolidate GPU usage: + +```yaml +# Global configuration +arguments: + resourceStrategyFitWeight: 20 + resources: + nvidia.com/gpu: + type: "MostAllocated" + weight: 5 + cpu: + type: "LeastAllocated" + weight: 1 +``` + +### 2. Load Balancing + +For general workloads, use `LeastAllocated` strategy to distribute load evenly: + +```yaml +# Global configuration +arguments: + resourceStrategyFitWeight: 10 + resources: + cpu: + type: "LeastAllocated" + weight: 2 + memory: + type: "LeastAllocated" + weight: 1 +``` + +### 3. Mixed Workloads + +Combine different strategies for different resource types: + +```yaml +# Global configuration +arguments: + resourceStrategyFitWeight: 15 + resources: + cpu: + type: "LeastAllocated" + weight: 3 + memory: + type: "LeastAllocated" + weight: 2 + nvidia.com/gpu: + type: "MostAllocated" + weight: 5 +``` + +## Troubleshooting + +### Verify Plugin Configuration + +Check the scheduler logs to ensure the plugin is loaded correctly: + +```bash +kubectl logs -n volcano-system deployment/volcano-scheduler | grep "resource-strategy-fit" +``` + +Expected output: +``` +Initialize resource-strategy-fit plugin with configuration: {resourceStrategyFitWeight: 10, resources: {...}} +``` + +### Common Issues + +1. **Plugin not loaded**: Ensure the plugin is included in the scheduler configuration +2. **Invalid annotations**: Check JSON format for pod-level weight annotations +3. **Resource not found**: Verify resource names match exactly (case-sensitive) +4. **Scoring not working**: Check plugin weight and resource weights are properly configured + +### Debug Information + +Enable debug logging to see scoring decisions: + +```yaml +# Add to scheduler configuration +arguments: + resourceStrategyFitWeight: 10 + # ... other configuration + logLevel: 4 # Enable debug logging +``` + +## Best Practices + +1. **Start with global configuration** for consistent behavior across all workloads +2. **Use pod-level annotations sparingly** for specific workload requirements +3. **Test different strategies** to find optimal configuration for your use case +4. **Monitor resource utilization** after applying the plugin +5. **Use appropriate weights** to balance different resource types +6. **Consider workload characteristics** when choosing between `LeastAllocated` and `MostAllocated` diff --git a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Scheduler/Plugins/resourcequota.md b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Scheduler/Plugins/resourcequota.md new file mode 100644 index 00000000..1a9f8411 --- /dev/null +++ b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Scheduler/Plugins/resourcequota.md @@ -0,0 +1,40 @@ +--- +title: ResourceQuota +--- + +## Introduction + +In a multi-tenant cluster, administrators commonly use Kubernetes `ResourceQuota` to limit the total resource consumption per namespace. However, by default, the scheduler may continuously try to enqueue and schedule pod groups even if the namespace's `ResourceQuota` is insufficient, leading to pending jobs and scheduler overhead. + +The **ResourceQuota Plugin** solves this problem by ensuring that a PodGroup is only allowed to enqueue if there is sufficient resource capacity in the namespace to satisfy the minimal resource quota required by the PodGroup. + +## Mechanism + +Volcano implements the ResourceQuota plugin using the `AddJobEnqueueableFn` function. + +1. **Namespace Capacity Cache**: The plugin maintains an `RQStatus` map to cache all resource quotas for each namespace. +2. **Evaluation**: It calculates the `minQuotas`—which defines the minimal resource quota required to run the pod group. +3. **Enqueue Admission**: When evaluating pending PodGroups, the plugin allows them to enqueue *only* if the namespace's Kubernetes `ResourceQuota` has enough available capacity. It also considers PodGroups that have already been permitted in the current scheduling round to prevent race conditions that could exceed the namespace quota. + +## Configuration + +To enable the ResourceQuota Plugin, add it to your `volcano-scheduler-configmap`. + +```yaml +actions: "enqueue, allocate, backfill" +tiers: + - plugins: + - name: priority + - name: gang + - name: conformance + - name: resourcequota # Enable the ResourceQuota plugin + - plugins: + - name: overcommit + - name: drf + - name: predicates + - name: proportion + - name: nodeorder + - name: binpack +``` + +Once enabled, Volcano will respect the Kubernetes native `ResourceQuota` configuration and prevent jobs from enqueuing into the scheduling pipeline if they cannot possibly fit within their namespace quota. diff --git a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Scheduler/Plugins/task_topology.md b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Scheduler/Plugins/task_topology.md new file mode 100644 index 00000000..58f02186 --- /dev/null +++ b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Scheduler/Plugins/task_topology.md @@ -0,0 +1,66 @@ +--- +title: Task Topology +--- + + +## Environment setup + +### Install volcano + +Refer to [Install Guide](https://github.com/volcano-sh/volcano/blob/master/installer/README.md) to install volcano. + +### Update scheduler configmap + +After installed, update the scheduler configuration: + +```shell +kubectl edit configmap -n volcano-system volcano-scheduler-configmap +``` + +Register `task-topology` plugin in configmap + +```yaml +kind: ConfigMap +apiVersion: v1 +metadata: + name: volcano-scheduler-configmap + namespace: volcano-system +data: + volcano-scheduler.conf: | + actions: "enqueue, allocate, backfill" + tiers: + - plugins: + - name: priority + - name: gang + - name: conformance + - plugins: + - name: drf + - name: predicates + - name: task-topology + arguments: + task-topology.weight: 10 + - name: proportion + - name: nodeorder + - name: binpack +``` + +### Running Jobs + +Take tensorflow job as sample. + +#### Install kubeflow/tf-operator + +Refer to [Install Guide](https://www.kubeflow.org/docs/started/getting-started/) to install kubeflow, tf-operator included. + +#### Edit yaml of tfjob + +1. add annotations in volcano job or tensorflow job in format below. + 1. `affinity` annotation indicates that tasks have connections between each other, so they should be set on same nodes; + 2. `anti-affinity` annotation indicates that tasks do not have connections between each other, so they should be set on different nodes; + 3. `task-order` annotation indicates the order that tasks should be allocated. For example, `ps,worker` means scheduler should schedule `ps` tasks first. After all `ps` tasks were allocated, scheduler started to schedule `worker` tasks. **This annotation is not a required field.** + + ```yaml + volcano.sh/task-topology-affinity: "ps,worker;ps,evaluator" + volcano.sh/task-topology-anti-affinity: "ps;worker,chief;chief,evaluator" + volcano.sh/task-topology-task-order: "ps,worker,chief,evaluator" + ``` diff --git a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Scheduler/Plugins/usage.md b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Scheduler/Plugins/usage.md new file mode 100644 index 00000000..9b7c1cf9 --- /dev/null +++ b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Scheduler/Plugins/usage.md @@ -0,0 +1,103 @@ +--- +title: Usage-based Scheduling +--- + +## Introduction + +Currently, Kubernetes pod scheduling is based on resource requests and node allocatable resources rather than the actual node usage. This can lead to unbalanced resource usage across compute nodes, where pods might be scheduled to nodes with higher actual usage and lower allocation rates. + +The **Usage-based scheduling** plugin allows Volcano to schedule pods based on real-time node usage. This helps to balance the cluster's actual resource usage and avoid scheduling pods on overloaded nodes. + +## Mechanism + +The Usage-based scheduling plugin primarily performs three functions: +1. **Predicate**: Filters nodes whose actual resource usage (e.g., CPU, Memory) is higher than the usage threshold defined by the user. +2. **Prioritize (NodeOrder)**: Prioritizes nodes with lower real-time usage, ensuring that nodes with more idle resources get higher scores. +3. **Preempt**: Pods on nodes with lower usage can preempt pods on nodes with higher usage to balance the cluster load. + +Volcano retrieves the node usage monitoring data from a metrics server (such as Prometheus, Prometheus Adaptor, or Elasticsearch). + +## Configuration + +To enable the Usage-based scheduling plugin, configure the `volcano-scheduler-configmap`. + +```yaml +actions: "enqueue, allocate, backfill" +tiers: + - plugins: + - name: priority + - name: gang + - name: conformance + - name: usage # usage based scheduling plugin + enablePredicate: false # If false, new pod scheduling is not disabled when node load reaches the threshold. If true or empty, new pod scheduling is disabled. + arguments: + usage.weight: 5 + cpu.weight: 1 + memory.weight: 1 + thresholds: + cpu: 80 # The node cannot schedule new pods if its actual CPU load reaches 80%. + mem: 70 # The node cannot schedule new pods if its actual Memory load reaches 70%. + - plugins: + - name: overcommit + - name: drf + - name: predicates + - name: proportion + - name: nodeorder + - name: binpack + +metrics: # metrics server related configuration + type: prometheus # Optional. The metrics source type. Supports "prometheus", "prometheus_adapt", and "elasticsearch". prometheus by default. + address: http://192.168.0.10:9090 # Mandatory. The metrics source address. + interval: 30s # Optional. The scheduler pulls metrics from Prometheus with this interval, 30s by default. +``` + +## Integrating with Metrics Sources + +### 1. Prometheus Adaptor (Custom Metrics API) + +**Recommended approach**. Ensure the Prometheus Adaptor is installed and custom metrics API is available. Add the following rules to Prometheus Adaptor configuration: + +```yaml +rules: + - seriesQuery: '{__name__=~"node_cpu_seconds_total"}' + resources: + overrides: + instance: + resource: node + name: + matches: "node_cpu_seconds_total" + as: "node_cpu_usage_avg" + metricsQuery: avg_over_time((1 - avg (irate(<<.Series>>{mode="idle"}[5m])) by (instance))[10m:30s]) + - seriesQuery: '{__name__=~"node_memory_MemTotal_bytes"}' + resources: + overrides: + instance: + resource: node + name: + matches: "node_memory_MemTotal_bytes" + as: "node_memory_usage_avg" + metricsQuery: avg_over_time(((1-node_memory_MemAvailable_bytes/<<.Series>>))[10m:30s]) +``` + +Set the metrics `type` in the scheduler configmap to `prometheus_adaptor`. + +### 2. Prometheus + +Set the `metrics.type` to `prometheus` and provide the `metrics.address` directly to the Prometheus server as shown in the configuration example. + +### 3. Elasticsearch + +Set the `metrics.type` to `elasticsearch` and provide the following configuration: +```yaml +metrics: + type: elasticsearch + address: http://192.168.0.10:9200 + interval: 30s + tls: + insecureSkipVerify: "false" + elasticsearch: + index: "custom-index-name" # Optional. "metricbeat-*" by default + username: "" + password: "" + hostnameFieldName: "host.hostname" # Optional. "host.hostname" by default +``` diff --git a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/UserGuide/user_guide.md b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/UserGuide/user_guide.md index 20fef946..1c76558a 100644 --- a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/UserGuide/user_guide.md +++ b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/UserGuide/user_guide.md @@ -6,8 +6,8 @@ sidebar_position: 5 本节为 Volcano 用户指南。 * [Ascend vNPU 用户指南](./user_guide_how_to_use_vnpu.md) -* [Capacity 插件用户指南](./user_guide_how_to_use_capacity_plugin.md) -* [Cooldown Protection(CDP)插件用户指南](./user_guide_how_to_use_cdp_plugin.md) +* [Capacity 插件用户指南](../Scheduler/Plugins/capacity.md) +* [Cooldown Protection(CDP)插件用户指南](../Scheduler/Plugins/cdp.md) * [Extender 用户指南](./user_guide_how_to_use_extender.md) * [GPU Number 用户指南](./user_guide_how_to_use_gpu_number.md) * [GPU Sharing 用户指南](./user_guide_how_to_use_gpu_sharing.md) @@ -17,17 +17,17 @@ sidebar_position: 5 * [动态资源分配(DRA)用户指南](./user_guide_how_to_enable_dra.md) * [大规模场景下调优 Volcano 性能](./user_guide_how_to_tune_volcano_performance.md) * [如何为 Job 配置 PriorityClass](./user_guide_how_to_configure_priorityclass_for_job.md) -* [MPI 插件用户指南](./user_guide_how_to_use_mpi_plugin.md) +* [MPI 插件用户指南](../Controller/Plugins/mpi.md) * [NUMA 感知调度用户指南](./user_guide_how_to_use_numa_aware.md) * [网络拓扑感知调度用户指南](./user_guide_how_to_use_network_topology_aware_scheduling.md) -* [NodeGroup 插件用户指南](./user_guide_how_to_use_nodegroup_plugin.md) -* [PyTorch 插件用户指南](./user_guide_how_to_use_pytorch_plugin.md) -* [Ray 插件用户指南](./user_guide_how_to_use_ray_plugin.md) -* [Resource Strategy Fit 插件用户指南](./user_guide_how_to_use_resource_strategy_fit_plugin.md) -* [Task Topology 插件用户指南](./user_guide_how_to_use_task_topology_plugin.md) +* [NodeGroup 插件用户指南](../Scheduler/Plugins/nodegroup.md) +* [PyTorch 插件用户指南](../Controller/Plugins/pytorch.md) +* [Ray 插件用户指南](../Controller/Plugins/ray.md) +* [Resource Strategy Fit 插件用户指南](../Scheduler/Plugins/resource_strategy_fit.md) +* [Task Topology 插件用户指南](../Scheduler/Plugins/task_topology.md) * [HyperNode 自动发现用户指南](./user_guide_how_to_use_hypernode_auto_discovery.md) -* [Volcano Job 插件 -- Env 用户指南](./user_guide_how_to_use_env_plugin.md) -* [Volcano Job 插件 -- SSH 用户指南](./user_guide_how_to_use_ssh_plugin.md) -* [Volcano Job 插件 -- SVC 用户指南](./user_guide_how_to_use_svc_plugin.md) +* [Volcano Job 插件 -- Env 用户指南](../Controller/Plugins/env.md) +* [Volcano Job 插件 -- SSH 用户指南](../Controller/Plugins/ssh.md) +* [Volcano Job 插件 -- SVC 用户指南](../Controller/Plugins/svc.md) * [Volcano vGPU 用户指南](./user_guide_how_to_use_volcano_vgpu.md) * [Scheduling Gates Queue Admission 用户指南](./user_guide_how_to_use_scheduling_gates_queue_admission.md) From 8912fe64a1bee55c2e110f77b55886c51ee1c43d Mon Sep 17 00:00:00 2001 From: hemantch01 Date: Wed, 3 Jun 2026 15:01:53 +0000 Subject: [PATCH 4/7] fix: update broken links across blog, versioned docs, and i18n after plugin restructure - Update all /docs/UserGuide/user_guide_how_to_use_* links to new paths - Update all /docs/Plugins/user_guide_how_to_use_* links to new paths - Fix deviceshare.md relative links to UserGuide docs - Scheduler plugins: capacity, cdp, nodegroup, resource_strategy_fit, task_topology - Controller plugins: ray, pytorch, mpi, ssh, svc, env Signed-off-by: hemantch01 --- .gitignore | 1 + blog/Volcano-1.10.0-release.md | 4 ++-- blog/Volcano-1.13.0-release.md | 6 +++--- blog/Volcano-1.7.0-release-en.md | 2 +- blog/Volcano-1.9.0-release.md | 2 +- docs/Ecosystem/RayOnVolcano.md | 2 +- docs/KeyFeatures/QueueResourceManagement.md | 2 +- docs/Scheduler/Plugins/deviceshare.md | 2 +- .../Volcano-1.10.0-release.md | 4 ++-- .../Volcano-1.13.0-release.md | 6 +++--- .../Volcano-1.7.0-release-en.md | 2 +- .../docusaurus-plugin-content-blog/Volcano-1.9.0-release.md | 4 ++-- .../current/Ecosystem/RayOnVolcano.md | 2 +- .../current/KeyFeatures/QueueResourceManagement.md | 2 +- .../current/Scheduler/Plugins/deviceshare.md | 2 +- .../version-v1.10.0/Concepts/Queue.md | 2 +- .../version-v1.10.0/Ecosystem/RayOnVolcano.md | 2 +- .../version-v1.11.0/Concepts/Queue.md | 2 +- .../version-v1.11.0/Ecosystem/RayOnVolcano.md | 2 +- .../version-v1.11.0/KeyFeatures/QueueResourceManagement.md | 2 +- .../version-v1.12.0/Concepts/Queue.md | 2 +- .../version-v1.12.0/Ecosystem/RayOnVolcano.md | 2 +- .../version-v1.12.0/KeyFeatures/QueueResourceManagement.md | 2 +- .../version-v1.7.0/Concepts/Queue.md | 2 +- .../version-v1.7.0/Ecosystem/RayOnVolcano.md | 2 +- .../version-v1.8.2/Concepts/Queue.md | 2 +- .../version-v1.8.2/Ecosystem/RayOnVolcano.md | 2 +- .../version-v1.9.0/Concepts/Queue.md | 2 +- .../version-v1.9.0/Ecosystem/RayOnVolcano.md | 2 +- versioned_docs/version-v1.10.0/Concepts/Queue.md | 2 +- versioned_docs/version-v1.10.0/Ecosystem/RayOnVolcano.md | 2 +- versioned_docs/version-v1.11.0/Concepts/Queue.md | 2 +- versioned_docs/version-v1.11.0/Ecosystem/RayOnVolcano.md | 2 +- .../version-v1.11.0/KeyFeatures/QueueResourceManagement.md | 2 +- versioned_docs/version-v1.12.0/Concepts/Queue.md | 2 +- versioned_docs/version-v1.12.0/Ecosystem/RayOnVolcano.md | 2 +- .../version-v1.12.0/KeyFeatures/QueueResourceManagement.md | 2 +- versioned_docs/version-v1.7.0/Concepts/Queue.md | 2 +- versioned_docs/version-v1.7.0/Ecosystem/RayOnVolcano.md | 2 +- versioned_docs/version-v1.8.2/Concepts/Queue.md | 2 +- versioned_docs/version-v1.8.2/Ecosystem/RayOnVolcano.md | 2 +- versioned_docs/version-v1.9.0/Concepts/Queue.md | 2 +- versioned_docs/version-v1.9.0/Ecosystem/RayOnVolcano.md | 2 +- 43 files changed, 50 insertions(+), 49 deletions(-) diff --git a/.gitignore b/.gitignore index 77d550f7..c10010f1 100644 --- a/.gitignore +++ b/.gitignore @@ -21,3 +21,4 @@ yarn-error.log* +volcano/ diff --git a/blog/Volcano-1.10.0-release.md b/blog/Volcano-1.10.0-release.md index f26f9954..90e0190d 100644 --- a/blog/Volcano-1.10.0-release.md +++ b/blog/Volcano-1.10.0-release.md @@ -62,7 +62,7 @@ Volcano introduced the elastic queue capacity scheduling feature in version v1.9 For detailed design information on elastic queue capacity scheduling, refer to the [Capacity Scheduling Design Document](https://github.com/volcano-sh/volcano/blob/master/docs/design/capacity-scheduling.md). -For a step-by-step guide on using the capacity plugin, see the [Capacity Plugin User Guide](/docs/UserGuide/user_guide_how_to_use_capacity_plugin). +For a step-by-step guide on using the capacity plugin, see the [Capacity Plugin User Guide](/docs/Scheduler/Plugins/capacity). Configure each dimension deserved resource samples for the queue: @@ -88,7 +88,7 @@ For instructions on using the `Device Plugin` to report various GPU models, plea In version v1.10.0, the `capacity` plugin is the default for queue management. Note that the `capacity` and `proportion` plugins are incompatible, so after upgrading to v1.10.0, you must set the `deserved` field for queues to ensure proper functionality. -For detailed instructions, please refer to the [Capacity Plugin User Guide](/docs/UserGuide/user_guide_how_to_use_capacity_plugin). +For detailed instructions, please refer to the [Capacity Plugin User Guide](/docs/Scheduler/Plugins/capacity). The `capacity` plugin allocates cluster resources based on the `deserved` value set by the user, while the `proportion` plugin dynamically allocates resources according to queue weight. Users can select either the `capacity` or `proportion` plugin for queue management based on their specific needs. diff --git a/blog/Volcano-1.13.0-release.md b/blog/Volcano-1.13.0-release.md index c9567e43..fb8ad2e3 100644 --- a/blog/Volcano-1.13.0-release.md +++ b/blog/Volcano-1.13.0-release.md @@ -142,7 +142,7 @@ Sincerely thanks to community developer: @[Wonki4](https://github.com/Wonki4) Design documentation: [Ray Framework Plugin Design Doc](https://github.com/volcano-sh/volcano/blob/master/docs/design/distributed-framework-plugins.md). -Usage documentation: [Ray Plugin User Guide](/docs/UserGuide/user_guide_how_to_use_ray_plugin). +Usage documentation: [Ray Plugin User Guide](/docs/Controller/Plugins/ray). ## Introduce HCCL Plugin Support @@ -189,7 +189,7 @@ Sincerely thanks to community developers: @[JesseStutler](https://github.com/Jes NodeGroup design documentation: [NodeGroup Design.](https://github.com/volcano-sh/volcano/blob/master/docs/design/node-group.md) -NodeGroup usage documentation: [NodeGroup User Guide.](/docs/UserGuide/user_guide_how_to_use_nodegroup_plugin) +NodeGroup usage documentation: [NodeGroup User Guide.](/docs/Scheduler/Plugins/nodegroup) ## Introduce ResourceStrategyFit Plugin @@ -274,7 +274,7 @@ Sincerely thanks to community developers: @[LY-today](https://github.com/LY-toda Design documentation: [ResourceStrategyFit Design](https://github.com/volcano-sh/volcano/blob/master/docs/design/resource-strategy-fit-scheduling.md) -Usage documentation: [ResourceStrategyFit User Guide](/docs/UserGuide/user_guide_how_to_use_resource_strategy_fit_plugin) +Usage documentation: [ResourceStrategyFit User Guide](/docs/Scheduler/Plugins/resource_strategy_fit) ## Decouple Colocation from OS diff --git a/blog/Volcano-1.7.0-release-en.md b/blog/Volcano-1.7.0-release-en.md index 0c968ca8..3c4db30a 100644 --- a/blog/Volcano-1.7.0-release-en.md +++ b/blog/Volcano-1.7.0-release-en.md @@ -33,7 +33,7 @@ Other enhanced plugins include those for TensorFlow, MPI, and PyTorch Jobs. They Volcano also provides an extended development framework for you to tailor Job plugins to your needs. Design Documentation: [Pytorch-plugin](https://github.com/volcano-sh/volcano/blob/master/docs/design/distributed-framework-plugins.md#pytorch-plugin)
-User Guide: [Pytorch Plugin User Guide](/docs/UserGuide/user_guide_how_to_use_pytorch_plugin)
+User Guide: [Pytorch Plugin User Guide](/docs/Controller/Plugins/pytorch)
Issue:[#2292](https://github.com/volcano-sh/volcano/issues/2292)
diff --git a/blog/Volcano-1.9.0-release.md b/blog/Volcano-1.9.0-release.md index 15fda873..46813776 100644 --- a/blog/Volcano-1.9.0-release.md +++ b/blog/Volcano-1.9.0-release.md @@ -59,7 +59,7 @@ spec: ``` For a complete usage example of queue elastic capacity scheduling, please refer to: -[How to use capacity plugin](/docs/UserGuide/user_guide_how_to_use_capacity_plugin). +[How to use capacity plugin](/docs/Scheduler/Plugins/capacity). For the elastic queue capacity design document, please refer to: [Capacity scheduling Design](https://github.com/volcano-sh/volcano/blob/master/docs/design/capacity-scheduling.md). diff --git a/docs/Ecosystem/RayOnVolcano.md b/docs/Ecosystem/RayOnVolcano.md index a3e8fc3b..be1900a4 100644 --- a/docs/Ecosystem/RayOnVolcano.md +++ b/docs/Ecosystem/RayOnVolcano.md @@ -203,4 +203,4 @@ ray job submit --address http://localhost:8265 -- python -c "import ray; ray.ini ### Learn More - For KubeRay integration details, visit the [KubeRay Volcano Scheduler Documentation](https://docs.ray.io/en/latest/cluster/kubernetes/k8s-ecosystem/volcano.html#kuberay-integration-with-volcano) -- For Volcano Job Ray plugin details, see the [Volcano Ray Plugin Guide](/docs/Plugins/user_guide_how_to_use_ray_plugin) \ No newline at end of file +- For Volcano Job Ray plugin details, see the [Volcano Ray Plugin Guide](/docs/Controller/Plugins/ray) \ No newline at end of file diff --git a/docs/KeyFeatures/QueueResourceManagement.md b/docs/KeyFeatures/QueueResourceManagement.md index 12e71953..dca21c71 100644 --- a/docs/KeyFeatures/QueueResourceManagement.md +++ b/docs/KeyFeatures/QueueResourceManagement.md @@ -64,7 +64,7 @@ Queue scheduling in Volcano involves the following core actions: Volcano provides two core queue scheduling plugins: #### capacity plugin -[capacity plugin](/docs/Plugins/user_guide_how_to_use_capacity_plugin) supports setting queue's deserved resource amount through explicit configuration, as shown in this example: +[capacity plugin](/docs/Scheduler/Plugins/capacity) supports setting queue's deserved resource amount through explicit configuration, as shown in this example: ```yaml apiVersion: scheduling.volcano.sh/v1beta1 diff --git a/docs/Scheduler/Plugins/deviceshare.md b/docs/Scheduler/Plugins/deviceshare.md index 645ddd38..4448f6bc 100644 --- a/docs/Scheduler/Plugins/deviceshare.md +++ b/docs/Scheduler/Plugins/deviceshare.md @@ -38,4 +38,4 @@ tiers: - name: binpack ``` -> **Note:** For specific guides on how to configure your workloads to request shared GPUs or NPUs, please refer to the dedicated guides for [GPU Sharing](../UserGuide/user_guide_how_to_use_gpu_sharing) and [vNPU](../UserGuide/user_guide_how_to_use_vnpu). +> **Note:** For specific guides on how to configure your workloads to request shared GPUs or NPUs, please refer to the dedicated guides for [GPU Sharing](../../UserGuide/user_guide_how_to_use_gpu_sharing) and [vNPU](../../UserGuide/user_guide_how_to_use_vnpu). diff --git a/i18n/zh-Hans/docusaurus-plugin-content-blog/Volcano-1.10.0-release.md b/i18n/zh-Hans/docusaurus-plugin-content-blog/Volcano-1.10.0-release.md index 530c5895..68aa7002 100644 --- a/i18n/zh-Hans/docusaurus-plugin-content-blog/Volcano-1.10.0-release.md +++ b/i18n/zh-Hans/docusaurus-plugin-content-blog/Volcano-1.10.0-release.md @@ -65,7 +65,7 @@ Volcano在v1.9版本发布了弹性队列容量capacity调度功能,用户可 弹性队列容量`capacity`调度的设计文档请参考:[Capacity scheduling Design](https://github.com/volcano-sh/volcano/blob/master/docs/design/capacity-scheduling.md) -使用指导请参考:[Capacity Plugin User Guide](/docs/Plugins/user_guide_how_to_use_capacity_plugin). +使用指导请参考:[Capacity Plugin User Guide](/docs/Scheduler/Plugins/capacity). 为队列配置每一维度deserved使用样例: @@ -89,7 +89,7 @@ spec: **注意:** -`capacity`在v1.10.0版本中作为了默认的队列管理插件,`capacity`与`proportion`插件互相冲突,当升级到v1.10.0后,你需要再设置队列的`deserved`字段,以保证队列功能正常工作,具体的使用说明请参考:[Capacity Plugin User Guide](/docs/Plugins/user_guide_how_to_use_capacity_plugin). +`capacity`在v1.10.0版本中作为了默认的队列管理插件,`capacity`与`proportion`插件互相冲突,当升级到v1.10.0后,你需要再设置队列的`deserved`字段,以保证队列功能正常工作,具体的使用说明请参考:[Capacity Plugin User Guide](/docs/Scheduler/Plugins/capacity). `capacity`插件根据用户指定的队列`deserved`值来划分集群资源,而`proportion`插件则根据队列权重动态划分集群资源,用户可以根据实际场景选择使用`capacity`或者`proportion`插件进行队列管理。proportion插件的介绍请参考:[proportion plugin](/docs/Scheduler/Plugins/proportion). diff --git a/i18n/zh-Hans/docusaurus-plugin-content-blog/Volcano-1.13.0-release.md b/i18n/zh-Hans/docusaurus-plugin-content-blog/Volcano-1.13.0-release.md index 87c6409d..0b581a8e 100644 --- a/i18n/zh-Hans/docusaurus-plugin-content-blog/Volcano-1.13.0-release.md +++ b/i18n/zh-Hans/docusaurus-plugin-content-blog/Volcano-1.13.0-release.md @@ -141,7 +141,7 @@ labels: 设计文档:[Ray Framework Plugin Design Doc](https://github.com/volcano-sh/volcano/blob/master/docs/design/distributed-framework-plugins.md)。 -使用文档:[Ray Plugin User Guide](/docs/Plugins/user_guide_how_to_use_ray_plugin)。 +使用文档:[Ray Plugin User Guide](/docs/Controller/Plugins/ray)。 ## 新增HCCL插件支持 @@ -188,7 +188,7 @@ tiers: NodeGroup设计文档:[NodeGroup Design.](https://github.com/volcano-sh/volcano/blob/master/docs/design/node-group.md) -NodeGroup使用文档:[NodeGroup User Guide.](/docs/Plugins/user_guide_how_to_use_nodegroup_plugin) +NodeGroup使用文档:[NodeGroup User Guide.](/docs/Scheduler/Plugins/nodegroup) ## 引入ResourceStrategyFit插件 @@ -273,7 +273,7 @@ tiers: 设计文档:[ResourceStrategyFit Design](https://github.com/volcano-sh/volcano/blob/master/docs/design/resource-strategy-fit-scheduling.md) -使用文档:[ResourceStrategyFit User Guide](/docs/Plugins/user_guide_how_to_use_resource_strategy_fit_plugin) +使用文档:[ResourceStrategyFit User Guide](/docs/Scheduler/Plugins/resource_strategy_fit) ## 混部能力与操作系统解耦 diff --git a/i18n/zh-Hans/docusaurus-plugin-content-blog/Volcano-1.7.0-release-en.md b/i18n/zh-Hans/docusaurus-plugin-content-blog/Volcano-1.7.0-release-en.md index 3240a2e3..e6a44fa0 100644 --- a/i18n/zh-Hans/docusaurus-plugin-content-blog/Volcano-1.7.0-release-en.md +++ b/i18n/zh-Hans/docusaurus-plugin-content-blog/Volcano-1.7.0-release-en.md @@ -32,7 +32,7 @@ Volcano社区当前提供了TensorFlow、MPI和Pytorch等Job强化功能插件 此外,Volcano还提供了Job插件的扩展开发框架,满足高阶用户针对复杂场景定制Job插件的需求。 设计文档:[Pytorch-plugin](https://github.com/volcano-sh/volcano/blob/master/docs/design/distributed-framework-plugins.md#pytorch-plugin)
-用户手册:[PyTorch 插件用户指南](/docs/Plugins/user_guide_how_to_use_pytorch_plugin)
+用户手册:[PyTorch 插件用户指南](/docs/Controller/Plugins/pytorch)
Issue:[#2292](https://github.com/volcano-sh/volcano/issues/2292)
#### 2. Ray on Volcano diff --git a/i18n/zh-Hans/docusaurus-plugin-content-blog/Volcano-1.9.0-release.md b/i18n/zh-Hans/docusaurus-plugin-content-blog/Volcano-1.9.0-release.md index d45e4d26..c6531127 100644 --- a/i18n/zh-Hans/docusaurus-plugin-content-blog/Volcano-1.9.0-release.md +++ b/i18n/zh-Hans/docusaurus-plugin-content-blog/Volcano-1.9.0-release.md @@ -59,7 +59,7 @@ spec: nvidia.com/v100: 80 ``` -队列弹性容量调度的完整使用例子,请参考:[How to use capacity plugin](/docs/Plugins/user_guide_how_to_use_capacity_plugin). +队列弹性容量调度的完整使用例子,请参考:[How to use capacity plugin](/docs/Scheduler/Plugins/capacity). 关于弹性队列容量设计文档,请参考[Capacity scheduling Design](https://github.com/volcano-sh/volcano/blob/master/docs/design/capacity-scheduling.md). @@ -94,7 +94,7 @@ metadata: - ``` -该功能对应的调度插件名为nodegroup,完整使用例子请参考:[How to use nodegroup plugin](/docs/Plugins/user_guide_how_to_use_nodegroup_plugin). +该功能对应的调度插件名为nodegroup,完整使用例子请参考:[How to use nodegroup plugin](/docs/Scheduler/Plugins/nodegroup). 详细设计文档请参考:[The nodegroup design](https://github.com/volcano-sh/volcano/blob/master/docs/design/node-group.md). diff --git a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Ecosystem/RayOnVolcano.md b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Ecosystem/RayOnVolcano.md index 8196e9d4..16cb3ecf 100644 --- a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Ecosystem/RayOnVolcano.md +++ b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Ecosystem/RayOnVolcano.md @@ -200,4 +200,4 @@ ray job submit --address http://localhost:8265 -- python -c "import ray; ray.ini ### 了解更多 - 有关KubeRay集成的详细信息,请访问[KubeRay Volcano调度器文档](https://docs.ray.io/en/latest/cluster/kubernetes/k8s-ecosystem/volcano.html#kuberay-integration-with-volcano) -- 有关Volcano Job Ray插件的详细信息,请参阅[Volcano Ray插件指南](/docs/Plugins/user_guide_how_to_use_ray_plugin) \ No newline at end of file +- 有关Volcano Job Ray插件的详细信息,请参阅[Volcano Ray插件指南](/docs/Controller/Plugins/ray) \ No newline at end of file diff --git a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/KeyFeatures/QueueResourceManagement.md b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/KeyFeatures/QueueResourceManagement.md index 04ad386f..eea677e2 100644 --- a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/KeyFeatures/QueueResourceManagement.md +++ b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/KeyFeatures/QueueResourceManagement.md @@ -64,7 +64,7 @@ Volcano中的队列调度涉及以下核心action: Volcano提供了两个核心的队列调度插件: #### capacity插件 -[capacity插件](/docs/Plugins/user_guide_how_to_use_capacity_plugin)支持通过显式配置deserverd值来设置队列资源应得量,如以下队列配置示例: +[capacity插件](/docs/Scheduler/Plugins/capacity)支持通过显式配置deserverd值来设置队列资源应得量,如以下队列配置示例: ```yaml apiVersion: scheduling.volcano.sh/v1beta1 diff --git a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Scheduler/Plugins/deviceshare.md b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Scheduler/Plugins/deviceshare.md index 645ddd38..4448f6bc 100644 --- a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Scheduler/Plugins/deviceshare.md +++ b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Scheduler/Plugins/deviceshare.md @@ -38,4 +38,4 @@ tiers: - name: binpack ``` -> **Note:** For specific guides on how to configure your workloads to request shared GPUs or NPUs, please refer to the dedicated guides for [GPU Sharing](../UserGuide/user_guide_how_to_use_gpu_sharing) and [vNPU](../UserGuide/user_guide_how_to_use_vnpu). +> **Note:** For specific guides on how to configure your workloads to request shared GPUs or NPUs, please refer to the dedicated guides for [GPU Sharing](../../UserGuide/user_guide_how_to_use_gpu_sharing) and [vNPU](../../UserGuide/user_guide_how_to_use_vnpu). diff --git a/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v1.10.0/Concepts/Queue.md b/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v1.10.0/Concepts/Queue.md index c06fdf5c..58afc08d 100644 --- a/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v1.10.0/Concepts/Queue.md +++ b/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v1.10.0/Concepts/Queue.md @@ -52,7 +52,7 @@ deserved表示该queue内所有podgroup的资源应得量,若该queue已分配 **注意**: -1. 该字段只有在capacity插件开启时可按需配置,需要小于等于capability值,proportion插件使用weight来自动计算queue的deserved值。capacity插件使用文档详见:[capacity plugin User Guide](/docs/Plugins/user_guide_how_to_use_capacity_plugin) +1. 该字段只有在capacity插件开启时可按需配置,需要小于等于capability值,proportion插件使用weight来自动计算queue的deserved值。capacity插件使用文档详见:[capacity plugin User Guide](/docs/Scheduler/Plugins/capacity) > 2. 若queue中已分配的资源量超过了自己配置的deserved值,则queue不可再回收其他队列中的资源 diff --git a/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v1.10.0/Ecosystem/RayOnVolcano.md b/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v1.10.0/Ecosystem/RayOnVolcano.md index 8196e9d4..16cb3ecf 100644 --- a/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v1.10.0/Ecosystem/RayOnVolcano.md +++ b/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v1.10.0/Ecosystem/RayOnVolcano.md @@ -200,4 +200,4 @@ ray job submit --address http://localhost:8265 -- python -c "import ray; ray.ini ### 了解更多 - 有关KubeRay集成的详细信息,请访问[KubeRay Volcano调度器文档](https://docs.ray.io/en/latest/cluster/kubernetes/k8s-ecosystem/volcano.html#kuberay-integration-with-volcano) -- 有关Volcano Job Ray插件的详细信息,请参阅[Volcano Ray插件指南](/docs/Plugins/user_guide_how_to_use_ray_plugin) \ No newline at end of file +- 有关Volcano Job Ray插件的详细信息,请参阅[Volcano Ray插件指南](/docs/Controller/Plugins/ray) \ No newline at end of file diff --git a/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v1.11.0/Concepts/Queue.md b/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v1.11.0/Concepts/Queue.md index c06fdf5c..58afc08d 100644 --- a/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v1.11.0/Concepts/Queue.md +++ b/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v1.11.0/Concepts/Queue.md @@ -52,7 +52,7 @@ deserved表示该queue内所有podgroup的资源应得量,若该queue已分配 **注意**: -1. 该字段只有在capacity插件开启时可按需配置,需要小于等于capability值,proportion插件使用weight来自动计算queue的deserved值。capacity插件使用文档详见:[capacity plugin User Guide](/docs/Plugins/user_guide_how_to_use_capacity_plugin) +1. 该字段只有在capacity插件开启时可按需配置,需要小于等于capability值,proportion插件使用weight来自动计算queue的deserved值。capacity插件使用文档详见:[capacity plugin User Guide](/docs/Scheduler/Plugins/capacity) > 2. 若queue中已分配的资源量超过了自己配置的deserved值,则queue不可再回收其他队列中的资源 diff --git a/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v1.11.0/Ecosystem/RayOnVolcano.md b/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v1.11.0/Ecosystem/RayOnVolcano.md index 8196e9d4..16cb3ecf 100644 --- a/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v1.11.0/Ecosystem/RayOnVolcano.md +++ b/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v1.11.0/Ecosystem/RayOnVolcano.md @@ -200,4 +200,4 @@ ray job submit --address http://localhost:8265 -- python -c "import ray; ray.ini ### 了解更多 - 有关KubeRay集成的详细信息,请访问[KubeRay Volcano调度器文档](https://docs.ray.io/en/latest/cluster/kubernetes/k8s-ecosystem/volcano.html#kuberay-integration-with-volcano) -- 有关Volcano Job Ray插件的详细信息,请参阅[Volcano Ray插件指南](/docs/Plugins/user_guide_how_to_use_ray_plugin) \ No newline at end of file +- 有关Volcano Job Ray插件的详细信息,请参阅[Volcano Ray插件指南](/docs/Controller/Plugins/ray) \ No newline at end of file diff --git a/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v1.11.0/KeyFeatures/QueueResourceManagement.md b/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v1.11.0/KeyFeatures/QueueResourceManagement.md index 04ad386f..eea677e2 100644 --- a/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v1.11.0/KeyFeatures/QueueResourceManagement.md +++ b/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v1.11.0/KeyFeatures/QueueResourceManagement.md @@ -64,7 +64,7 @@ Volcano中的队列调度涉及以下核心action: Volcano提供了两个核心的队列调度插件: #### capacity插件 -[capacity插件](/docs/Plugins/user_guide_how_to_use_capacity_plugin)支持通过显式配置deserverd值来设置队列资源应得量,如以下队列配置示例: +[capacity插件](/docs/Scheduler/Plugins/capacity)支持通过显式配置deserverd值来设置队列资源应得量,如以下队列配置示例: ```yaml apiVersion: scheduling.volcano.sh/v1beta1 diff --git a/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v1.12.0/Concepts/Queue.md b/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v1.12.0/Concepts/Queue.md index c06fdf5c..58afc08d 100644 --- a/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v1.12.0/Concepts/Queue.md +++ b/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v1.12.0/Concepts/Queue.md @@ -52,7 +52,7 @@ deserved表示该queue内所有podgroup的资源应得量,若该queue已分配 **注意**: -1. 该字段只有在capacity插件开启时可按需配置,需要小于等于capability值,proportion插件使用weight来自动计算queue的deserved值。capacity插件使用文档详见:[capacity plugin User Guide](/docs/Plugins/user_guide_how_to_use_capacity_plugin) +1. 该字段只有在capacity插件开启时可按需配置,需要小于等于capability值,proportion插件使用weight来自动计算queue的deserved值。capacity插件使用文档详见:[capacity plugin User Guide](/docs/Scheduler/Plugins/capacity) > 2. 若queue中已分配的资源量超过了自己配置的deserved值,则queue不可再回收其他队列中的资源 diff --git a/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v1.12.0/Ecosystem/RayOnVolcano.md b/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v1.12.0/Ecosystem/RayOnVolcano.md index 8196e9d4..16cb3ecf 100644 --- a/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v1.12.0/Ecosystem/RayOnVolcano.md +++ b/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v1.12.0/Ecosystem/RayOnVolcano.md @@ -200,4 +200,4 @@ ray job submit --address http://localhost:8265 -- python -c "import ray; ray.ini ### 了解更多 - 有关KubeRay集成的详细信息,请访问[KubeRay Volcano调度器文档](https://docs.ray.io/en/latest/cluster/kubernetes/k8s-ecosystem/volcano.html#kuberay-integration-with-volcano) -- 有关Volcano Job Ray插件的详细信息,请参阅[Volcano Ray插件指南](/docs/Plugins/user_guide_how_to_use_ray_plugin) \ No newline at end of file +- 有关Volcano Job Ray插件的详细信息,请参阅[Volcano Ray插件指南](/docs/Controller/Plugins/ray) \ No newline at end of file diff --git a/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v1.12.0/KeyFeatures/QueueResourceManagement.md b/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v1.12.0/KeyFeatures/QueueResourceManagement.md index 04ad386f..eea677e2 100644 --- a/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v1.12.0/KeyFeatures/QueueResourceManagement.md +++ b/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v1.12.0/KeyFeatures/QueueResourceManagement.md @@ -64,7 +64,7 @@ Volcano中的队列调度涉及以下核心action: Volcano提供了两个核心的队列调度插件: #### capacity插件 -[capacity插件](/docs/Plugins/user_guide_how_to_use_capacity_plugin)支持通过显式配置deserverd值来设置队列资源应得量,如以下队列配置示例: +[capacity插件](/docs/Scheduler/Plugins/capacity)支持通过显式配置deserverd值来设置队列资源应得量,如以下队列配置示例: ```yaml apiVersion: scheduling.volcano.sh/v1beta1 diff --git a/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v1.7.0/Concepts/Queue.md b/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v1.7.0/Concepts/Queue.md index c06fdf5c..58afc08d 100644 --- a/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v1.7.0/Concepts/Queue.md +++ b/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v1.7.0/Concepts/Queue.md @@ -52,7 +52,7 @@ deserved表示该queue内所有podgroup的资源应得量,若该queue已分配 **注意**: -1. 该字段只有在capacity插件开启时可按需配置,需要小于等于capability值,proportion插件使用weight来自动计算queue的deserved值。capacity插件使用文档详见:[capacity plugin User Guide](/docs/Plugins/user_guide_how_to_use_capacity_plugin) +1. 该字段只有在capacity插件开启时可按需配置,需要小于等于capability值,proportion插件使用weight来自动计算queue的deserved值。capacity插件使用文档详见:[capacity plugin User Guide](/docs/Scheduler/Plugins/capacity) > 2. 若queue中已分配的资源量超过了自己配置的deserved值,则queue不可再回收其他队列中的资源 diff --git a/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v1.7.0/Ecosystem/RayOnVolcano.md b/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v1.7.0/Ecosystem/RayOnVolcano.md index 8196e9d4..16cb3ecf 100644 --- a/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v1.7.0/Ecosystem/RayOnVolcano.md +++ b/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v1.7.0/Ecosystem/RayOnVolcano.md @@ -200,4 +200,4 @@ ray job submit --address http://localhost:8265 -- python -c "import ray; ray.ini ### 了解更多 - 有关KubeRay集成的详细信息,请访问[KubeRay Volcano调度器文档](https://docs.ray.io/en/latest/cluster/kubernetes/k8s-ecosystem/volcano.html#kuberay-integration-with-volcano) -- 有关Volcano Job Ray插件的详细信息,请参阅[Volcano Ray插件指南](/docs/Plugins/user_guide_how_to_use_ray_plugin) \ No newline at end of file +- 有关Volcano Job Ray插件的详细信息,请参阅[Volcano Ray插件指南](/docs/Controller/Plugins/ray) \ No newline at end of file diff --git a/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v1.8.2/Concepts/Queue.md b/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v1.8.2/Concepts/Queue.md index c06fdf5c..58afc08d 100644 --- a/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v1.8.2/Concepts/Queue.md +++ b/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v1.8.2/Concepts/Queue.md @@ -52,7 +52,7 @@ deserved表示该queue内所有podgroup的资源应得量,若该queue已分配 **注意**: -1. 该字段只有在capacity插件开启时可按需配置,需要小于等于capability值,proportion插件使用weight来自动计算queue的deserved值。capacity插件使用文档详见:[capacity plugin User Guide](/docs/Plugins/user_guide_how_to_use_capacity_plugin) +1. 该字段只有在capacity插件开启时可按需配置,需要小于等于capability值,proportion插件使用weight来自动计算queue的deserved值。capacity插件使用文档详见:[capacity plugin User Guide](/docs/Scheduler/Plugins/capacity) > 2. 若queue中已分配的资源量超过了自己配置的deserved值,则queue不可再回收其他队列中的资源 diff --git a/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v1.8.2/Ecosystem/RayOnVolcano.md b/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v1.8.2/Ecosystem/RayOnVolcano.md index 8196e9d4..16cb3ecf 100644 --- a/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v1.8.2/Ecosystem/RayOnVolcano.md +++ b/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v1.8.2/Ecosystem/RayOnVolcano.md @@ -200,4 +200,4 @@ ray job submit --address http://localhost:8265 -- python -c "import ray; ray.ini ### 了解更多 - 有关KubeRay集成的详细信息,请访问[KubeRay Volcano调度器文档](https://docs.ray.io/en/latest/cluster/kubernetes/k8s-ecosystem/volcano.html#kuberay-integration-with-volcano) -- 有关Volcano Job Ray插件的详细信息,请参阅[Volcano Ray插件指南](/docs/Plugins/user_guide_how_to_use_ray_plugin) \ No newline at end of file +- 有关Volcano Job Ray插件的详细信息,请参阅[Volcano Ray插件指南](/docs/Controller/Plugins/ray) \ No newline at end of file diff --git a/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v1.9.0/Concepts/Queue.md b/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v1.9.0/Concepts/Queue.md index c06fdf5c..58afc08d 100644 --- a/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v1.9.0/Concepts/Queue.md +++ b/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v1.9.0/Concepts/Queue.md @@ -52,7 +52,7 @@ deserved表示该queue内所有podgroup的资源应得量,若该queue已分配 **注意**: -1. 该字段只有在capacity插件开启时可按需配置,需要小于等于capability值,proportion插件使用weight来自动计算queue的deserved值。capacity插件使用文档详见:[capacity plugin User Guide](/docs/Plugins/user_guide_how_to_use_capacity_plugin) +1. 该字段只有在capacity插件开启时可按需配置,需要小于等于capability值,proportion插件使用weight来自动计算queue的deserved值。capacity插件使用文档详见:[capacity plugin User Guide](/docs/Scheduler/Plugins/capacity) > 2. 若queue中已分配的资源量超过了自己配置的deserved值,则queue不可再回收其他队列中的资源 diff --git a/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v1.9.0/Ecosystem/RayOnVolcano.md b/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v1.9.0/Ecosystem/RayOnVolcano.md index 8196e9d4..16cb3ecf 100644 --- a/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v1.9.0/Ecosystem/RayOnVolcano.md +++ b/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v1.9.0/Ecosystem/RayOnVolcano.md @@ -200,4 +200,4 @@ ray job submit --address http://localhost:8265 -- python -c "import ray; ray.ini ### 了解更多 - 有关KubeRay集成的详细信息,请访问[KubeRay Volcano调度器文档](https://docs.ray.io/en/latest/cluster/kubernetes/k8s-ecosystem/volcano.html#kuberay-integration-with-volcano) -- 有关Volcano Job Ray插件的详细信息,请参阅[Volcano Ray插件指南](/docs/Plugins/user_guide_how_to_use_ray_plugin) \ No newline at end of file +- 有关Volcano Job Ray插件的详细信息,请参阅[Volcano Ray插件指南](/docs/Controller/Plugins/ray) \ No newline at end of file diff --git a/versioned_docs/version-v1.10.0/Concepts/Queue.md b/versioned_docs/version-v1.10.0/Concepts/Queue.md index 501c3ed0..7aad21f8 100644 --- a/versioned_docs/version-v1.10.0/Concepts/Queue.md +++ b/versioned_docs/version-v1.10.0/Concepts/Queue.md @@ -51,7 +51,7 @@ deserved indicates the expected resource amount for all PodGroups in this queue. > **Note**: > -> 1. This field can only be configured when the capacity plugin is enabled, and must be less than or equal to the capability value. The proportion plugin uses weight to automatically calculate the queue's deserved value. For more information on using the capacity plugin, see: [capacity plugin user guide](/docs/Plugins/user_guide_how_to_use_capacity_plugin) +> 1. This field can only be configured when the capacity plugin is enabled, and must be less than or equal to the capability value. The proportion plugin uses weight to automatically calculate the queue's deserved value. For more information on using the capacity plugin, see: [capacity plugin user guide](/docs/Scheduler/Plugins/capacity) > 2. If the allocated resources of a queue exceed its configured deserved value, the queue cannot reclaim resources from other queues * weight, *optional* diff --git a/versioned_docs/version-v1.10.0/Ecosystem/RayOnVolcano.md b/versioned_docs/version-v1.10.0/Ecosystem/RayOnVolcano.md index a3e8fc3b..be1900a4 100644 --- a/versioned_docs/version-v1.10.0/Ecosystem/RayOnVolcano.md +++ b/versioned_docs/version-v1.10.0/Ecosystem/RayOnVolcano.md @@ -203,4 +203,4 @@ ray job submit --address http://localhost:8265 -- python -c "import ray; ray.ini ### Learn More - For KubeRay integration details, visit the [KubeRay Volcano Scheduler Documentation](https://docs.ray.io/en/latest/cluster/kubernetes/k8s-ecosystem/volcano.html#kuberay-integration-with-volcano) -- For Volcano Job Ray plugin details, see the [Volcano Ray Plugin Guide](/docs/Plugins/user_guide_how_to_use_ray_plugin) \ No newline at end of file +- For Volcano Job Ray plugin details, see the [Volcano Ray Plugin Guide](/docs/Controller/Plugins/ray) \ No newline at end of file diff --git a/versioned_docs/version-v1.11.0/Concepts/Queue.md b/versioned_docs/version-v1.11.0/Concepts/Queue.md index 501c3ed0..7aad21f8 100644 --- a/versioned_docs/version-v1.11.0/Concepts/Queue.md +++ b/versioned_docs/version-v1.11.0/Concepts/Queue.md @@ -51,7 +51,7 @@ deserved indicates the expected resource amount for all PodGroups in this queue. > **Note**: > -> 1. This field can only be configured when the capacity plugin is enabled, and must be less than or equal to the capability value. The proportion plugin uses weight to automatically calculate the queue's deserved value. For more information on using the capacity plugin, see: [capacity plugin user guide](/docs/Plugins/user_guide_how_to_use_capacity_plugin) +> 1. This field can only be configured when the capacity plugin is enabled, and must be less than or equal to the capability value. The proportion plugin uses weight to automatically calculate the queue's deserved value. For more information on using the capacity plugin, see: [capacity plugin user guide](/docs/Scheduler/Plugins/capacity) > 2. If the allocated resources of a queue exceed its configured deserved value, the queue cannot reclaim resources from other queues * weight, *optional* diff --git a/versioned_docs/version-v1.11.0/Ecosystem/RayOnVolcano.md b/versioned_docs/version-v1.11.0/Ecosystem/RayOnVolcano.md index a3e8fc3b..be1900a4 100644 --- a/versioned_docs/version-v1.11.0/Ecosystem/RayOnVolcano.md +++ b/versioned_docs/version-v1.11.0/Ecosystem/RayOnVolcano.md @@ -203,4 +203,4 @@ ray job submit --address http://localhost:8265 -- python -c "import ray; ray.ini ### Learn More - For KubeRay integration details, visit the [KubeRay Volcano Scheduler Documentation](https://docs.ray.io/en/latest/cluster/kubernetes/k8s-ecosystem/volcano.html#kuberay-integration-with-volcano) -- For Volcano Job Ray plugin details, see the [Volcano Ray Plugin Guide](/docs/Plugins/user_guide_how_to_use_ray_plugin) \ No newline at end of file +- For Volcano Job Ray plugin details, see the [Volcano Ray Plugin Guide](/docs/Controller/Plugins/ray) \ No newline at end of file diff --git a/versioned_docs/version-v1.11.0/KeyFeatures/QueueResourceManagement.md b/versioned_docs/version-v1.11.0/KeyFeatures/QueueResourceManagement.md index 51601bf8..ba21ba1e 100644 --- a/versioned_docs/version-v1.11.0/KeyFeatures/QueueResourceManagement.md +++ b/versioned_docs/version-v1.11.0/KeyFeatures/QueueResourceManagement.md @@ -50,7 +50,7 @@ deserved indicates the expected resource amount for all PodGroups in this queue. > **Note**: > -> 1. This field can only be configured when the capacity plugin is enabled, and must be less than or equal to the capability value. The proportion plugin uses weight to automatically calculate the queue's deserved value. For more information on using the capacity plugin, see: [capacity plugin user guide](/docs/Plugins/user_guide_how_to_use_capacity_plugin) +> 1. This field can only be configured when the capacity plugin is enabled, and must be less than or equal to the capability value. The proportion plugin uses weight to automatically calculate the queue's deserved value. For more information on using the capacity plugin, see: [capacity plugin user guide](/docs/Scheduler/Plugins/capacity) > 2. If the allocated resources of a queue exceed its configured deserved value, the queue cannot reclaim resources from other queues * weight, *optional* diff --git a/versioned_docs/version-v1.12.0/Concepts/Queue.md b/versioned_docs/version-v1.12.0/Concepts/Queue.md index 501c3ed0..7aad21f8 100644 --- a/versioned_docs/version-v1.12.0/Concepts/Queue.md +++ b/versioned_docs/version-v1.12.0/Concepts/Queue.md @@ -51,7 +51,7 @@ deserved indicates the expected resource amount for all PodGroups in this queue. > **Note**: > -> 1. This field can only be configured when the capacity plugin is enabled, and must be less than or equal to the capability value. The proportion plugin uses weight to automatically calculate the queue's deserved value. For more information on using the capacity plugin, see: [capacity plugin user guide](/docs/Plugins/user_guide_how_to_use_capacity_plugin) +> 1. This field can only be configured when the capacity plugin is enabled, and must be less than or equal to the capability value. The proportion plugin uses weight to automatically calculate the queue's deserved value. For more information on using the capacity plugin, see: [capacity plugin user guide](/docs/Scheduler/Plugins/capacity) > 2. If the allocated resources of a queue exceed its configured deserved value, the queue cannot reclaim resources from other queues * weight, *optional* diff --git a/versioned_docs/version-v1.12.0/Ecosystem/RayOnVolcano.md b/versioned_docs/version-v1.12.0/Ecosystem/RayOnVolcano.md index a3e8fc3b..be1900a4 100644 --- a/versioned_docs/version-v1.12.0/Ecosystem/RayOnVolcano.md +++ b/versioned_docs/version-v1.12.0/Ecosystem/RayOnVolcano.md @@ -203,4 +203,4 @@ ray job submit --address http://localhost:8265 -- python -c "import ray; ray.ini ### Learn More - For KubeRay integration details, visit the [KubeRay Volcano Scheduler Documentation](https://docs.ray.io/en/latest/cluster/kubernetes/k8s-ecosystem/volcano.html#kuberay-integration-with-volcano) -- For Volcano Job Ray plugin details, see the [Volcano Ray Plugin Guide](/docs/Plugins/user_guide_how_to_use_ray_plugin) \ No newline at end of file +- For Volcano Job Ray plugin details, see the [Volcano Ray Plugin Guide](/docs/Controller/Plugins/ray) \ No newline at end of file diff --git a/versioned_docs/version-v1.12.0/KeyFeatures/QueueResourceManagement.md b/versioned_docs/version-v1.12.0/KeyFeatures/QueueResourceManagement.md index 51601bf8..ba21ba1e 100644 --- a/versioned_docs/version-v1.12.0/KeyFeatures/QueueResourceManagement.md +++ b/versioned_docs/version-v1.12.0/KeyFeatures/QueueResourceManagement.md @@ -50,7 +50,7 @@ deserved indicates the expected resource amount for all PodGroups in this queue. > **Note**: > -> 1. This field can only be configured when the capacity plugin is enabled, and must be less than or equal to the capability value. The proportion plugin uses weight to automatically calculate the queue's deserved value. For more information on using the capacity plugin, see: [capacity plugin user guide](/docs/Plugins/user_guide_how_to_use_capacity_plugin) +> 1. This field can only be configured when the capacity plugin is enabled, and must be less than or equal to the capability value. The proportion plugin uses weight to automatically calculate the queue's deserved value. For more information on using the capacity plugin, see: [capacity plugin user guide](/docs/Scheduler/Plugins/capacity) > 2. If the allocated resources of a queue exceed its configured deserved value, the queue cannot reclaim resources from other queues * weight, *optional* diff --git a/versioned_docs/version-v1.7.0/Concepts/Queue.md b/versioned_docs/version-v1.7.0/Concepts/Queue.md index 501c3ed0..7aad21f8 100644 --- a/versioned_docs/version-v1.7.0/Concepts/Queue.md +++ b/versioned_docs/version-v1.7.0/Concepts/Queue.md @@ -51,7 +51,7 @@ deserved indicates the expected resource amount for all PodGroups in this queue. > **Note**: > -> 1. This field can only be configured when the capacity plugin is enabled, and must be less than or equal to the capability value. The proportion plugin uses weight to automatically calculate the queue's deserved value. For more information on using the capacity plugin, see: [capacity plugin user guide](/docs/Plugins/user_guide_how_to_use_capacity_plugin) +> 1. This field can only be configured when the capacity plugin is enabled, and must be less than or equal to the capability value. The proportion plugin uses weight to automatically calculate the queue's deserved value. For more information on using the capacity plugin, see: [capacity plugin user guide](/docs/Scheduler/Plugins/capacity) > 2. If the allocated resources of a queue exceed its configured deserved value, the queue cannot reclaim resources from other queues * weight, *optional* diff --git a/versioned_docs/version-v1.7.0/Ecosystem/RayOnVolcano.md b/versioned_docs/version-v1.7.0/Ecosystem/RayOnVolcano.md index a3e8fc3b..be1900a4 100644 --- a/versioned_docs/version-v1.7.0/Ecosystem/RayOnVolcano.md +++ b/versioned_docs/version-v1.7.0/Ecosystem/RayOnVolcano.md @@ -203,4 +203,4 @@ ray job submit --address http://localhost:8265 -- python -c "import ray; ray.ini ### Learn More - For KubeRay integration details, visit the [KubeRay Volcano Scheduler Documentation](https://docs.ray.io/en/latest/cluster/kubernetes/k8s-ecosystem/volcano.html#kuberay-integration-with-volcano) -- For Volcano Job Ray plugin details, see the [Volcano Ray Plugin Guide](/docs/Plugins/user_guide_how_to_use_ray_plugin) \ No newline at end of file +- For Volcano Job Ray plugin details, see the [Volcano Ray Plugin Guide](/docs/Controller/Plugins/ray) \ No newline at end of file diff --git a/versioned_docs/version-v1.8.2/Concepts/Queue.md b/versioned_docs/version-v1.8.2/Concepts/Queue.md index 501c3ed0..7aad21f8 100644 --- a/versioned_docs/version-v1.8.2/Concepts/Queue.md +++ b/versioned_docs/version-v1.8.2/Concepts/Queue.md @@ -51,7 +51,7 @@ deserved indicates the expected resource amount for all PodGroups in this queue. > **Note**: > -> 1. This field can only be configured when the capacity plugin is enabled, and must be less than or equal to the capability value. The proportion plugin uses weight to automatically calculate the queue's deserved value. For more information on using the capacity plugin, see: [capacity plugin user guide](/docs/Plugins/user_guide_how_to_use_capacity_plugin) +> 1. This field can only be configured when the capacity plugin is enabled, and must be less than or equal to the capability value. The proportion plugin uses weight to automatically calculate the queue's deserved value. For more information on using the capacity plugin, see: [capacity plugin user guide](/docs/Scheduler/Plugins/capacity) > 2. If the allocated resources of a queue exceed its configured deserved value, the queue cannot reclaim resources from other queues * weight, *optional* diff --git a/versioned_docs/version-v1.8.2/Ecosystem/RayOnVolcano.md b/versioned_docs/version-v1.8.2/Ecosystem/RayOnVolcano.md index a3e8fc3b..be1900a4 100644 --- a/versioned_docs/version-v1.8.2/Ecosystem/RayOnVolcano.md +++ b/versioned_docs/version-v1.8.2/Ecosystem/RayOnVolcano.md @@ -203,4 +203,4 @@ ray job submit --address http://localhost:8265 -- python -c "import ray; ray.ini ### Learn More - For KubeRay integration details, visit the [KubeRay Volcano Scheduler Documentation](https://docs.ray.io/en/latest/cluster/kubernetes/k8s-ecosystem/volcano.html#kuberay-integration-with-volcano) -- For Volcano Job Ray plugin details, see the [Volcano Ray Plugin Guide](/docs/Plugins/user_guide_how_to_use_ray_plugin) \ No newline at end of file +- For Volcano Job Ray plugin details, see the [Volcano Ray Plugin Guide](/docs/Controller/Plugins/ray) \ No newline at end of file diff --git a/versioned_docs/version-v1.9.0/Concepts/Queue.md b/versioned_docs/version-v1.9.0/Concepts/Queue.md index 501c3ed0..7aad21f8 100644 --- a/versioned_docs/version-v1.9.0/Concepts/Queue.md +++ b/versioned_docs/version-v1.9.0/Concepts/Queue.md @@ -51,7 +51,7 @@ deserved indicates the expected resource amount for all PodGroups in this queue. > **Note**: > -> 1. This field can only be configured when the capacity plugin is enabled, and must be less than or equal to the capability value. The proportion plugin uses weight to automatically calculate the queue's deserved value. For more information on using the capacity plugin, see: [capacity plugin user guide](/docs/Plugins/user_guide_how_to_use_capacity_plugin) +> 1. This field can only be configured when the capacity plugin is enabled, and must be less than or equal to the capability value. The proportion plugin uses weight to automatically calculate the queue's deserved value. For more information on using the capacity plugin, see: [capacity plugin user guide](/docs/Scheduler/Plugins/capacity) > 2. If the allocated resources of a queue exceed its configured deserved value, the queue cannot reclaim resources from other queues * weight, *optional* diff --git a/versioned_docs/version-v1.9.0/Ecosystem/RayOnVolcano.md b/versioned_docs/version-v1.9.0/Ecosystem/RayOnVolcano.md index a3e8fc3b..be1900a4 100644 --- a/versioned_docs/version-v1.9.0/Ecosystem/RayOnVolcano.md +++ b/versioned_docs/version-v1.9.0/Ecosystem/RayOnVolcano.md @@ -203,4 +203,4 @@ ray job submit --address http://localhost:8265 -- python -c "import ray; ray.ini ### Learn More - For KubeRay integration details, visit the [KubeRay Volcano Scheduler Documentation](https://docs.ray.io/en/latest/cluster/kubernetes/k8s-ecosystem/volcano.html#kuberay-integration-with-volcano) -- For Volcano Job Ray plugin details, see the [Volcano Ray Plugin Guide](/docs/Plugins/user_guide_how_to_use_ray_plugin) \ No newline at end of file +- For Volcano Job Ray plugin details, see the [Volcano Ray Plugin Guide](/docs/Controller/Plugins/ray) \ No newline at end of file From 55323a6ca631674a1948424351c72e41cb9b375c Mon Sep 17 00:00:00 2001 From: hemantch01 Date: Mon, 15 Jun 2026 06:38:28 +0000 Subject: [PATCH 5/7] docs: translate Controller plugins to Chinese Signed-off-by: hemantch01 --- .../Controller/Plugins/_category_.json | 6 +- .../current/Controller/Plugins/env.md | 40 ++++--- .../current/Controller/Plugins/hcclrank.md | 30 +++--- .../current/Controller/Plugins/mpi.md | 38 +++---- .../current/Controller/Plugins/pytorch.md | 76 ++++++------- .../current/Controller/Plugins/ray.md | 102 +++++++++--------- .../current/Controller/Plugins/ssh.md | 77 +++++++------ .../current/Controller/Plugins/svc.md | 84 +++++++-------- 8 files changed, 225 insertions(+), 228 deletions(-) diff --git a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Controller/Plugins/_category_.json b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Controller/Plugins/_category_.json index f3accd2f..850c6426 100644 --- a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Controller/Plugins/_category_.json +++ b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Controller/Plugins/_category_.json @@ -1,4 +1,4 @@ { - "label": "Plugins", - "key": "controller-plugins" -} + "label": "插件", + "key": "controller-plugins" +} \ No newline at end of file diff --git a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Controller/Plugins/env.md b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Controller/Plugins/env.md index 99fab7ed..da83f39b 100644 --- a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Controller/Plugins/env.md +++ b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Controller/Plugins/env.md @@ -1,22 +1,22 @@ ---- +--- title: Env --- -## Background -**Env Plugin** is designed for business that a pod should be aware of its index in the task such as [MPI](https://www.open-mpi.org/) -and [TensorFlow](https://tensorflow.google.cn/). The indices will be registered as **environment variables** automatically -when the Volcano job is created. For example, a tensorflow job consists of *1* ps and *2* workers. And each worker maps -to a slice of raw data. In order to make the workers be aware of its target slice, they get their index in the environment -variables. +## 背景 +**Env Plugin** 是为业务而设计的,pod 应该知道其在任务中的索引,例如 [MPI](https://www.open-mpi.org/) +和[TensorFlow](https://tensorflow.google.cn/)。索引将自动注册为**环境变量** +当 Volcano 作业创建时。例如,一个张量流作业由 *1* ps 和 *2* 个worker 组成。以及每个工人的地图 +到原始数据切片。为了让工作人员了解其目标切片,他们在环境中获取索引 +变量。 -## Key Points -* The index keys of the environment variables are `VK_TASK_INDEX` and `VC_TASK_INDEX`, they have the same value. -* The value of the indices is a number which ranges from `0` to `length - 1`. The `length` equals to the number of replicas -of the task. It is also the index of the pod in the task. +## 要点 +* 环境变量的索引键是`VK_TASK_INDEX`和`VC_TASK_INDEX`,它们具有相同的值。 +* 索引的值是一个范围从“0”到“length - 1”的数字。 “长度”等于副本数 +的任务。它也是任务中 pod 的索引。 -## Examples +## 示例 ```yaml apiVersion: batch.volcano.sh/v1alpha1 kind: Job @@ -77,16 +77,14 @@ spec: resources: {} restartPolicy: Never ``` -## Note: -* When config env plugin in the tensorflow job above, all the pods will have 2 environment variables `VK_TASK_INDEX` and -`VC_TASK_INDEX`. The environment variables registered in the `ps` pod are as follows. +## 注意: +* 在上述 TensorFlow 作业中配置 env 插件时,所有 Pod 都将拥有 2 个环境变量 `VK_TASK_INDEX` 和 `VC_TASK_INDEX`。在 `ps` Pod 中注册的环境变量如下。 ``` [root@tensorflow-dist-mnist-ps-0 /] env | grep TASK_INDEX VK_TASK_INDEX=0 VC_TASK_INDEX=0 ``` -* Considering the 2 workers, you will get that their names are `tensorflow-dist-mnist-worker-0` and -`tensorflow-dist-mnist-worker-1`. And the corresponding values of the index environment variables are `0` and `1`. +* 考虑到 2 个 worker,您会发现它们的名称分别为 `tensorflow-dist-mnist-worker-0` 和 `tensorflow-dist-mnist-worker-1`。索引环境变量的对应值分别为 `0` 和 `1`。 ``` [root@tensorflow-dist-mnist-worker-0 /] env | grep TASK_INDEX VK_TASK_INDEX=0 @@ -98,7 +96,7 @@ VK_TASK_INDEX=1 VC_TASK_INDEX=1 ``` -## Note: -* Because of historical reasons, environment variables `VK_TASK_INDEX` and `VC_TASK_INDEX` both exist, `VK_TASK_INDEX` will -be **deprecated** in the future releases. -* No value are needed when register env plugin in the volcano job. +## 注意: +* 由于历史原因,环境变量`VK_TASK_INDEX`和`VC_TASK_INDEX`同时存在,`VK_TASK_INDEX`将会 +在未来版本中**弃用**。 +* 在火山作业中注册 env 插件时不需要任何值。 \ No newline at end of file diff --git a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Controller/Plugins/hcclrank.md b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Controller/Plugins/hcclrank.md index ab556003..a7f856b1 100644 --- a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Controller/Plugins/hcclrank.md +++ b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Controller/Plugins/hcclrank.md @@ -2,25 +2,25 @@ title: HCCLRank --- -## Introduction +## 介绍 -In distributed AI training, particularly when using Ascend NPUs (Neural Processing Units) or MindSpore frameworks, the compute nodes need a deterministic rank or index to communicate over HCCL (Huawei Collective Communication Library). +在分布式人工智能训练中,特别是在使用Ascend NPU(神经处理单元)或MindSpore框架时,计算节点需要确定性的排名或索引才能通过HCCL(华为集体通信库)进行通信。 -The **HCCLRank Plugin** is a Volcano Job plugin that automatically injects a `hccl/rankIndex` annotation into the Pods of a Volcano Job. It calculates a unique rank for each pod based on its task type (`master` or `worker`) and its replica index. +**HCCLRank 插件** 是一个 Volcano 作业插件,它会自动将 `hccl/rankIndex` 注释注入到 Volcano 作业的 Pod 中。它根据每个 Pod 的任务类型(“master”或“worker”)及其副本索引计算其唯一排名。 -## Mechanism +## 机制 -During the Pod creation phase (`OnPodCreate`), the HCCLRank Plugin intercepts the pod and adds the `hccl/rankIndex` annotation to it. +在 Pod 创建阶段 (`OnPodCreate`),HCCLRank 插件会拦截 pod 并向其添加 `hccl/rankIndex` 注释。 -The calculation is as follows: -- **Master Role**: Rank = Pod Index -- **Worker Role**: Rank = (Total Master Replicas) + Pod Index +计算如下: +- **主角色**:排名 = Pod 指数 +- **工作者角色**:排名=(主副本总数)+ Pod 索引 -If the Pod already has a `RANK` environment variable defined in its container specifications, the plugin will use that value instead and simply map it to the `hccl/rankIndex` annotation. +如果 Pod 的容器规范中已经定义了“RANK”环境变量,则插件将使用该值,并将其简单地映射到“hccl/rankIndex”注释。 -## Configuration +## 配置 -To enable the HCCLRank plugin, configure it within the Volcano job controller's configuration or add it to the `plugins` field of your `VolcanoJob` spec. +要启用 HCCLRank 插件,请在 Volcano 作业控制器的配置中对其进行配置,或将其添加到“VolcanoJob”规范的“plugins”字段中。 ```yaml apiVersion: batch.volcano.sh/v1alpha1 @@ -51,9 +51,9 @@ spec: image: my-ascend-image ``` -### Arguments +### 参数 -The HCCLRank plugin supports overriding the default task names used to identify master and worker roles: +HCCLRank 插件支持覆盖用于识别主角色和辅助角色的默认任务名称: -- **`--master`**: The name of the master role task in your Job spec. Default is `master`. -- **`--worker`**: The name of the worker role task in your Job spec. Default is `worker`. +- **`--master`**:作业规范中主角色任务的名称。默认为“master”。 +- **`--worker`**:作业规范中辅助角色任务的名称。默认是“工人”。 \ No newline at end of file diff --git a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Controller/Plugins/mpi.md b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Controller/Plugins/mpi.md index 77743da5..7d65fabc 100644 --- a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Controller/Plugins/mpi.md +++ b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Controller/Plugins/mpi.md @@ -1,38 +1,38 @@ ---- +--- title: MPI --- -## Introduction +## 介绍 -**MPI plugin** is designed to optimize the user experience when running MPI jobs, it not only allows users to write less yaml, but also ensures the normal operation of MPI jobs. +**MPI插件**旨在优化运行MPI作业时的用户体验,它不仅可以让用户编写更少的yaml,而且可以保证MPI作业的正常运行。 -## How the MPI Plugin Works +## MPI 插件的工作原理 -The MPI plugin will do three things: +MPI 插件将做三件事: -* Open ports used by MPI for all containers of the job -* Force open `ssh` and `svc` plugins -* add `MPI_HOST` environment variable for master pod, this environment variable includes the worker's domain name, It is used by the `--host` parameter of `mpiexec` +* 打开 MPI 用于作业的所有容器的端口 +* 强制打开`ssh`和`svc`插件 +*为主pod添加`MPI_HOST`环境变量,该环境变量包含worker的域名,由`mpiexec`的`--host`参数使用 -## Parameters of the MPI Plugin +## MPI 插件参数 -### Key Points +### 要点 -* If `master` or `worker` is configured, please ensure that the tasks corresponding to their values exist, and the roles of these tasks correspond to the meaning of the parameters -* If `port` is configured, make the port value of `sshd` the same as the value of the parameter. -* If the `gang` plugin is enabled, then make sure that the value of `minAvailable` is **equal** to the number of `replicas of the worker`. +* 如果配置了`master`或`worker`,请确保其值对应的任务存在,并且这些任务的角色与参数的含义相对应 +* 如果配置了“port”,则使“sshd”的端口值与参数值相同。 +* 如果启用了“gang”插件,请确保“minAvailable”的值**等于**“worker 的副本”数量。 -### Arguments +### 参数 -| ID | Name | Type | Default Value | Required | Description | Example | +| ID | 名称 | 类型 | 默认值 | 是否必填 | 描述 | 示例 | | ---- | ------ | ------ | ------------- | -------- | ---------------------------------- | ------------------ | -| 1 | master | string | master | No | Name of MPI master | --master=mpimaster | -| 2 | worker | string | worker | No | Name of MPI worker | --worker=mpiworker | -| 3 | port | string | 22 | No | The port to open for the container | --port=5000 | +| 1 | master | string | master | 否 | MPI 主节点名称 | --master=mpimaster | +| 2 | worker | string | worker | 否 | MPI 工作节点名称 | --worker=mpiworker | +| 3 | port | string | 22 | 否 | 为容器打开的端口 | --port=5000 | -## Examples +## 示例 ```yaml apiVersion: batch.volcano.sh/v1alpha1 diff --git a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Controller/Plugins/pytorch.md b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Controller/Plugins/pytorch.md index 9d7e1039..ae24e661 100644 --- a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Controller/Plugins/pytorch.md +++ b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Controller/Plugins/pytorch.md @@ -1,35 +1,35 @@ ---- +--- title: Pytorch --- -## Introduction +## 介绍 -**Pytorch plugin** is designed to optimize the user experience when running pytorch jobs, it not only allows users to write less yaml, but also ensures the normal operation of Pytorch jobs. +**Pytorch插件**旨在优化运行Pytorch作业时的用户体验,它不仅可以让用户编写更少的yaml,还可以保证Pytorch作业的正常运行。 -## How the Pytorch Plugin Works +## Pytorch 插件的工作原理 -The Pytorch Plugin will do the following: +Pytorch 插件将执行以下操作: -* Open ports used by Pytorch for all containers of the job -* Force open `svc` plugins -* Add some envs such like `MASTER_ADDR`, `MASTER_PORT`, `WORLD_SIZE`, `RANK` which pytorch distributed training needed to containers automatically -* Add an init container to worker pods to wait for the master node to be ready before starting (ensures master starts first) +* 打开 Pytorch 为作业的所有容器使用的端口 +* 强制打开 `svc` 插件 +* 添加一些环境,例如`MASTER_ADDR`,`MASTER_PORT`,`WORLD_SIZE`,`RANK`,pytorch自动将所需的训练分发到容器 +* 在worker pods中添加一个init容器,以等待master节点准备好后再启动(确保master先启动) -## Parameters of the Pytorch Plugin +## Pytorch插件参数 -### Arguments +### 参数 -| ID | Name | Type | Default Value | Required | Description | Example | +| ID | 名称 | 类型 | 默认值 | 是否必填 | 描述 | 示例 | | ---- | -------------------- | ------ | ------------------ | -------- | ------------------------------------------------------------------------------------ | -------------------------------------- | -| 1 | master | string | master | No | Name of Pytorch master | --master=master | -| 2 | worker | string | worker | No | Name of Pytorch worker | --worker=worker | -| 3 | port | int | 23456 | No | The port to open for the container | --port=23456 | -| 4 | wait-master-enabled | bool | false | No | Enable init container to wait for master | --wait-master-enabled=true | -| 5 | wait-master-timeout | int | 300 | No | Timeout in seconds for waiting master (only effective when wait-master-enabled=true) | --wait-master-timeout=600 | -| 6 | wait-master-image | string | busybox:1.36.1 | No | Image for wait-for-master init container (only effective when wait-master-enabled=true) | --wait-master-image=busybox:latest | +| 1 | master | string | master | 否 | Pytorch 主节点名称 | --master=master | +| 2 | worker | string | worker | 否 | Pytorch 工作节点名称 | --worker=worker | +| 3 | port | int | 23456 | 否 | 为容器打开的端口 | --port=23456 | +| 4 | wait-master-enabled | bool | false | 否 | 启用 init 容器以等待主节点 | --wait-master-enabled=true | +| 5 | wait-master-timeout | int | 300 | 否 | 等待主节点的超时时间(秒,仅在 wait-master-enabled=true 时有效) | --wait-master-timeout=600 | +| 6 | wait-master-image | string | busybox:1.36.1 | 否 | 用于等待主节点的 init 容器镜像(仅在 wait-master-enabled=true 时有效) | --wait-master-image=busybox:latest | -## Examples +## 示例 ```yaml apiVersion: batch.volcano.sh/v1alpha1 @@ -73,23 +73,23 @@ spec: restartPolicy: OnFailure ``` -## Notes +## 笔记 -* The `wait-for-master` init container feature is **disabled by default**. Enable it by setting `--wait-master-enabled=true` -* When enabled, an init container will be added to worker pods to ensure the master is ready before starting workers -* Default init container image is `busybox:1.36.1`, can be customized via `--wait-master-image` -* Workers will wait for the master to become ready with a configurable timeout (default 300 seconds / 5 minutes) -* If the master doesn't become ready within the timeout, the worker pod will fail with an error message -* The init container checks the master's port connectivity using multiple fallback methods: - 1. `nc -z` (netcat) if available - 2. `/dev/tcp` with timeout command if available - 3. `/dev/tcp` direct connection as fallback -* **Note**: The parameters `--wait-master-timeout` and `--wait-master-image` are only effective when `--wait-master-enabled=true` -* **Image Requirements**: The custom image should have at least one of the following: - * `nc` (netcat) command - recommended, available in busybox, alpine - * `/dev/tcp` support in shell - available in bash/sh - * Recommended images: `busybox:1.36.1`, `alpine:latest`, `bash:latest` -* Customization examples: - * Enable feature: `--wait-master-enabled=true` - * Custom timeout: `--wait-master-enabled=true --wait-master-timeout=600` (10 minutes) - * Custom image: `--wait-master-enabled=true --wait-master-image=busybox:latest` +* “wait-for-master”初始化容器功能**默认禁用**。通过设置 `--wait-master-enabled=true` 来启用它 +* 启用后,一个 init 容器将被添加到worker pod中,以确保master在启动worker之前准备就绪 +* 默认初始化容器镜像为 `busybox:1.36.1`,可以通过 `--wait-master-image` 自定义 +* Workers 将等待 master 准备好,超时时间可配置(默认 300 秒/5 分钟) +* 如果 master 在超时时间内没有准备好,worker pod 将失败并显示错误消息 +* init容器使用多种后备方法检查master的端口连接: + 1. `nc -z` (netcat) 如果可用 + 2. `/dev/tcp` 带有超时命令(如果可用) + 3. `/dev/tcp` 直接连接作为后备 +* **注意**:参数`--wait-master-timeout`和`--wait-master-image`仅在`--wait-master-enabled=true`时有效 +* **图像要求**:自定义图像应至少具有以下之一: + * `nc` (netcat) 命令 - 推荐,在 busybox、alpine 中可用 + * shell 中的 `/dev/tcp` 支持 - 在 bash/sh 中可用 + * 推荐镜像:`busybox:1.36.1`、`alpine:latest`、`bash:latest` +* 定制示例: + * 启用功能:`--wait-master-enabled=true` + * 自定义超时:`--wait-master-enabled=true --wait-master-timeout=600`(10 分钟) + * 自定义镜像: `--wait-master-enabled=true --wait-master-image=busybox:latest` \ No newline at end of file diff --git a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Controller/Plugins/ray.md b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Controller/Plugins/ray.md index 65c33136..51501f94 100644 --- a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Controller/Plugins/ray.md +++ b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Controller/Plugins/ray.md @@ -1,44 +1,44 @@ ---- +--- title: Ray --- -## Introduction +## 介绍 -**Ray plugin** is designed to optimize the user experience when deploying a ray cluster, it not only allows users to write less yaml, but also supports users to deploy a ray cluster. +**Ray插件**旨在优化用户部署ray集群时的体验,它不仅可以让用户编写更少的yaml,还支持用户部署ray集群。 -## How the Ray Plugin Works +## Ray 插件的工作原理 -The Ray Plugin will do three things: +Ray 插件将做三件事: -* Configure the commands of head and worker nodes in a ray cluster. -* Open three ports used by ray head node. (GCS, Ray dashboard and Client server) -* Create a service mapped to the ray head node container ports. (ex, submit a ray job, Access a ray dashboard and client server) +* 配置ray集群中头节点和工作节点的命令。 +* 打开射线头节点使用的三个端口。 (GCS、Ray 仪表板和客户端服务器) +* 创建映射到射线头节点容器端口的服务。 (例如,提交 ray 作业、访问 ray 仪表板和客户端服务器) -> *Note* -> - This plugin is based on the ray cli (Command Line Interface) and this guide use the [official ray docker image](https://hub.docker.com/r/rayproject/ray). -> - **svc plugin is necessary** when you use the ray plugin. +> *注* +> - 该插件基于 ray cli(命令行界面),本指南使用[官方 ray docker 镜像](https://hub.docker.com/r/rayproject/ray)。 +> - **使用ray插件时需要svc插件**。 -## Parameters of the Ray Plugin +## Ray插件的参数 -### Arguments +### 参数 -| ID | Name | Type | Default Value | Required | Description | Example | +| ID | 名称 | 类型 | 默认值 | 是否必填 | 描述 | 示例 | | --- | ---------------- | ------ | ------------- | -------- | --------------------------------------- | ------------------------ | -| 1 | head | string | head | No | Name of Head Task in Volcano Job | --head=head | -| 2 | worker | string | worker | No | Name of Worker Task in Volcano Job | --worker=worker | -| 3 | headContainer | string | head | No | Name of Main Container in a head task | --headContainer=head | -| 4 | workerContainer | string | worker | No | Name of Main Container in a worker task | --workerContainer=worker | -| 5 | port | string | 6379 | No | The port to open for the GCS | --port=6379 | -| 6 | dashboardPort | string | 8265 | No | The port to open for the Ray dashboard | --dashboardPort=8265 | -| 7 | clientServerPort | string | 10001 | No | The port to open for the client server | --clientServerPort=10001 | - -## Examples -> This guide is based on the instructions provided in the [RayCluster Quick Start.](https://docs.ray.io/en/master/cluster/kubernetes/getting-started/raycluster-quick-start.html#step-4-run-an-application-on-a-raycluster) - -First, create a Ray cluster using the YAML manifest shown below. -- For more details about Ray clusters, see the [Ray Cluster Key Concepts documentation](https://docs.ray.io/en/latest/cluster/key-concepts.html). -- For more details about How to compose a ray cluster, see the [Launching an On-Premise Cluster](https://docs.ray.io/en/latest/cluster/vms/user-guides/launching-clusters/on-premises.html#on-prem). +| 1 | head | string | head | 否 | Volcano 作业中头任务的名称 | --head=head | +| 2 | worker | string | worker | 否 | Volcano 作业中工作任务的名称 | --worker=worker | +| 3 | headContainer | string | head | 否 | 头任务中主容器的名称 | --headContainer=head | +| 4 | workerContainer | string | worker | 否 | 工作任务中主容器的名称 | --workerContainer=worker | +| 5 | port | string | 6379 | 否 | 为 GCS 打开的端口 | --port=6379 | +| 6 | dashboardPort | string | 8265 | 否 | 为 Ray 仪表板打开的端口 | --dashboardPort=8265 | +| 7 | clientServerPort | string | 10001 | 否 | 为客户端服务器打开的端口 | --clientServerPort=10001 | + +## 示例 +> 本指南基于 [RayCluster 快速入门](https://docs.ray.io/en/master/cluster/kubernetes/getting-started/raycluster-quick-start.html#step-4-run-an-application-on-a-raycluster) 中提供的说明。 + +首先,使用下面显示的 YAML 清单创建一个 Ray 集群。 +- 有关 Ray 集群的更多详细信息,请参阅 [Ray 集群核心概念文档](https://docs.ray.io/en/latest/cluster/key-concepts.html)。 +- 有关如何构建 Ray 集群的更多详细信息,请参阅 [启动本地集群](https://docs.ray.io/en/latest/cluster/vms/user-guides/launching-clusters/on-premises.html#on-prem)。 ```yaml apiVersion: batch.volcano.sh/v1alpha1 kind: Job @@ -76,7 +76,7 @@ spec: ``` -Once applied, a Ray cluster consisting of a `head node` and one or more `worker nodes` will be provisioned. +一旦应用,将配置一个由“头节点”和一个或多个“工作节点”组成的 Ray 集群。 ```sh kubectl get pod @@ -89,8 +89,8 @@ ray-cluster-job-worker-0 1/1 Running 0 106s ray-cluster-job-worker-1 1/1 Running 0 106s ``` -Along with the cluster, a `ray-cluster-job-head-svc` [Kubernetes service](https://kubernetes.io/docs/concepts/services-networking/service/) resource is also created. -(`ray-cluster-job` `service` is created by `svc` plugin.) +与集群一起,还会创建一个 `ray-cluster-job-head-svc` [Kubernetes 服务](https://kubernetes.io/docs/concepts/services-networking/service/) 资源。 +(`ray-cluster-job` `service` 是由 `svc` 插件创建的。) ```sh kubectl get service ``` @@ -101,14 +101,14 @@ ray-cluster-job ClusterIP None ray-cluster-job-head-svc ClusterIP 10.96.184.65 6379/TCP,8265/TCP,10001/TCP 3s ``` -Now that the service name is available, use port-forwarding to access the Ray Dashboard port which is 8265 by default. +现在服务名称可用,使用端口转发来访问 Ray Dashboard 端口(默认为 8265)。 ```sh # Execute this in a separate shell. kubectl port-forward service/ray-cluster-job-head-svc 8265:8265 > /dev/null & ``` -Now that the Dashboard port is accessible, submit jobs to the RayCluster: +现在可以访问仪表板端口了,向 RayCluster 提交作业: ```sh # The following job's logs will show the Ray cluster's total resource capacity, including 2 CPUs. ray job submit --address http://localhost:8265 -- python -c "import ray; ray.init(); print(ray.cluster_resources())" @@ -118,30 +118,30 @@ ray job submit --address http://localhost:8265 -- python -c "import ray; ray.ini Job submission server address: http://localhost:8265 ------------------------------------------------------- -Job 'raysubmit_W8nYZjW4HEFG6Mqa' submitted successfully +作业“raysubmit_W8nYZjW4HEFG6Mqa”提交成功 ------------------------------------------------------- -Next steps - Query the logs of the job: - ray job logs raysubmit_W8nYZjW4HEFG6Mqa - Query the status of the job: - ray job status raysubmit_W8nYZjW4HEFG6Mqa - Request the job to be stopped: - ray job stop raysubmit_W8nYZjW4HEFG6Mqa - -Tailing logs until the job exits (disable with --no-wait): -2025-09-23 14:58:49,442 INFO job_manager.py:531 -- Runtime env is setting up. -2025-09-23 14:59:00,106 INFO worker.py:1630 -- Using address 10.244.2.42:6379 set in the environment variable RAY_ADDRESS -2025-09-23 14:59:00,144 INFO worker.py:1771 -- Connecting to existing Ray cluster at address: 10.244.2.42:6379... -2025-09-23 14:59:00,161 INFO worker.py:1942 -- Connected to Ray cluster. View the dashboard at http://10.244.2.42:8265 -{'memory': 16277940225.0, 'node:10.244.4.41': 1.0, 'object_store_memory': 6976260095.0, 'CPU': 30.0, 'node:10.244.3.42': 1.0, 'node:10.244.2.42': 1.0, 'node:__internal_head__': 1.0} +后续步骤 + 查询作业的日志: + ray 作业日志raysubmit_W8nYZjW4HEFG6Mqa + 查询作业状态: + 射线作业状态raysubmit_W8nYZjW4HEFG6Mqa + 请求停止作业: + 射线作业停止raysubmit_W8nYZjW4HEFG6Mqa + +跟踪日志直到作业退出(使用 --no-wait 禁用): +2025-09-23 14:58:49,442 INFO job_manager.py:531 -- 正在设置运行时环境。 +2025-09-23 14:59:00,106 INFO worker.py:1630 -- 使用环境变量 RAY_ADDRESS 中设置的地址 10.244.2.42:6379 +2025-09-23 14:59:00,144 INFO worker.py:1771 -- 连接到地址为 10.244.2.42:6379 的现有 Ray 集群... +2025-09-23 14:59:00,161 INFO worker.py:1942 -- 连接到 Ray 集群。查看仪表板:http://10.244.2.42:8265 +{'内存':16277940225.0,'节点:10.244.4.41':1.0,'object_store_memory':6976260095.0,'CPU':30.0,'节点:10.244.3.42':1.0,'节点:10.244.2.42': 1.0, '节点:__internal_head__': 1.0} ------------------------------------------ -Job 'raysubmit_W8nYZjW4HEFG6Mqa' succeeded +作业“raysubmit_W8nYZjW4HEFG6Mqa”成功 ------------------------------------------ ``` -Visit `${YOUR_IP}:8265` in your browser for the Dashboard. For example, `127.0.0.1:8265`. See the job you submitted the above in the Recent jobs pane as shown below. +在浏览器中访问 `${YOUR_IP}:8265` 查看仪表板。例如,“127.0.0.1:8265”。在“最近的作业”窗格中查看您在上面提交的作业,如下所示。 -![ray_dashboard](/img/ray-dashboard.png) +![ray_dashboard](/img/ray-dashboard.png) \ No newline at end of file diff --git a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Controller/Plugins/ssh.md b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Controller/Plugins/ssh.md index 15c9e39e..88e5996c 100644 --- a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Controller/Plugins/ssh.md +++ b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Controller/Plugins/ssh.md @@ -1,40 +1,40 @@ ---- +--- title: SSH --- -## Background -**SSH Plugin** is designed for the login without password for pods within a volcano job , which is necessary for workloads -such as [MPI](https://www.open-mpi.org/). It often works with `SVC` plugin. +## 背景 +**SSH 插件** 专为火山作业中的 Pod 无需密码登录而设计,这对于工作负载来说是必需的 +例如[MPI](https://www.open-mpi.org/)。它通常与“SVC”插件一起使用。 -## Key Points -* If `ssh-key-file-path` is configured, please ensure the private and public keys exist under the target directory. -Suggest keeping default value in most scenarios. -* If `ssh-private-key` or `ssh-public-key` is configured, please ensure the value is correct. Suggest keeping the default -keys in most scenarios. -* Once `SSH` plugin is configured, a secret whose name joins the job name and `-ssh` will be created, which contains -`authorized_keys`/`id_rsa`/`config` and `id_rsa.pub`. It will be mounted to the given path as a volume for all containers -(including initContainers) within the job. -* You can get all the hostnames within the job in `/root/.ssh/config` by default. This file contains the pairs of hostname -and subdomain. -* If `SSH` plugin is configured, you can sign in any other pods in the same job by `ssh hostname` without password. +## 要点 +* 如果配置了 `ssh-key-file-path`,请确保目标目录下存在私钥和公钥。 +建议大多数情况下保留默认值。 +* 如果配置了 `ssh-private-key` 或 `ssh-public-key`,请确保值正确。建议保持默认 +大多数场景下的按键。 +* 配置`SSH`插件后,将创建一个名称与作业名称和`-ssh`相结合的secret,其中包含 +`authorized_keys`/`id_rsa`/`config` 和 `id_rsa.pub`。它将作为所有容器的卷安装到给定路径 +(包括 initContainers)在作业中。 +* 默认情况下,您可以在`/root/.ssh/config`中获取作业中的所有主机名。该文件包含主机名对 +和子域。 +* 如果配置了`SSH`插件,您可以通过`ssh主机名`无需密码登录同一作业中的任何其他pod。 -## Arguments -| ID | Name | Type | Default Value | Required | Description | Example | +## 参数 +| ID | 名称 | 类型 | 默认值 | 是否必填 | 描述 | 示例 | |-----|----------------------|--------|---------------------|----------|-----------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| 1 | `ssh-key-file-path` | String | `/root/.ssh` | N | The path used to store ssh private and public keys. | ssh: ["--ssh-key-file-path=/home/user/.ssh"] | -| 2 | `ssh-private-key` | String | DEFAULT_PRIVATE_KEY | N | The input string of the private key. | ssh: ["--ssh-private-key=-----BEGIN RSA PRIVATE KEY-----\nMIIEpAIBAAKCAQEAyeyZjWDx5Na9bw1f61M4s+QlLT/kyrB37AR2j5Sb/A9hvJak\nLNQQpNC+KVfYNl4jePG+6lwHqye//pcC9+0SWsHWwgaahjMLnAthR2k8JAakNA9x\nV/wHz0YU99OKEetaOuxXpWZPXCHX0zuQO87YbdKzRbgxACirM3Phkwr7XLtQtWZk\nyXG34CQXZQWgBIS1Fl+PlGOpVpOPnWoZPMpbAK74i/Tz4sP8Zhqc6dya1hrbUwY3\nYfMZNYXpaAw7wWVjq8grfs0+Fl3SxHrzTXge2m+eZAZ6iPJ8cX4uYKxi0ZmxpM/a\ngI6Mmjq0MU75Vxpq22LaUvHIpOfX5UxhkrsxlwIDAQABAoIBAQDGOuIb6zpNn4rl\nBMpPqamW4LimjX08hrWUHGWQWyIu96LJk1GlOKMGSm8FA1odNZm5WApG5QYaPrG7\na+DcJ/7G3ljIrdbxPBd/n6RmiKcj7ukwuqBY8fFwyKo5CZEYOmagRfldRO1P02Gf\n22+jZ1MNrbWVElf4gfRgVLj0s+lEhFkzhi+QGMmMpjEJnnG98xxVGEvWMw1rnKJm\n3Gi771Gltbg3GuEPs3IeoBgba3EaHmSxJnBivAL4zsO8UUCAXB13cUiXx8qO7y1e\nCSWSenRmK2ugbL6v0co12O0n0pxF9xlJ6fALdRWzpJsFlN3ttkY9N5GrQc/pVjOa\nvqa172RRAoGBAOSAIMNLT6QjgYDk5Z7ZxjNnxH/lMso+cx6bxk9YMKRrw0fDQh8m\ncBAihXhuntCPDGhrzQ+Anqx4jJVDFqac0xBck90a8LmmzD0q72eDTCYPouDWe6DL\nJQAc/HDmIC13sADEXmGW3c0Qn4hjBnMd89ouYj7ZajU2sED2irPPc/HLAoGBAOI5\nruL4Q0FarGrP3a9z9EDrVJsK2OfSTaJ7rhZ+uvB838svbHU+4mEYPhx4PCwvrYyi\nFn4hyau003ZmLc1qTABjmwcO/PPiYyoRHJDUIIhiIyIL+id/G53uG2eTzqYtU6uS\nnAIB2rKwwhU8ek+zbJBLu5uxuxlf4mdZITdkwtXlAoGBALH3RQ02A9JgQQYFwP2G\nucLhx/6goX05RGoLg1na4w+8Sr0Cy+X9BvzaFkAlUBY5w700cOLpFyxXO48pUGP1\n8sFkiVmFGQZPbfUaEpn5ff6K4R3ijyk97xR2fvrjkR44gOEoECZL3XZQwx/zmFti\nccF1rNksdnb5oC8IliDTq4cfAoGANyy6asECJj5nLuXju5ccS3kZ+XZ70I6KQMbJ\nftMJ5P2P146JdU8RB31SKL9qbZxzR4mA0uKKvUYtDQN+yErUnoOsm9wb9Z+RcAEc\nZnZWOO02hGdHa7qkkbAxHuH91KnZbk8jnZm2LT7PFz7Y1fd80vSlnSOL7nRkU7B5\nWXlJy8ECgYA4g0wc0Jq8c1Q0FulMkOQqYRDXaDo34987L+mZ70i/RtdkKjK/IKJ9\n18UDCyEaDPD0BWBJGPejZkY8UD6FBG/5k7wNIbT7hHLRSRlw4iRmVX2hRVXrXzD8\nvc86Qyg2iG0JqkMAvRdH40amPKp5bW4VcfcvQo4TSsI972u12rgwtg==\n-----END RSA PRIVATE KEY-----\n"] | -| 3 | `ssh-public-key` | String | DEFAULT_PUBLIC_KEY | N | The input string of the public key. | ssh: ["--ssh-public-key=ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDJ7JmNYPHk1r1vDV/rUziz5CUtP+TKsHfsBHaPlJv8D2G8lqQs1BCk0L4pV9g2XiN48b7qXAerJ7/+lwL37RJawdbCBpqGMwucC2FHaTwkBqQ0D3FX/AfPRhT304oR61o67FelZk9cIdfTO5A7ztht0rNFuDEAKKszc+GTCvtcu1C1ZmTJcbfgJBdlBaAEhLUWX4+UY6lWk4+dahk8ylsArviL9PPiw/xmGpzp3JrWGttTBjdh8xk1heloDDvBZWOryCt+zT4WXdLEevNNeB7ab55kBnqI8nxxfi5grGLRmbGkz9qAjoyaOrQxTvlXGmrbYtpS8cik59flTGGSuzGX root@aiplatform"] | +| 1 | `ssh-key-file-path` | String | `/root/.ssh` | N | 用于存储 ssh 私钥和公钥的路径。 | ssh: ["--ssh-key-file-path=/home/user/.ssh"] | +| 2 | `ssh-private-key` | String | DEFAULT_PRIVATE_KEY | N | 私钥的输入字符串。 | ssh: ["--ssh-private-key=-----BEGIN RSA PRIVATE KEY-----\nMIIEpAIBAAKCAQEAyeyZjWDx5Na9bw1f61M4s+QlLT/kyrB37AR2j5Sb/A9hvJak\nLNQQpNC+KVfYNl4jePG+6lwHqye//pcC9+0SWsHWwgaahjMLnAthR2k8JAakNA9x\nV/wHz0YU99OKEetaOuxXpWZPXCHX0zuQO87YbdKzRbgxACirM3Phkwr7XLtQtWZk\nyXG34CQXZQWgBIS1Fl+PlGOpVpOPnWoZPMpbAK74i/Tz4sP8Zhqc6dya1hrbUwY3\nYfMZNYXpaAw7wWVjq8grfs0+Fl3SxHrzTXge2m+eZAZ6iPJ8cX4uYKxi0ZmxpM/a\ngI6Mmjq0MU75Vxpq22LaUvHIpOfX5UxhkrsxlwIDAQABAoIBAQDGOuIb6zpNn4rl\nBMpPqamW4LimjX08hrWUHGWQWyIu96LJk1GlOKMGSm8FA1odNZm5WApG5QYaPrG7\na+DcJ/7G3ljIrdbxPBd/n6RmiKcj7ukwuqBY8fFwyKo5CZEYOmagRfldRO1P02Gf\n22+jZ1MNrbWVElf4gfRgVLj0s+lEhFkzhi+QGMmMpjEJnnG98xxVGEvWMw1rnKJm\n3Gi771Gltbg3GuEPs3IeoBgba3EaHmSxJnBivAL4zsO8UUCAXB13cUiXx8qO7y1e\nCSWSenRmK2ugbL6v0co12O0n0pxF9xlJ6fALdRWzpJsFlN3ttkY9N5GrQc/pVjOa\nvqa172RRAoGBAOSAIMNLT6QjgYDk5Z7ZxjNnxH/lMso+cx6bxk9YMKRrw0fDQh8m\ncBAihXhuntCPDGhrzQ+Anqx4jJVDFqac0xBck90a8LmmzD0q72eDTCYPouDWe6DL\nJQAc/HDmIC13sADEXmGW3c0Qn4hjBnMd89ouYj7ZajU2sED2irPPc/HLAoGBAOI5\nruL4Q0FarGrP3a9z9EDrVJsK2OfSTaJ7rhZ+uvB838svbHU+4mEYPhx4PCwvrYyi\nFn4hyau003ZmLc1qTABjmwcO/PPiYyoRHJDUIIhiIyIL+id/G53uG2eTzqYtU6uS\nnAIB2rKwwhU8ek+zbJBLu5uxuxlf4mdZITdkwtXlAoGBALH3RQ02A9JgQQYFwP2G\nucLhx/6goX05RGoLg1na4w+8Sr0Cy+X9BvzaFkAlUBY5w700cOLpFyxXO48pUGP1\n8sFkiVmFGQZPbfUaEpn5ff6K4R3ijyk97xR2fvrjkR44gOEoECZL3XZQwx/zmFti\nccF1rNksdnb5oC8IliDTq4cfAoGANyy6asECJj5nLuXju5ccS3kZ+XZ70I6KQMbJ\nftMJ5P2P146JdU8RB31SKL9qbZxzR4mA0uKKvUYtDQN+yErUnoOsm9wb9Z+RcAEc\nZnZWOO02hGdHa7qkkbAxHuH91KnZbk8jnZm2LT7PFz7Y1fd80vSlnSOL7nRkU7B5\nWXlJy8ECgYA4g0wc0Jq8c1Q0FulMkOQqYRDXaDo34987L+mZ70i/RtdkKjK/IKJ9\n18UDCyEaDPD0BWBJGPejZkY8UD6FBG/5k7wNIbT7hHLRSRlw4iRmVX2hRVXrXzD8\nvc86Qyg2iG0JqkMAvRdH40amPKp5bW4VcfcvQo4TSsI972u12rgwtg==\n-----END RSA PRIVATE KEY-----\n"] | +| 3 | `ssh-public-key` | String | DEFAULT_PUBLIC_KEY | N | 公钥的输入字符串。 | ssh: ["--ssh-public-key=ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDJ7JmNYPHk1r1vDV/rUziz5CUtP+TKsHfsBHaPlJv8D2G8lqQs1BCk0L4pV9g2XiN48b7qXAerJ7/+lwL37RJawdbCBpqGMwucC2FHaTwkBqQ0D3FX/AfPRhT304oR61o67FelZk9cIdfTO5A7ztht0rNFuDEAKKszc+GTCvtcu1C1ZmTJcbfgJBdlBaAEhLUWX4+UY6lWk4+dahk8ylsArviL9PPiw/xmGpzp3JrWGttTBjdh8xk1heloDDvBZWOryCt+zT4WXdLEevNNeB7ab55kBnqI8nxxfi5grGLRmbGkz9qAjoyaOrQxTvlXGmrbYtpS8cik59flTGGSuzGX root@aiplatform"] | -## Note: -* `DEFAULT_PRIVATE_KEY` and `DEFAULT_PUBLIC_KEY` are not fully listed for they are too long. Please refer to the examples -behind for cases. -* Volcano is not responsible for the validation of `ssh-key-file-path`. So please guarantee it correct yourself. -* Suggest keeping blank and making use of the default values in most scenarios just like the example behind. If that, -Volcano will help generate a pair of keys and finish all the configuration by default. +## 注意: +* `DEFAULT_PRIVATE_KEY` 和 `DEFAULT_PUBLIC_KEY` 未完整列出,因为它们太长。请参考示例 +落后于案件。 +* Volcano 不负责“ssh-key-file-path”的验证。所以请保证自己正确。 +* 建议在大多数情况下保留空白并使用默认值,就像后面的示例一样。如果那样的话, +Volcano默认会帮助生成一对密钥并完成所有配置。 -## Examples +## 示例 ```yaml apiVersion: batch.volcano.sh/v1alpha1 kind: Job @@ -89,10 +89,9 @@ spec: workingDir: /home restartPolicy: OnFailure ``` -## Note: -* This example will create a mpi job with 1 `master` and 2 `workers`. -* Because the `SVC` plugin is enabled, you can get all the hosts in any pod by environment variables. Also, you can get -the hosts in `/root/.ssh/config` if you use the default ssh configuration. +## 注意: +* 此示例将创建一个包含 1 个 `master` 和 2 个 `worker` 的 MPI 作业。 +* 由于启用了 `SVC` 插件,您可以通过环境变量获取任何 Pod 中的所有主机。此外,如果您使用默认的 SSH 配置,您还可以在 `/root/.ssh/config` 中获取这些主机。 ``` [root@mpi-job-master-0 /]# cat /root/.ssh/config StrictHostKeyChecking no @@ -104,22 +103,22 @@ Host mpi-job-mpiworker-0 Host mpi-job-mpiworker-1 HostName mpi-job-mpiworker-1.mpi-job ``` -* You can sign in other hosts in `master` pod as follows. +* 您可以按如下方式在 master pod 中登录其他主机。 ``` [root@mpi-job-master-0 /]# ssh mpi-job-mpiworker-0 Warning: Permanently added 'mpi-job-mpiworker-0.mpi-job,X.X.X.X' (ECDSA) to the list of known hosts. Welcome to Ubuntu 18.04.3 LTS (GNU/Linux 3.10.0-1160.36.2.el7.x86_64 x86_64) - * Documentation: https://help.ubuntu.com - * Management: https://landscape.canonical.com - * Support: https://ubuntu.com/advantage + * 文档:https://help.ubuntu.com + *管理:https://landscape.canonical.com + * 支持:https://ubuntu.com/advantage -This system has been minimized by removing packages and content that are -not required on a system that users do not log into. +通过删除以下软件包和内容,该系统已被最小化 +在用户未登录的系统上不需要。 To restore this content, you can run the 'unminimize' command. Last login: Thu Apr 14 07:19:05 2022 from 10.244.0.67 root@mpi-job-mpiworker-0:~# ``` -## Note -* Please ensure `sshd` service is available in all containers. +## 注意 +* 请确保所有容器中都可用 `sshd` 服务。 diff --git a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Controller/Plugins/svc.md b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Controller/Plugins/svc.md index 15145701..d46a9ca7 100644 --- a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Controller/Plugins/svc.md +++ b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Controller/Plugins/svc.md @@ -1,44 +1,44 @@ ---- +--- title: SVC --- -## Background +## 背景 -**SVC Plugin** is designed for the communication for pods within a volcano job, which is essential for workloads such as -[TensorFlow](https://tensorflow.google.cn/) and [MPI](https://www.open-mpi.org/). For example, it is necessary for -`tensorflow job` to contact with each other between `ps` and `worker`. Volcano job plugin `svc` enable pods within a job -to visit each other by domain. +**SVC 插件** 专为火山作业中的 Pod 通信而设计,这对于以下工作负载至关重要 +[TensorFlow](https://tensorflow.google.cn/) 和 [MPI](https://www.open-mpi.org/)。例如,需要 +“tensorflow job”用于在“ps”和“worker”之间相互联系。 Volcano 作业插件 `svc` 在作业中启用 Pod +通过域互相访问。 -## Key Points +## 要点 -- Once `svc` plugin is configured, value of field `hostname` under `spec` will be filled out to be **the pod name** for - all pods under the job automatically. Namely, `pod.spec.hostname` is `pod.metadata.name`. -- Once `svc` plugin is configured, value of field `subdomain` under `spec` will be filled out to be **the job name** for - all pods under the job automatically. Namely, `pod.spec.subdomain` is `job.metadata.name`. -- Once `svc` plugin is configured, environment variables `VC_%s_NUM` will be registered to all the containers(including - initContainers) under the job automatically. `%s` will be replaced by the **task name** which the pod belongs to. The value - of the environment variable is the **task replicas**. The number of the environment variables depends on the number of tasks, - which is usually `2` for most AI and Big Data jobs contains 2 roles. For example, a Spark job contains `driver` and `executor`. -- Once `svc` plugin is configured, environment variables `VC_%s_HOSTS` will be registered to all the containers(including - initContainers) under the job automatically. `%s` will be replaced by the **task name** which the pod belongs to. The value - of the environment variable are the domains of all the pods under the task. The number of the environment variables depends - on the number of tasks, which is usually `2` for most AI and Big Data jobs contains 2 roles. For example, a TensorFlow job - contains `ps` and `worker`. -- A configmap whose name joins job-name and `svc` with `-` will be created automatically, which contains replicas of all - tasks and domains of all pods under the task. It will be mounted as a volume for all pods under the job and serves as the - host files under the directory `/etc/volcano/`. -- A headless service whose name is the same with job will be created. -- If `disable-network-policy` is set to be false, a `NetworkPolicy` object with the type `Ingress` will be created for - the job. +- 配置完`svc`插件后,`spec`下的`hostname`字段的值将被填写为**pod名称** + 自动执行该作业下的所有 Pod。即,“pod.spec.hostname”是“pod.metadata.name”。 +- 一旦配置了`svc`插件,`spec`下的字段`subdomain`的值将被填写为**作业名称** + 自动执行该作业下的所有 Pod。即,“pod.spec.subdomain”是“job.metadata.name”。 +- 一旦配置了`svc`插件,环境变量`VC_%s_NUM`将被注册到所有容器(包括 + initContainers)会自动在作业下进行。 `%s` 将替换为 pod 所属的**任务名称**。价值 + 环境变量的值是**任务副本**。环境变量的数量取决于任务的数量, + 对于大多数人工智能和大数据工作来说,通常是“2”,包含 2 个角色。例如,Spark作业包含“driver”和“executor”。 +- 一旦配置了 svc 插件,环境变量 VC_%s_HOSTS 将被注册到所有容器(包括 + initContainers)会自动在作业下进行。 `%s` 将替换为 pod 所属的**任务名称**。价值 + 环境变量的值是该任务下所有 pod 的域。环境变量的数量取决于 + 任务数量,对于大多数人工智能和大数据工作包含 2 个角色,通常为“2”。例如,TensorFlow 作业 + 包含`ps`和`worker`。 +- 将自动创建一个名为 job-name 和 `svc` 并带有 `-` 的 configmap,其中包含所有作业的副本 + 任务以及该任务下所有 pod 的域。它将作为作业下所有 pod 的卷进行挂载,并作为 + 目录 `/etc/volcano/` 下的主机文件。 +- 将创建一个与作业名称相同的无头服务。 +- 如果“disable-network-policy”设置为 false,则会创建一个“Ingress”类型的“NetworkPolicy”对象 + 工作。 -## Arguments +## 参数 -| ID | Name | Value | Default Value | Required | Description | Example | +| ID | 名称 | 值 | 默认值 | 是否必填 | 描述 | 示例 | | --- | ----------------------------- | -------------- | ------------- | -------- | ---------------------------------------------------- | ------------------------------------------- | -| 1 | `publish-not-ready-addresses` | `true`/`false` | `false` | N | whether publish the pod address when it is not ready | svc: ["--publish-not-ready-addresses=true"] | -| 2 | `disable-network-policy` | `true`/`false` | `false` | N | whether disable network policy for the job | svc: ["--disable-network-policy=true"] | +| 1 | `publish-not-ready-addresses` | `true`/`false` | `false` | 否 | pod 未就绪时是否发布 pod 地址 | svc: ["--publish-not-ready-addresses=true"] | +| 2 | `disable-network-policy` | `true`/`false` | `false` | 否 | 是否禁用作业的网络策略 | svc: ["--disable-network-policy=true"] | -## Examples +## 示例 ```yaml apiVersion: batch.volcano.sh/v1alpha1 @@ -104,10 +104,10 @@ spec: restartPolicy: Never ``` -## Note: +## 笔记: -- Fields `hostname` and `subdomain` have been added to the pods under job `tensorflow-dist-mnist`. The following is part - yaml of the `ps` pod. +- 字段“hostname”和“subdomain”已添加到作业“tensorflow-dist-mnist”下的 Pod 中。以下为部分内容 + `ps` pod 的 yaml。 ```yaml apiVersion: v1 @@ -232,7 +232,7 @@ status: startTime: "2022-04-13T02:08:17Z" ``` -- Host information is registered to all pods under the job. The following are registered environment variables for `ps` pod. +- 主机信息注册到作业下的所有 Pod 中。以下是`ps` pod 的注册环境变量。 ``` [root@tensorflow-dist-mnist-ps-0 /] env | grep VC @@ -242,7 +242,7 @@ VC_WORKER_NUM=2 VC_WORKER_HOSTS=tensorflow-dist-mnist-worker-0.tensorflow-dist-mnist,tensorflow-dist-mnist-worker-1.tensorflow-dist-mnist ## worker pods domains ``` -- The host files added under `/etc/volcano` are as follows. +- `/etc/volcano`下添加的主机文件如下。 ``` [root@tensorflow-dist-mnist-ps-0 /] ls /etc/volcano/ @@ -254,7 +254,7 @@ tensorflow-dist-mnist-worker-0.tensorflow-dist-mnist tensorflow-dist-mnist-worker-1.tensorflow-dist-mnist ``` -- The headless service `tensorflow-dist-mnist` generated for the job is as follows. +- 为作业生成的无头服务“tensorflow-dist-mnist”如下。 ```yaml apiVersion: v1 @@ -288,7 +288,7 @@ status: loadBalancer: {} ``` -- The configmap `tensorflow-dist-mnist-svc` generated for the job is as follows. +- 为作业生成的配置映射“tensorflow-dist-mnist-svc”如下。 ```yaml apiVersion: v1 @@ -317,7 +317,7 @@ metadata: uid: c4f3db21-6857-451f-b8b8-bbd5aa8b06ec ``` -- The networkpolicy `tensorflow-dist-mnist` generated for the job is as follows. +- 为作业生成的网络策略“tensorflow-dist-mnist”如下。 ```yaml apiVersion: networking.k8s.io/v1 @@ -350,7 +350,7 @@ spec: - Ingress ``` -## Note +## 笔记 -- DNS plugin is required in your Kubernetes cluster such as `corndns`. -- Kubernetes version >= v1.14 +- Kubernetes 集群中需要 DNS 插件,例如“corndns”。 +- Kubernetes 版本 >= v1.14 \ No newline at end of file From 77aeb329d5a55bef4e01a8bc507efd0e17177cdc Mon Sep 17 00:00:00 2001 From: hemantch01 Date: Mon, 15 Jun 2026 06:38:28 +0000 Subject: [PATCH 6/7] docs: translate Scheduler plugins to Chinese Signed-off-by: hemantch01 --- .../current/Scheduler/Plugins/_category_.json | 6 +- .../current/Scheduler/Plugins/binpack.md | 48 +++---- .../current/Scheduler/Plugins/capacity.md | 42 +++--- .../current/Scheduler/Plugins/cdp.md | 42 +++--- .../current/Scheduler/Plugins/deviceshare.md | 24 ++-- .../current/Scheduler/Plugins/drf.md | 1 - .../current/Scheduler/Plugins/gang.md | 40 +++--- .../current/Scheduler/Plugins/nodegroup.md | 132 +++++++++--------- .../current/Scheduler/Plugins/nodeorder.md | 74 +++++----- .../current/Scheduler/Plugins/numa_aware.md | 74 +++++----- .../current/Scheduler/Plugins/overcommit.md | 24 ++-- .../current/Scheduler/Plugins/pdb.md | 24 ++-- .../current/Scheduler/Plugins/predicates.md | 52 +++---- .../current/Scheduler/Plugins/priority.md | 36 ++--- .../current/Scheduler/Plugins/proportion.md | 64 ++++----- .../current/Scheduler/Plugins/rescheduling.md | 38 ++--- .../Plugins/resource_strategy_fit.md | 122 ++++++++-------- .../Scheduler/Plugins/resourcequota.md | 22 +-- .../current/Scheduler/Plugins/sla.md | 48 +++---- .../Scheduler/Plugins/task_topology.md | 32 ++--- .../current/Scheduler/Plugins/tasktopology.md | 44 +++--- .../current/Scheduler/Plugins/tdm.md | 60 ++++---- .../current/Scheduler/Plugins/usage.md | 36 ++--- 23 files changed, 542 insertions(+), 543 deletions(-) diff --git a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Scheduler/Plugins/_category_.json b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Scheduler/Plugins/_category_.json index d4eb446f..9f5cc1af 100644 --- a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Scheduler/Plugins/_category_.json +++ b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Scheduler/Plugins/_category_.json @@ -1,4 +1,4 @@ { - "label": "Plugins", - "key": "scheduler-plugins" -} + "label": "插件", + "key": "scheduler-plugins" +} \ No newline at end of file diff --git a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Scheduler/Plugins/binpack.md b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Scheduler/Plugins/binpack.md index baab3ee3..af3cfe42 100644 --- a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Scheduler/Plugins/binpack.md +++ b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Scheduler/Plugins/binpack.md @@ -3,41 +3,41 @@ title: Binpack --- ## 概述 -Binpack 调度算法的目标是尽可能填满现有节点(尽量不向空节点分配任务)。在具体实现中,Binpack 调度算法会对能够承载任务的节点进行打分,分数越高表示资源利用率越高。Binpack 算法能够尽可能地填满节点,将应用负载整合到部分节点上,这非常有利于 Kubernetes 集群的节点自动伸缩功能。 +Binpack调度算法的目标是尽可能地填充现有节点(尽量不分配给空节点)。具体实现中,Binpack调度算法对能够容纳任务的节点进行评分,评分越高,资源利用率越高。 Binpack算法可以尽可能的填满节点,将应用负载整合到部分节点上,非常有利于Kubernetes集群的节点自动伸缩功能。 -## 工作原理 +## 它是如何运作的 -Binpack 算法以插件形式注入到 Volcano 调度器进程中,并在 Pod 的节点选择阶段生效。在计算 Binpack 分数时,Volcano 调度器会考虑 Pod 申请的各种资源,并根据每种资源配置的权重进行加权平均。 +Binpack算法作为插件注入到Volcano Scheduler进程中,并在Pod的节点选择阶段应用。在计算 Binpack 分数时,Volcano Scheduler 会考虑 Pod 请求的各种资源,并根据为每个资源配置的权重对其进行平均。 -主要特性: +主要特点: -- **资源权重**:每种资源类型(CPU、内存、GPU 等)在打分计算中可以设置不同的权重,具体取决于管理员配置的权重值。 -- **插件权重**:在计算节点分数时,不同插件也需要分配不同的权重。调度器同样会为 Binpack 插件设置分数权重。 -- **NodeOrderFn**:该插件实现了 NodeOrderFn,根据任务放置后节点的资源利用效率对节点进行打分。 +- **资源权重**:每种资源类型(CPU、内存、GPU等)在评分计算中可以有不同的权重,具体取决于管理员配置的权重值。 +- **插件权重**:不同的插件在计算节点分数时也需要分配不同的权重。调度程序还为 Binpack 插件设置分数权重。 +- **NodeOrderFn**:该插件实现 NodeOrderFn 以根据放置任务后节点的利用效率来对节点进行评分。 -## 应用场景 +## 设想 -Binpack 算法适用于能够尽可能填满节点的小型作业: +Binpack算法对于可以填充尽可能多的节点的小型作业是有益的: ### 大数据场景 -大数据处理中的单次查询作业可通过 Binpack 将工作负载整合,最大化活跃节点的资源利用率。 +大数据处理中的单个查询作业可以通过整合工作负载并最大限度地提高活动节点上的资源利用率来受益于 Binpack。 ### 电商高并发 -电商秒杀场景中的订单生成可利用 Binpack,在峰值负载期间高效使用可用资源。 +电商闪购场景中的订单生成可以利用 Binpack 在高峰负载期间高效利用可用资源。 -### AI 推理 +### 人工智能推理 -AI 推理场景中的单次识别作业可受益于整合调度,减少资源碎片化。 +AI推理场景中的单一识别作业受益于统一调度,减少资源碎片。 ### 互联网服务 -互联网高并发服务场景可通过 Binpack 减少节点内部碎片,并在空闲机器上为申请了较多资源的 Pod 预留足够的资源空间,最大化集群空闲资源的利用率。 +互联网上的高并发服务场景受益于 Binpack,减少节点内的碎片,并在空闲机器上为申请更多资源请求的 Pod 保留足够的资源空间,最大限度地利用集群中的空闲资源。 ## 配置 -Binpack 插件在调度器 ConfigMap 中配置,支持可选的权重参数: +Binpack 插件在调度程序 ConfigMap 中使用可选的权重参数进行配置: ```yaml tiers: @@ -53,17 +53,17 @@ tiers: ### 配置参数 -| 参数 | 说明 | 默认值 | -|-----------|-------------|---------| -| `binpack.weight` | Binpack 插件分数的整体权重 | 1 | -| `binpack.cpu` | CPU 资源在打分中的权重 | 1 | -| `binpack.memory` | 内存资源在打分中的权重 | 1 | -| `binpack.resources` | 需要纳入考量的额外资源 | - | +| 参数 | 描述 | 默认值 | +|-----------|-------------|---------| +| `binpack.weight` | Binpack 插件评分的整体权重 | 1 | +| `binpack.cpu` | 评分中 CPU 资源的权重 | 1 | +| `binpack.memory` | 评分中内存资源的权重 | 1 | +| `binpack.resources` | 需要考虑的其他资源 | - | | `binpack.resources.` | 特定资源类型的权重 | 1 | -## 示例 +## 例子 -以下是一个使用 Binpack 优先填满节点的调度器配置示例: +下面是一个使用 Binpack 来确定节点填充优先级的调度程序配置示例: ```yaml apiVersion: v1 @@ -88,4 +88,4 @@ data: binpack.memory: 1 ``` -在此配置中,Binpack 插件的权重为 10,CPU 在打分计算中的权重是内存的两倍。 \ No newline at end of file +在此配置中,Binpack 插件的权重为 10,在评分计算中 CPU 的权重是内存的两倍。 \ No newline at end of file diff --git a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Scheduler/Plugins/capacity.md b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Scheduler/Plugins/capacity.md index 9bb70dbf..9d4debad 100644 --- a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Scheduler/Plugins/capacity.md +++ b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Scheduler/Plugins/capacity.md @@ -4,30 +4,30 @@ title: Capacity --- -## Introduction +## 介绍 -Capacity plugin is a replacement of proportion plugin, but instead of dividing the queue's deserved resources by weight, it realizes elastic queue capacity management i.e., queue's resource borrowing and lending mechanism by specifying the amount of deserved resources for each dimension resource of the queue. +容量插件是比例插件的替代,但不是按权重划分队列应得资源,而是通过指定队列每个维度资源应得资源量来实现弹性队列容量管理,即队列的资源借入和借出机制。 -A queue can use the idle resources of other queues, and when other queues submit jobs, they can reclaim the resources that have been lent, and the amount of reclaimed resources is the amount of queue's deserved resources. For more detail, please see [Capacity scheduling design](https://github.com/volcano-sh/volcano/blob/master/docs/design/capacity-scheduling.md) +一个队列可以使用其他队列的空闲资源,当其他队列提交作业时,可以回收已借出的资源,回收的资源量就是该队列应得的资源量。更多详情请参见【容量调度设计】(https://github.com/volcano-sh/volcano/blob/master/docs/design/capacity-scheduling.md) -## Environment setup +## 环境设置 -### Install volcano +### 安装火山 -Refer to [Install Guide](https://github.com/volcano-sh/volcano/blob/master/installer/README.md) to install volcano. +参考【安装指南】(https://github.com/volcano-sh/volcano/blob/master/installer/README.md)安装volcano。 -After installed, update the scheduler configuration: +安装后,更新调度程序配置: ```shell kubectl edit cm -n volcano-system volcano-scheduler-configmap ``` -Please make sure +请确保 -- reclaim action is enabled. -- capacity plugin is enabled and proportion plugin is removed. +- 回收操作已启用。 +- 启用容量插件并删除比例插件。 -Note: capacity and proportion plugin are in conflict, the two plugins cannot be used together. +注意:容量和比例插件是冲突的,两个插件不能一起使用。 ```yaml kind: ConfigMap @@ -53,9 +53,9 @@ data: - name: binpack ``` -## Config queue's deserved resources +## 配置队列应有的资源 -Assume there are two nodes and two queues named queue1 and queue2 in your kubernetes cluster, and each node has 4 CPU and 16Gi memory, then there will be total 8 CPU and 32Gi memory in your cluster. +假设您的 kubernetes 集群中有两个节点和两个队列,分别名为queue1和queue2,每个节点有4个CPU和16Gi内存,那么集群中总共有8个CPU和32Gi内存。 ```yaml allocatable: @@ -64,7 +64,7 @@ allocatable: pods: "110" ``` -config queue1's deserved field with 2 cpu and 8Gi memory. +配置queue1的应有字段,具有2个cpu和8Gi内存。 ```yaml apiVersion: scheduling.volcano.sh/v1beta1 @@ -78,7 +78,7 @@ spec: memory: 8Gi ``` -config queue2's deserved field with 6 cpu and 24Gi memory. +配置queue2的应有字段,具有6个cpu和24Gi内存。 ```yaml apiVersion: scheduling.volcano.sh/v1beta1 @@ -92,9 +92,9 @@ spec: memory: 24Gi ``` -## Submit pods to each queue +## 将 pod 提交到每个队列 -First, submit a deployment named demo-1 to queue1 with replicas=8 and each pod requests 1 cpu and 4Gi memory, because queue2 is idle, so queue1 can use the whole clusters' resources, and you can see that 8 pods are in Running state. +首先向queue1提交一个名为demo-1的部署,replicas=8,每个pod请求1个cpu和4Gi内存,因为queue2空闲,所以queue1可以使用整个集群的资源,可以看到有8个pod处于Running状态。 ```yaml apiVersion: apps/v1 @@ -125,7 +125,7 @@ spec: - containerPort: 80 ``` -Expected result: +预期结果: ```shell $ kubectl get po @@ -140,7 +140,7 @@ demo-1-7bc649f544-nv424 1/1 Running 0 5s demo-1-7bc649f544-zd6d9 1/1 Running 0 5s ``` -Then submit a deployment named demo-2 to queue2 with replicas=8 and each pod requests 1 cpu and 4Gi memory. +然后向queue2提交一个名为demo-2的部署,replicas=8,每个pod请求1个cpu和4Gi内存。 ```yaml apiVersion: apps/v1 @@ -171,9 +171,9 @@ spec: - containerPort: 80 ``` -Because queue1 occupied queue2's resources, so queue2 will reclaim its deserved resources with 6 cpu and 24Gi memory. And each pod of demo-2 request 1 cpu and 4Gi memory, so there will be 6 Pods in Running state of demo-2, and demo-1's pods will be evicted. +由于queue1占用了queue2的资源,所以queue2会用6个cpu和24Gi内存回收其应得的资源。而 demo-2 的每个 pod 请求 1 个 cpu 和 4Gi 内存,因此 demo-2 会有 6 个 Pod 处于 Running 状态,demo-1 的 pod 将被驱逐。 -Finally, you can see that there are 2 Running pods in demo-1(belongs to queue1), and 6 Running pods in demo-2(belongs to queue2), which meets queue's deserved resources respectively. +最后可以看到demo-1(属于queue1)有2个正在运行的pod,demo-2(属于queue2)有6个正在运行的pod,分别满足了队列应得的资源。 ```shell $ kubectl get po diff --git a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Scheduler/Plugins/cdp.md b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Scheduler/Plugins/cdp.md index 2e0ea628..7ade8b81 100644 --- a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Scheduler/Plugins/cdp.md +++ b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Scheduler/Plugins/cdp.md @@ -1,28 +1,28 @@ ---- +--- title: CDP --- -## Background -When we need to enable elastic training or serving, preemptible job's pods can be preempted or back to running repeatedly, if no cooldown protection set, these pods can be preempted again after they just started for a short time, this may cause service stability dropped. -So we add "cdp" plugin to ensure preemptible job's pods can run for at least some time set by user. +## 背景 +当我们需要启用弹性训练或服务时,抢占式作业的 Pod 可以被抢占或重复重新运行,如果没有设置冷却保护,这些 Pod 可能会在刚启动一段时间后再次被抢占,这可能会导致服务稳定性下降。 +因此,我们添加“cdp”插件来确保抢占式作业的 pod 可以至少运行用户设置的一段时间。 -## Environment setup +## 环境设置 -### Install volcano +### 安装火山 -Refer to [Install Guide](https://github.com/volcano-sh/volcano/blob/master/installer/README.md) to install volcano. +参考【安装指南】(https://github.com/volcano-sh/volcano/blob/master/installer/README.md)安装volcano。 -### Update scheduler configmap +### 更新调度程序配置图 -After installed, update the scheduler configuration: +安装后,更新调度程序配置: ```shell kubectl edit configmap -n volcano-system volcano-scheduler-configmap ``` -Register `cdp` plugin in configmap while enable `preempt` action +在 configmap 中注册 `cdp` 插件,同时启用 `preempt` 操作 ```yaml kind: ConfigMap @@ -50,11 +50,11 @@ data: - name: binpack ``` -### Running Jobs +### 正在运行的作业 -Take a simple volcano job as sample. +以一个简单的火山作业为例。 -original job yaml is as below, which has "ps" and "worker" task +原始作业yaml如下,其中有“ps”和“worker”任务 ```yaml apiVersion: batch.volcano.sh/v1alpha1 @@ -113,20 +113,20 @@ spec: ``` -#### Edit yaml of vcjob +#### 编辑vcjob的yaml -1. add annotations in volcano job in format below. - 1. `volcano.sh/preemptable` annotation indicates that job or task is preemptable - 2. `volcano.sh/cooldown-time` annotation indicates cooldown time for the entire job or dedicated task. Value for the annotation indicates cooldown time, valid time units are "ns", "us" (or "µs"), "ms", "s", "m", "h". +1. 按照下面的格式在火山作业中添加注释。 + 1. `volcano.sh/preemptable` 注解表示作业或任务是可抢占的 + 2.`volcano.sh/cooldown-time`注释表示整个作业或专用任务的冷却时间。注释的值表示冷却时间,有效的时间单位为“ns”、“us”(或“μs”)、“ms”、“s”、“m”、“h”。 ```yaml volcano.sh/preemptable: "true" volcano.sh/cooldown-time: "600s" ``` -**Example 1** +**示例1** -Add annotation to entire job, then "ps" and "worker" task can be preempted and all have cooldown time support. +为整个作业添加注释,然后“ps”和“worker”任务可以被抢占,并且都有冷却时间支持。 ```yaml apiVersion: batch.volcano.sh/v1alpha1 @@ -140,9 +140,9 @@ spec: ... # below keep the same ``` -**Example 2** +**示例2** -Add annotation to dedicated task, as shown below, only "worker" can be preempted and have cooldown time support. +为专用任务添加注解,如下图,只有“worker”可以抢占,并且有冷却时间支持。 ```yaml apiVersion: batch.volcano.sh/v1alpha1 diff --git a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Scheduler/Plugins/deviceshare.md b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Scheduler/Plugins/deviceshare.md index 4448f6bc..bdce20c1 100644 --- a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Scheduler/Plugins/deviceshare.md +++ b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Scheduler/Plugins/deviceshare.md @@ -2,24 +2,24 @@ title: DeviceShare --- -## Introduction +## 介绍 -The **DeviceShare Plugin** is an advanced resource scheduling plugin in Volcano that provides a common framework for sharing specialized hardware devices (like GPUs, NPUs, FPGAs) across multiple pods. +**DeviceShare Plugin** 是 Volcano 中的高级资源调度插件,它提供了一个通用框架,用于跨多个 Pod 共享专用硬件设备(如 GPU、NPU、FPGA)。 -Rather than implementing fragmented logic for each new hardware accelerator, Volcano exposes a unified `Devices` interface. The `deviceshare` plugin leverages this interface to perform robust allocation, node filtering, and resource tracking for shared devices. +Volcano 没有为每个新的硬件加速器实现碎片化的逻辑,而是公开了一个统一的“设备”接口。 “deviceshare”插件利用此接口对共享设备执行稳健的分配、节点过滤和资源跟踪。 -## Mechanism +## 机制 -The DeviceShare plugin works in conjunction with device-specific implementations. It exposes standard scheduling operations such as `Predicate` (filtering nodes based on available device capacity) and `Allocate`/`Release` (assigning portions of a device to specific pods). +DeviceShare 插件与特定于设备的实现结合使用。它公开了标准调度操作,例如“Predicate”(根据可用设备容量过滤节点)和“Allocate”/“Release”(将设备的一部分分配给特定的 Pod)。 -Currently, the `deviceshare` plugin serves as the underlying engine powering features like: -- **GPU Sharing**: Allowing multiple pods to request fractions of a single physical GPU's memory. -- **vGPU and vNPU**: Virtualizing accelerator slices. -- **GPU Exclusive**: Restricting a pod to exclusively own a GPU to avoid contention. +目前,“deviceshare”插件充当底层引擎,支持以下功能: +- **GPU 共享**:允许多个 Pod 请求单个物理 GPU 内存的一部分。 +- **vGPU 和 vNPU**:虚拟化加速器切片。 +- **GPU Exclusive**:限制 Pod 独占 GPU 以避免争用。 -## Configuration and Usage +## 配置与使用 -The `deviceshare` plugin is typically enabled implicitly when you enable device sharing predicates in the Volcano scheduler config map. However, if you are developing custom device sharing logic or need to explicitly declare it, it can be configured in your `volcano-scheduler-configmap`: +当您在 Volcano 调度程序配置映射中启用设备共享谓词时,通常会隐式启用“deviceshare”插件。但是,如果您正在开发自定义设备共享逻辑或需要显式声明它,则可以在“volcano-scheduler-configmap”中进行配置: ```yaml actions: "enqueue, allocate, backfill" @@ -38,4 +38,4 @@ tiers: - name: binpack ``` -> **Note:** For specific guides on how to configure your workloads to request shared GPUs or NPUs, please refer to the dedicated guides for [GPU Sharing](../../UserGuide/user_guide_how_to_use_gpu_sharing) and [vNPU](../../UserGuide/user_guide_how_to_use_vnpu). +> **注意:** 有关如何配置工作负载以请求共享 GPU 或 NPU 的具体指南,请参阅 [GPU 共享](../../UserGuide/user_guide_how_to_use_gpu_sharing) 和 [vNPU](../../UserGuide/user_guide_how_to_use_vnpu) 的专用指南。 \ No newline at end of file diff --git a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Scheduler/Plugins/drf.md b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Scheduler/Plugins/drf.md index 18eda55a..6adfaf4d 100644 --- a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Scheduler/Plugins/drf.md +++ b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Scheduler/Plugins/drf.md @@ -1,7 +1,6 @@ --- title: DRF --- - ## 概述 DRF 调度算法的全称是**主资源公平性(Dominant Resource Fairness)**,它是一种基于容器组主资源的调度算法。主资源是指容器组所需的所有资源中,相对于集群总资源占比最大的那种资源。 diff --git a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Scheduler/Plugins/gang.md b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Scheduler/Plugins/gang.md index f1fa1738..936381d4 100644 --- a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Scheduler/Plugins/gang.md +++ b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Scheduler/Plugins/gang.md @@ -3,39 +3,39 @@ title: Gang --- ## 概述 -Gang 调度策略是 Volcano 调度器的核心调度算法之一。它满足调度过程中"全部成功或全部不执行"的调度需求,避免因 Pod 被随意调度而造成集群资源浪费。Gang 调度算法会观察一个 Job 下已调度的 Pod 数量是否满足最小运行数量要求。当满足 Job 的最小运行数量时,才对 Job 下的所有 Pod 执行调度操作;否则不执行。 +Gang调度策略是Volcano Scheduler的核心调度算法之一。满足调度过程中“All or Nothing”的调度要求,避免Pod任意调度造成的集群资源浪费。 Gang调度器算法观察一个Job下调度的Pod数量是否满足最小运行次数。当满足Job的最小运行次数时,对该Job下的所有Pod执行调度动作;否则不执行。 -![Gang Plugin](/img/doc/gang.png) +![帮派插件](/img/doc/gang.png) -## 工作原理 +## 它是如何运作的 -Gang 插件将不处于 `Ready` 状态的任务(包括 Binding、Bound、Running、Allocated、Succeed 和 Pipelined 状态)视为具有更高优先级。在尝试驱逐部分 Pod 并回收资源后,它会检查队列中分配的资源是否能满足任务运行 `minAvailable` 个 Pod 所需的资源。如果满足,Gang 插件将继续进行调度。 +Gang 插件认为未处于“就绪”状态的任务(包括绑定、绑定、运行、分配、成功和管道化)具有更高的优先级。它在尝试驱逐一些 Pod 并回收资源后,检查分配给队列的资源是否能够满足任务运行“minAvailable”Pod 所需的资源。如果是,Gang 插件将继续进行调度。 -Gang 插件实现的关键函数: +Gang插件实现的关键功能: -- **JobReadyFn**:检查作业是否拥有足够的资源以满足 `minAvailable` 要求 -- **JobPipelinedFn**:检查作业是否可以进行流水线调度 -- **JobValidFn**:验证作业的 Gang 约束是否得到满足 +- **JobReadyFn**:检查作业是否有足够的资源来满足其“minAvailable”要求 +- **JobPipelinedFn**:检查作业是否可以流水线化 +- **JobValidFn**:验证作业的 Gang 约束是否满足 -## 应用场景 +## 设想 -基于容器组概念的 Gang 调度算法非常适合需要多进程协同工作的场景: +基于容器组概念的Gang调度算法非常适合需要多进程协作的场景: -### AI 与深度学习 +### 人工智能和深度学习 -AI 场景通常包含复杂的流程,包括数据摄取、数据分析、数据拆分、训练、服务和日志记录等。这些流程需要一组容器协同工作,非常适合基于容器组的 Gang 调度策略。 +AI 场景通常包含复杂的流程,包括数据摄取、数据分析师、数据分割、训练器、服务和日志记录。这些需要一组容器协同工作,适合基于容器的Gang调度策略。 -### MPI 与高性能计算 +### MPI 和 HPC -MPI 计算框架下的多线程并行计算通信场景同样适合 Gang 调度,因为主从进程需要协同工作。容器组中的容器高度相关,可能存在资源争用,整体调度分配可以有效解决死锁问题。 +MPI计算框架下的多线程并行计算通信场景也适合Gang调度,因为主从进程需要协同工作。容器组下的容器关联性强,可能存在资源争用。整体调度分配可以有效解决死锁情况。 ### 资源效率 -在集群资源不足的情况下,Gang 调度策略可通过防止部分作业分配(这会导致资源白白等待其他任务)来显著提高集群资源利用率。 +在集群资源不足的情况下,Gang调度策略可以通过防止部分作业分配而浪费资源等待其他任务,从而显着提高集群资源的利用率。 ## 配置 -Gang 插件通常默认启用,在调度器 ConfigMap 中配置: +Gang 插件通常默认启用并在调度程序 ConfigMap 中配置: ```yaml tiers: @@ -45,9 +45,9 @@ tiers: - name: conformance ``` -## 示例 +## 例子 -以下是一个使用 Gang 调度的 VolcanoJob 示例: +以下是使用 Gang 调度的 VolcanoJob 示例: ```yaml apiVersion: batch.volcano.sh/v1alpha1 @@ -55,7 +55,7 @@ kind: Job metadata: name: tensorflow-job spec: - minAvailable: 3 # Gang 约束:至少 3 个 Pod 必须可调度 + minAvailable: 3 # Gang constraint: at least 3 pods must be schedulable schedulerName: volcano tasks: - replicas: 1 @@ -74,4 +74,4 @@ spec: image: tensorflow/tensorflow:latest ``` -在此示例中,只有当全部 3 个 Pod(1 个 ps + 2 个 worker)能够同时获得资源分配时,作业才会被调度。 \ No newline at end of file +在此示例中,只有当所有 3 个 Pod(1 个 ps + 2 个工作线程)可以同时分配资源时,才会调度作业。 \ No newline at end of file diff --git a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Scheduler/Plugins/nodegroup.md b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Scheduler/Plugins/nodegroup.md index c9495b4d..3296d63f 100644 --- a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Scheduler/Plugins/nodegroup.md +++ b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Scheduler/Plugins/nodegroup.md @@ -1,25 +1,25 @@ ---- +--- title: Nodegroup --- -## Introduction +## 介绍 -**Nodegroup plugin** is designed to isolate resources by assigning labels to nodes and set node label affinty on Queue. +**Nodegroup插件**旨在通过为节点分配标签并在队列上设置节点标签亲和力来隔离资源。 -## Usage +## 用法 -### assign label to node +### 为节点分配标签 -Assign label to node, label key is `volcano.sh/nodegroup-name`. +为节点分配标签,标签键为“volcano.sh/nodegroup-name”。 ```shell script kubectl label nodes volcano.sh/nodegroup-name= ``` -### configure queue +### 配置队列 -Create queue and bind nodegroup to it. +创建队列并将节点组绑定到它。 ```yaml apiVersion: scheduling.volcano.sh/v1beta1 @@ -42,9 +42,9 @@ metadata: - ``` -### submit a vcjob +### 提交 vcjob -submit vcjob job-1 to default queue. +将 vcjob job-1 提交到默认队列。 ```shell script $ cat < -o yaml # Verify parent hierarchy and affinity inheritance ``` -2. Override restrictive inheritance: +2. 覆盖限制性继承: ```yaml apiVersion: scheduling.volcano.sh/v1beta1 @@ -391,46 +391,46 @@ spec: - flexible-nodes ``` -### Issue: Unexpected affinity behavior +### 问题:意外的关联行为 -**Symptoms:** +**症状:** -- Tasks scheduled on unexpected nodegroups -- Inheritance not working as expected +- 计划在意外节点组上的任务 +- 继承未按预期工作 -**Debugging Steps:** +**调试步骤:** -1. Enable detailed logging: +1. 启用详细日志记录: ```bash # Check scheduler logs with higher verbosity kubectl logs -n volcano-system volcano-scheduler-xxx --tail=100 | grep -i nodegroup ``` -2. Verify queue configuration: +2. 验证队列配置: ```bash # List all queues with their hierarchy kubectl get queues -o custom-columns=NAME:.metadata.name,PARENT:.spec.parent,WEIGHT:.spec.weight ``` -### Issue: Circular queue dependencies +### 问题:循环队列依赖性 -**Symptoms:** +**症状:** -- Queues not building ancestry correctly -- Warning messages about cycle detection +- 队列未正确构建祖先 +- 有关周期检测的警告消息 -**Solutions:** +**解决方案:** -1. Review queue hierarchy: +1. 查看队列层次结构: ```bash # Check for circular references kubectl get queues -o custom-columns=NAME:.metadata.name,PARENT:.spec.parent ``` -2. Fix circular dependencies by updating parent references: +2. 通过更新父引用来修复循环依赖: ```yaml # Remove or correct circular parent relationships diff --git a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Scheduler/Plugins/nodeorder.md b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Scheduler/Plugins/nodeorder.md index 023c4d8b..2897efc0 100644 --- a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Scheduler/Plugins/nodeorder.md +++ b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Scheduler/Plugins/nodeorder.md @@ -4,40 +4,40 @@ title: Nodeorder ## 概述 -Nodeorder 插件是一种调度优化策略,通过模拟分配从多个维度对节点进行打分,以找到最适合当前任务的节点。打分参数由用户配置。 +Nodeorder插件是一种调度优化策略,通过模拟分配从各个维度对节点进行评分,找到最适合当前任务的节点。评分参数由用户配置。 -## 工作原理 +## 它是如何运作的 -Nodeorder 插件实现了 **NodeOrderFn**,使用一系列打分算法对任务的所有候选节点进行评分。得分最高的节点被认为是最适合该任务的节点。 +Nodeorder 插件实现了 **NodeOrderFn**,使用一系列评分算法对任务的所有节点进行评分。得分最高的节点被认为是最适合该任务的节点。 评分维度包括: -- **Affinity(亲和性)**:节点和 Pod 亲和性/反亲和性分数 -- **LeastRequestedResource(最少请求资源)**:优先选择可用资源更多的节点 -- **MostRequestedResource(最多请求资源)**:优先选择可用资源较少的节点(用于整合) -- **BalancedResourceAllocation(均衡资源分配)**:优先选择资源使用均衡的节点 -- **ImageLocality(镜像本地性)**:优先选择已缓存所需容器镜像的节点 +- **亲和力**:节点和 Pod 亲和力/反亲和力分数 +- **LeastRequestedResource**:优先选择拥有更多可用资源的节点 +- **MostRequestedResource**:优先选择可用资源较少的节点(整合) +- **BalancedResourceAllocation**:优先选择资源使用均衡的节点 +- **ImageLocality**:优先选择已经拥有容器镜像的节点 -## 应用场景 +## 设想 -Nodeorder 插件从多个维度提供调度评分标准。通过组合不同维度,用户可以根据自身需求灵活配置合适的调度策略。 +Nodeorder 插件提供了跨多个维度的评分标准以进行调度。不同维度的组合使得用户可以根据自己的需求灵活配置合适的调度策略。 -### 工作负载分布 +### 工作负载分配 -通过调整不同评分维度的权重,可以控制工作负载在集群中的分布方式: -- 使用 **LeastRequestedResource** 均匀分散工作负载 -- 使用 **MostRequestedResource** 整合工作负载(类似 Binpack) +通过调整不同评分维度的权重,您可以控制工作负载在集群中的分布方式: +- 使用 **LeastRequestedResource** 均匀分布工作负载 +- 使用 **MostRequestedResource** 来整合工作负载(类似于 Binpack) -### 镜像本地性优化 +### 图像局部性优化 -对于体积较大的容器镜像,使用 **ImageLocality** 打分可以通过优先选择已缓存所需镜像的节点来缩短 Pod 启动时间。 +对于大型容器映像,使用 **ImageLocality** 评分可以通过优先选择已具有所需映像的节点来减少 pod 启动时间。 -### 亲和性优化 +### 亲和力优化 -**Affinity** 维度确保 Pod 按照其亲和性和反亲和性规则进行放置。 +**亲和性** 维度确保 Pod 根据其亲和性和反亲和性规则进行放置。 ## 配置 -Nodeorder 插件在调度器 ConfigMap 中启用,支持配置权重: +Nodeorder 插件在调度程序 ConfigMap 中启用,并具有可配置的权重: ```yaml tiers: @@ -56,23 +56,23 @@ tiers: ### 配置参数 -| 参数 | 说明 | 默认值 | -|-----------|-------------|---------| +| 参数 | 描述 | 默认值 | +|-----------|-------------|---------| | `nodeorder.weight` | Nodeorder 插件的整体权重 | 1 | -| `nodeorder.leastrequested.enable` | 启用最少请求资源打分 | true | -| `nodeorder.mostrequested.enable` | 启用最多请求资源打分 | false | -| `nodeorder.nodeaffinity.enable` | 启用节点亲和性打分 | true | -| `nodeorder.podaffinity.enable` | 启用 Pod 亲和性打分 | true | -| `nodeorder.balancedresource.enable` | 启用均衡资源打分 | true | -| `nodeorder.imagelocality.enable` | 启用镜像本地性打分 | true | -| `nodeorder.leastrequested.weight` | 最少请求打分的权重 | 1 | -| `nodeorder.mostrequested.weight` | 最多请求打分的权重 | 1 | -| `nodeorder.nodeaffinity.weight` | 节点亲和性打分的权重 | 1 | -| `nodeorder.podaffinity.weight` | Pod 亲和性打分的权重 | 1 | -| `nodeorder.balancedresource.weight` | 均衡资源打分的权重 | 1 | -| `nodeorder.imagelocality.weight` | 镜像本地性打分的权重 | 1 | - -## 示例 +| `nodeorder.leastrequested.enable` | 启用最少请求资源评分 | true | +| `nodeorder.mostrequested.enable` | 启用最多请求资源评分 | false | +| `nodeorder.nodeaffinity.enable` | 启用节点亲和性评分 | true | +| `nodeorder.podaffinity.enable` | 启用 Pod 亲和性评分 | true | +| `nodeorder.balancedresource.enable` | 启用均衡资源评分 | true | +| `nodeorder.imagelocality.enable` | 启用镜像本地性评分 | true | +| `nodeorder.leastrequested.weight` | 最少请求评分的权重 | 1 | +| `nodeorder.mostrequested.weight` | 最多请求评分的权重 | 1 | +| `nodeorder.nodeaffinity.weight` | 节点亲和性评分的权重 | 1 | +| `nodeorder.podaffinity.weight` | Pod 亲和性评分的权重 | 1 | +| `nodeorder.balancedresource.weight` | 均衡资源评分的权重 | 1 | +| `nodeorder.imagelocality.weight` | 镜像本地性评分的权重 | 1 | + +## 例子 ### 分散工作负载的配置 @@ -122,7 +122,7 @@ data: nodeorder.leastrequested.enable: false ``` -### 带 Pod 亲和性的作业 +### 具有 Pod 亲和力的作业 ```yaml apiVersion: batch.volcano.sh/v1alpha1 @@ -151,4 +151,4 @@ spec: image: busybox ``` -Nodeorder 插件将对已存在符合亲和性规则 Pod 的节点给予更高的分数。 \ No newline at end of file +如果节点已经有匹配亲和性规则的 Pod,则 Nodeorder 插件将为节点评分更高。 \ No newline at end of file diff --git a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Scheduler/Plugins/numa_aware.md b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Scheduler/Plugins/numa_aware.md index 8ae18933..b04ddd08 100644 --- a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Scheduler/Plugins/numa_aware.md +++ b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Scheduler/Plugins/numa_aware.md @@ -4,48 +4,48 @@ title: "Numa-aware" ## 概述 -当一个节点运行大量 CPU 密集型 Pod 时,工作负载可能会在不同的 CPU 核心之间迁移,这取决于 Pod 是否被限速以及调度时哪些 CPU 核心可用。许多工作负载对此迁移不敏感,无需任何干预即可正常运行。然而,对于 CPU 缓存亲和性和调度延迟会显著影响性能的工作负载,则需要特殊的 CPU 管理策略来确定节点上的放置偏好。 +当节点运行许多受 CPU 限制的 Pod 时,工作负载可能会转移到不同的 CPU 核心,具体取决于 Pod 是否受到限制以及调度时哪些 CPU 核心可用。许多工作负载对这种迁移并不敏感,无需任何干预即可正常工作。但是,在 CPU 缓存关联性和调度延迟显着影响工作负载性能的工作负载中,需要特殊的 CPU 管理策略来确定节点上的放置首选项。 ## 挑战 -CPU 管理器(CPU Manager)和拓扑管理器(Topology Manager)是 Kubelet 的组件,用于辅助 CPU 放置。但它们存在以下局限性: +CPU 管理器和拓扑管理器是有助于 CPU 布局的 Kubelet 组件。然而,它们有以下限制: -1. **调度器不感知拓扑**:调度器不具备拓扑感知能力。这意味着 Pod 可能被调度到某个节点后,因拓扑管理器的拒绝而失败。这对于 TensorFlow 作业是不可接受的——如果某个 worker 或 parameter server 在节点上启动失败,整个作业都将失败。 +1. **调度程序不了解**:调度程序不了解拓扑。这意味着在节点上调度的 Pod 可能会因拓扑管理器而失败。这对于 TensorFlow 作业来说是不可接受的——如果节点上的任何工作程序或参数服务器发生故障,整个作业都将失败。 -2. **仅限节点级别**:这些管理器仅在节点级别运行,无法在整个集群范围内为 NUMA 拓扑匹配最优节点。 +2. **仅节点级**:这些管理器在节点级别运行,这导致无法在整个集群中为 NUMA 拓扑匹配最佳节点。 -## Numa-aware 插件工作原理 +## Numa 感知插件的工作原理 -Numa-aware 插件旨在解决上述局限性: +Numa-aware 插件旨在解决这些限制: -- **CPU 资源拓扑调度**:支持基于 CPU 拓扑的调度 -- **Pod 级别拓扑策略**:支持 Pod 级别的拓扑策略 +- **CPU资源拓扑调度**:支持基于CPU拓扑的调度 +- **Pod级拓扑策略**:支持Pod级拓扑策略 -插件工作流程: -1. 从节点收集 NUMA 拓扑信息 -2. 评估 CPU 和内存的放置需求 -3. 根据 NUMA 亲和性对节点打分 -4. 确保任务被放置在能满足其拓扑要求的节点上 +插件: +1.从节点收集NUMA拓扑信息 +2. 评估 CPU 和内存布局要求 +3. 根据NUMA亲和力对节点进行评分 +4. 确保任务放置在能够满足其拓扑要求的节点上 -## 应用场景 +## 设想 -NUMA 感知调度常见于对 CPU 参数和调度延迟敏感的计算密集型作业: +NUMA 感知调度的常见场景是对 CPU 参数和调度延迟敏感的计算密集型作业: ### 科学计算 -高性能科学计算作业可通过 NUMA 感知调度确保最优的内存访问模式,从而受益。 +高性能科学计算受益于 NUMA 感知调度,以确保最佳的内存访问模式。 ### 视频处理 -视频解码工作负载在具有 NUMA 感知的调度下可获得更好的性能表现。 +通过 NUMA 感知进行调度时,视频解码工作负载可以获得更好的性能。 ### 动画渲染 -CPU 密集型的动画渲染作业可从优化的 CPU 和内存放置中获益。 +CPU 密集型动画渲染作业受益于优化的 CPU 和内存布局。 ### 大数据离线处理 -大规模数据处理作业在经过 NUMA 优化的调度下可实现更高的吞吐量。 +大规模数据处理作业可以通过 NUMA 优化调度实现更好的吞吐量。 ## 配置 @@ -54,14 +54,14 @@ CPU 密集型的动画渲染作业可从优化的 CPU 和内存放置中获益 首先,确保 Kubelet 配置了拓扑管理: ```yaml -# kubelet 配置 +# kubelet configuration topologyManagerPolicy: single-numa-node cpuManagerPolicy: static ``` -### 调度器配置 +### 调度程序配置 -启用 Numa-aware 插件: +启用 Numa 感知插件: ```yaml tiers: @@ -78,25 +78,25 @@ tiers: ### 配置参数 -| 参数 | 说明 | 默认值 | -|-----------|-------------|---------| -| `numa-aware.weight` | NUMA 感知打分的权重 | 1 | +| Parameter | Description | Default | +|-----------|-------------|---------| +| `numa-aware.weight` | Weight of NUMA-aware scoring | 1 | -## 示例 +## 例子 -### 带 NUMA 拓扑的节点 +### 具有 NUMA 拓扑的节点 -一个典型的 NUMA 节点可能具有: +典型的 NUMA 节点可能具有: - 2 个 NUMA 节点 -- 每个节点 16 个 CPU 核心 -- 每个节点 64GB 内存 +- 每个有 16 个 CPU 核心 +- 每个都有 64GB 内存 ``` NUMA Node 0: CPU 0-15, 64GB Memory NUMA Node 1: CPU 16-31, 64GB Memory ``` -### 需要 NUMA 感知的作业 +### 需要 NUMA 意识的工作 ```yaml apiVersion: batch.volcano.sh/v1alpha1 @@ -126,12 +126,12 @@ spec: memory: "32Gi" ``` -在此示例中: -- 作业申请 8 个 CPU 和 32GB 内存 +在这个例子中: +- 该作业需要 8 个 CPU 和 32GB 内存 - NUMA 策略要求所有资源来自单个 NUMA 节点 -- 调度器将找到能够从单个 NUMA 节点满足此需求的节点 +- 调度器会从单个NUMA节点中找到能够满足此要求的节点 -### 带拓扑策略注解的 Pod +### 具有拓扑策略注释的 Pod ```yaml apiVersion: v1 @@ -158,9 +158,9 @@ spec: 该插件支持多种拓扑策略: -| 策略 | 说明 | +| 策略 | 描述 | |--------|-------------| | `none` | 无 NUMA 偏好 | -| `best-effort` | 尽量放置在最优 NUMA 节点,但不满足时不失败 | +| `best-effort` | 尽量放置在最优 NUMA 节点,但如果无法满足则不失败 | | `restricted` | 仅放置在能满足 NUMA 要求的节点上 | | `single-numa-node` | 所有资源必须来自单个 NUMA 节点 | \ No newline at end of file diff --git a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Scheduler/Plugins/overcommit.md b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Scheduler/Plugins/overcommit.md index aad3d549..3393cce9 100644 --- a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Scheduler/Plugins/overcommit.md +++ b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Scheduler/Plugins/overcommit.md @@ -2,24 +2,24 @@ title: Overcommit --- -## Introduction +## 介绍 -In typical cluster environments, the scheduler calculates available idle resources strictly based on physical node capacity minus allocated resources. However, when cluster resources are nearly fully utilized, many PodGroups are rejected from entering the scheduling pipeline and are left completely un-enqueued, which might not be desirable for scenarios where you want the scheduler to tolerate a larger backlog of `pending` pods. +在典型的集群环境中,调度程序严格根据物理节点容量减去分配的资源来计算可用的空闲资源。但是,当集群资源几乎完全利用时,许多 PodGroup 会被拒绝进入调度管道,并且完全不排队,这对于您希望调度程序容忍大量“待处理”Pod 的场景来说可能并不理想。 -The **Overcommit Plugin** allows the scheduler to artificially inflate the apparent "idle resources" of the cluster by applying an `overcommit-factor`. This permits more jobs to be enqueued and wait in the scheduling pipeline than the physical resources might typically allow. +**过度使用插件**允许调度程序通过应用“过度使用因子”人为地增加集群的明显“空闲资源”。这允许比物理资源通常允许的更多作业在调度管道中排队和等待。 -## Mechanism +## 机制 -The Overcommit plugin evaluates whether a job can be enqueued based on the requested `MinResources` of the PodGroup and the expanded idle resources. +Overcommit插件根据PodGroup请求的MinResources和扩展的空闲资源来评估作业是否可以入队。 -Expanded idle resource is calculated as: -`Idle Resource = (Total Resource * overcommit-factor) - Used Resource` +扩展闲置资源计算公式为: +`空闲资源 = (总资源 * 过量使用系数) - 已使用资源` -If the job's minimal requested resources can fit into this expanded idle resource pool, the job is permitted to be enqueued. +如果作业的最小请求资源可以放入此扩展的空闲资源池中,则允许作业入队。 -## Configuration +## 配置 -To use the Overcommit Plugin, add it to your `volcano-scheduler-configmap` under the `enqueue` tier, and provide an `overcommit-factor`. +要使用 Overcommit 插件,请将其添加到“enqueue”层下的“volcano-scheduler-configmap”中,并提供“overcommit-factor”。 ```yaml actions: "enqueue, allocate, backfill" @@ -39,6 +39,6 @@ tiers: - name: binpack ``` -### Arguments +### 参数 -- **`overcommit-factor`**: A float value greater than or equal to `1.0`. For example, `1.2` means the scheduler will pretend the cluster has 20% more total resources when deciding whether to enqueue jobs into the pipeline. If a value less than `1.0` is provided, the plugin will automatically fallback to the default value of `1.2`. +- **`overcommit-factor`**:大于或等于 `1.0` 的浮点值。例如,“1.2”表示调度程序在决定是否将作业排队到管道中时,会假装集群的总资源增加了 20%。如果提供的值小于“1.0”,插件将自动回退到默认值“1.2”。 \ No newline at end of file diff --git a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Scheduler/Plugins/pdb.md b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Scheduler/Plugins/pdb.md index f409308c..4f9e6ff6 100644 --- a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Scheduler/Plugins/pdb.md +++ b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Scheduler/Plugins/pdb.md @@ -2,26 +2,26 @@ title: PDB --- -## Introduction +## 介绍 -When users deploy highly available jobs or applications on Volcano, they often need to limit the number of pod replicas that can be evicted or destroyed simultaneously to avoid downtime. This constraint is managed via Kubernetes **PodDisruptionBudget (PDB)** resources. +当用户在 Volcano 上部署高可用作业或应用程序时,他们通常需要限制可以同时驱逐或销毁的 pod 副本数量,以避免停机。此约束通过 Kubernetes **PodDisruptionBudget (PDB)** 资源进行管理。 -The **PDB Plugin** ensures that Volcano respects user-defined PDB constraints during the scheduling process, specifically during eviction actions like `reclaim`, `preempt`, and `shuffle`. +**PDB 插件** 确保 Volcano 在调度过程中尊重用户定义的 PDB 约束,特别是在“回收”、“抢占”和“洗牌”等驱逐操作期间。 -## Prerequisites +## 先决条件 -- Your Kubernetes version must be 1.21 or later. -- You must have created valid `PodDisruptionBudget` resources for your workloads. +- 您的 Kubernetes 版本必须是 1.21 或更高版本。 +- 您必须为您的工作负载创建有效的“PodDisruptionBudget”资源。 -## Mechanism +## 机制 -The PDB Plugin registers several functions (`ReclaimableFn`, `PreemptableFn`, and `VictimTasksFn`) under the `reclaim`, `preempt`, and `shuffle` actions. It maintains a cache of PDBs using `v1.PodDisruptionBudgetLister`. +PDB 插件在“reclaim”、“preempt”和“shuffle”操作下注册了多个函数(“ReclaimableFn”、“PreemptableFn”和“VictimTasksFn”)。它使用“v1.PodDisruptionBudgetLister”维护 PDB 缓存。 -During eviction scenarios, the plugin filters out tasks whose eviction would violate the configured PDB constraints. It calculates the `DisruptedPods` (pods whose eviction was processed but not yet observed by the PDB controller) and ensures the remaining available replicas satisfy the budget. +在驱逐场景中,插件会过滤掉其驱逐将违反配置的 PDB 约束的任务。它计算“DisruptedPods”(已处理驱逐但尚未被 PDB 控制器观察到的 Pod)并确保剩余的可用副本满足预算。 -## Configuration +## 配置 -To enable the PDB Plugin, update the `volcano-scheduler-configmap` to include the `pdb` plugin in your configuration tiers. +要启用 PDB 插件,请更新“volcano-scheduler-configmap”以在配置层中包含“pdb”插件。 ```yaml actions: "reclaim, preempt, shuffle" @@ -40,4 +40,4 @@ tiers: - name: binpack ``` -*Note: The PDB plugin will be actively invoked when actions like `reclaim`, `preempt`, or `shuffle` are executed in the scheduler workflow.* +*注意:当调度程序工作流程中执行“reclaim”、“preempt”或“shuffle”等操作时,将主动调用 PDB 插件。* \ No newline at end of file diff --git a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Scheduler/Plugins/predicates.md b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Scheduler/Plugins/predicates.md index e0dc009f..b6b602f6 100644 --- a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Scheduler/Plugins/predicates.md +++ b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Scheduler/Plugins/predicates.md @@ -3,38 +3,38 @@ title : "Predicates" --- ## 概述 -Predicates 插件通过一系列评估算法来判断任务是否可以绑定到某个节点。它根据多种标准对节点进行过滤,包括资源可用性、节点状态以及 GPU 资源等特殊需求。 +Predicates插件通过一系列评估算法来确定任务是否可以绑定到节点。它根据各种标准(包括资源可用性、节点条件以及 GPU 资源等特殊要求)过滤掉无法容纳任务的节点。 -## 工作原理 +## 它是如何运作的 -Predicates 插件以 Pod 和 nodeInfo 作为参数,调用各种断言函数对节点进行评估和预选,以确定候选调度节点。它实现了: +Predicates 插件以 pod 和 nodeInfo 作为参数调用各种谓词函数来评估和预选用于调度的节点。它实现: -- **PredicateFn**:若节点能够承载任务则返回 true,否则返回 false +- **PredicateFn**:如果节点可以容纳任务则返回 true 的函数,否则返回 false -插件评估的多个标准: +该插件评估多个标准: - 节点资源(CPU、内存等) -- 节点状态和污点 -- Pod 亲和性和反亲和性规则 -- 存储卷约束 -- GPU 及其他加速器的可用性 +- 节点条件和污点 +- Pod亲和力和反亲和力规则 +- 体积限制 +- GPU 和其他加速器的可用性 -## 应用场景 +## 设想 -### 需要 GPU 的 AI 工作负载 +### 具有 GPU 要求的 AI 工作负载 -在需要 GPU 资源的 AI 场景中,Predicates 插件可以快速筛选出具备所需 GPU 资源的节点,以便集中调度。 +在需要GPU资源的AI场景中,Predicates插件可以快速筛选出拥有所需GPU资源的节点进行集中调度。 ### 资源过滤 -该插件确保只有具备足够资源的节点才会被纳入任务放置的考量范围,防止因资源不足导致调度失败。 +该插件确保只有资源充足的节点才会被考虑进行任务放置,防止由于资源限制而导致调度失败。 -### 节点状态过滤 +### 节点条件过滤 -处于不可调度状态的节点(例如 NotReady、MemoryPressure、DiskPressure)将被过滤掉。 +具有阻止调度的条件(例如,NotReady、MemoryPressure、DiskPressure)的节点将被过滤掉。 ## 配置 -Predicates 插件在调度器 ConfigMap 中启用: +Predicates 插件在调度程序 ConfigMap 中启用: ```yaml tiers: @@ -49,7 +49,7 @@ tiers: ### 配置参数 -Predicates 插件支持多个配置选项: +Predicates 插件支持多种配置选项: ```yaml tiers: @@ -63,13 +63,13 @@ tiers: predicate.resources.nvidia.com/gpu.weight: 100 ``` -| 参数 | 说明 | 默认值 | -|-----------|-------------|---------| -| `predicate.GPUSharingEnable` | 启用 GPU 共享断言 | false | -| `predicate.CacheEnable` | 启用断言缓存以提升性能 | true | -| `predicate.ProportionalEnable` | 启用比例资源断言 | false | +| Parameter | Description | Default | +|-----------|-------------|---------| +| `predicate.GPUSharingEnable` | Enable GPU sharing predicate | false | +| `predicate.CacheEnable` | Enable predicate caching for performance | true | +| `predicate.ProportionalEnable` | Enable proportional resource predicate | false | -## 示例 +## 例子 ### 需要 GPU 资源的作业 @@ -96,9 +96,9 @@ spec: nvidia.com/gpu: "1" ``` -Predicates 插件将对节点进行过滤,仅保留具有可用 GPU 资源的节点。 +Predicates 插件将过滤节点,仅包含具有可用 GPU 资源的节点。 -### 带节点亲和性的作业 +### 具有节点亲和性的作业 ```yaml apiVersion: batch.volcano.sh/v1alpha1 @@ -127,4 +127,4 @@ spec: image: busybox ``` -Predicates 插件将确保作业仅被调度到指定可用区的节点上。 \ No newline at end of file +谓词插件将确保作业仅调度到指定区域中的节点。 \ No newline at end of file diff --git a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Scheduler/Plugins/priority.md b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Scheduler/Plugins/priority.md index dae42188..a43d8256 100644 --- a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Scheduler/Plugins/priority.md +++ b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Scheduler/Plugins/priority.md @@ -4,42 +4,42 @@ title: "Priority" ## 概述 -Priority 插件提供了作业和任务排序的实现,以及 PreemptableFn——一个计算哪些作业可被抢占的函数。作业根据 `priorityClassName` 进行排序,任务则依次按 `priorityClassName`、`createTime` 和 `id` 排序。 +Priority Plugin 提供作业和任务排序的实现,以及 PreemptableFn——计算哪些作业可以被抢占的函数。作业按照“priorityClassName”排序,任务按照“priorityClassName”、“createTime”、“id”依次排序。 -## 工作原理 +## 它是如何运作的 -Priority 插件实现了以下几个关键函数: +Priority 插件实现了几个关键功能: -- **JobOrderFn**:比较两个作业,根据 `job.spec.priorityClassName` 确定其相对优先级 -- **TaskOrderFn**:比较两个任务,依次按 `task.priorityClassName`、`task.createTime` 和 `task.id` 确定其相对优先级 -- **PreemptableFn**:根据优先级级别识别可被抢占的任务 +- **JobOrderFn**:比较两个作业并根据“job.spec.priorityClassName”确定它们的相对优先级 +- **TaskOrderFn**:比较两个任务并通过按顺序比较`task.priorityClassName`、`task.createTime`和`task.id`来确定它们的相对优先级 +- **PreemptableFn**:根据优先级标识可以被抢占的任务 -![fair-share](/img/doc/fair-share.png) +![公平分享](/img/doc/fair-share.png) -## 应用场景 +## 设想 -当集群运行多个作业但资源不足,且每个作业都有数量不等的 Pod 等待调度时,使用 Kubernetes 默认调度器会导致 Pod 数量较多的作业最终获得集群更多的资源。针对这种情况,Volcano 调度器提供了算法,使不同作业能够以公平共享的方式分配集群资源。 +当集群运行多个作业但资源不足,并且每个作业都有不同数量的 Pod 等待调度时,使用 Kubernetes 默认调度程序将导致具有更多 Pod 的作业最终获得更多集群资源。在这种情况下,Volcano Scheduler提供了算法,使不同的作业能够以公平共享的方式共享集群资源。 ### 自定义优先级 -Priority 插件使用户能够自定义作业和任务的优先级,并根据自身需求在不同级别配置调度策略。在应用层面,优先级按照 Job 的 `priorityClassName` 进行排列。 +优先级插件使用户可以自定义作业和任务优先级,并根据自己的需求配置不同级别的调度策略。优先级根据作业在应用程序级别的“priorityClassName”进行排列。 -### 实时性要求 +### 实时要求 -对于运行有高实时性要求应用的集群,例如: +适用于实时性要求较高的应用集群,例如: - 金融服务场景 -- IoT 监控场景 +- 物联网监控场景 - 实时分析 -Priority 插件可确保这些高优先级工作负载被优先调度。 +Priority Plugin 可以确保首先调度这些高优先级工作负载。 ## 配置 -Priority 插件通常放置在插件配置的第一层: +Priority 插件通常放置在第一层插件中: ```yaml tiers: @@ -49,7 +49,7 @@ tiers: - name: conformance ``` -## 示例 +## 例子 ### 创建优先级类 @@ -75,7 +75,7 @@ description: "Low priority for batch workloads" ### 在 VolcanoJob 中使用优先级 -然后在作业中引用优先级类: +然后在您的工作中引用优先级: ```yaml apiVersion: batch.volcano.sh/v1alpha1 @@ -98,4 +98,4 @@ spec: command: ["sleep", "1000"] ``` -在此示例中,当资源有限时,具有 `high-priority` 的作业将在 `low-priority` 作业之前被调度。 \ No newline at end of file +在此示例中,当资源有限时,“高优先级”的作业将被调度在“低优先级”的作业之前。 \ No newline at end of file diff --git a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Scheduler/Plugins/proportion.md b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Scheduler/Plugins/proportion.md index dad80fdd..d24eb784 100644 --- a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Scheduler/Plugins/proportion.md +++ b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Scheduler/Plugins/proportion.md @@ -4,46 +4,46 @@ title: "Proportion" ## 概述 -Proportion 调度算法通过**队列(Queue)**的概念来控制集群中各队列所分配的总资源比例。每个队列被分配一定比例的集群资源。 +比例调度算法利用**队列**的概念来控制集群中分配的总资源的比例。每个队列都分配一定比例的集群资源。 -例如,如果三个团队共享一个集群的资源池: -- 团队 A 最多可使用集群总量的 40% -- 团队 B 最多可使用 30% -- 团队 C 最多可使用 30% +例如,如果三个团队共享集群上的资源池: +- A 队最多可以使用整个集群的 40% +- B队最多可以使用30% +- C队最多可以使用30% -若提交的工作量超过团队最大可用资源,作业将进入排队状态。 +如果交付的工作量超过团队的最大可用资源,作业将排队。 -## 工作原理 +## 它是如何运作的 -Proportion 插件基于队列配置管理资源分配: +Proportion 插件根据队列配置管理资源分配: -- **队列权重(Queue Weight)**:每个队列具有一个权重,决定其在集群资源中的份额 -- **上限(Capability)**:队列可使用的最大资源量 -- **保障(Guarantee)**:保障给队列的最小资源量 -- **应得资源(Deserved Resources)**:队列根据其权重应获得的资源量 +- **队列权重**:每个队列都有一个权重,决定其在集群资源中的份额 +- **能力**:队列可以使用的最大资源 +- **保证**:保证队列的最低资源 +- **应得资源**:队列应根据其权重接收的资源 -实现的关键函数: +实现的关键功能: -- **QueueOrderFn**:根据资源利用情况对队列进行调度排序 -- **ReclaimableFn**:判断是否可以从某个队列回收资源 -- **OverusedFn**:检查某个队列是否使用了超过其应得份额的资源 +- **QueueOrderFn**:根据资源利用率对队列进行排序以进行调度 +- **ReclaimableFn**:确定是否可以从队列中回收资源 +- **OverusedFn**:检查队列是否使用超过其应有的份额 -## 应用场景 +## 设想 -Proportion 调度算法提高了集群调度的灵活性和弹性: +Proportion调度算法提高了集群调度的灵活性和弹性: ### 多团队资源共享 -最典型的场景是公司内多个开发团队共享一个集群。该调度算法能够很好地处理不同部门之间共享资源分配和隔离的需求。 +最典型的场景是公司内多个开发团队共享集群。这种调度算法很好地处理了不同部门之间共享资源分配和隔离的要求。 ### 多业务混合场景 -在工作负载多样化的环境中: -- **计算密集型**:AI 业务 -- **网络 IO 密集型**:MPI 和 HPC 业务 +在具有不同工作负载的环境中: +- **计算密集型**:AI业务 +- **网络IO密集型**:MPI和HPC业务 - **存储密集型**:大数据业务 -Proportion 调度算法可以通过匹配按需分配共享资源。 +比例调度算法可以通过匹配按需求分配共享资源。 ## 配置 @@ -83,9 +83,9 @@ spec: memory: "60Gi" ``` -### 调度器配置 +### 调度程序配置 -在调度器中启用 Proportion 插件: +在调度程序中启用比例插件: ```yaml tiers: @@ -99,11 +99,11 @@ tiers: - name: nodeorder ``` -## 示例 +## 例子 ### 在 VolcanoJob 中使用队列 -将作业提交到指定队列: +将作业提交到特定队列: ```yaml apiVersion: batch.volcano.sh/v1alpha1 @@ -128,9 +128,9 @@ spec: memory: "4Gi" ``` -### 带保障与上限的队列 +### 有保障、有能力的队列 -创建同时具有最小保障和最大上限的队列: +创建一个同时具有最小保证和最大容量的队列: ```yaml apiVersion: scheduling.volcano.sh/v1beta1 @@ -150,6 +150,6 @@ spec: ``` 在此配置中: -- 该队列至少保障 10 个 CPU 和 20Gi 内存 -- 在资源可用时,最多可使用 50 个 CPU 和 100Gi 内存 -- 当其他队列需要资源时,可从该队列回收资源 \ No newline at end of file +- 队列保证至少10个CPU和20Gi内存 +- 在资源可用的情况下,最多可以使用 50 个 CPU 和 100Gi 内存 +- 当其他队列需要资源时,可以从此队列回收资源 \ No newline at end of file diff --git a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Scheduler/Plugins/rescheduling.md b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Scheduler/Plugins/rescheduling.md index a4c2e541..2aabd5a7 100644 --- a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Scheduler/Plugins/rescheduling.md +++ b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Scheduler/Plugins/rescheduling.md @@ -2,33 +2,33 @@ title: Rescheduling --- -## Introduction +## 介绍 -Unbalanced resource utilization across a Kubernetes cluster often occurs due to unreasonable scheduling strategies, dynamic changes in job lifecycles, and node status changes (such as added/removed nodes or taint/affinity modifications). +由于调度策略不合理、作业生命周期的动态变化、节点状态变化(如节点的添加/删除、污点/亲和性修改),Kubernetes集群中经常会出现资源利用率不平衡的情况。 -The **Rescheduling** plugin addresses these issues by actively rebalancing the cluster's resource utilization among nodes. It accomplishes this by evaluating real resource utilization (via Prometheus metrics) instead of merely the requested resource amounts, and it periodically evicts pods based on custom configured rescheduling strategies. +**重新调度**插件通过主动重新平衡节点之间的集群资源利用率来解决这些问题。它通过评估实际资源利用率(通过 Prometheus 指标)而不仅仅是请求的资源量来实现这一点,并根据自定义配置的重新调度策略定期驱逐 Pod。 -## Rescheduling Workflow +## 重新安排工作流程 -1. **Resource Filter**: Filters workloads which are eligible to be evicted based on queues or labels. -2. **Strategy Evaluation**: Evaluates filtered workloads against the configured rescheduling strategies to determine which ones should be evicted. -3. **Eviction**: Evicts the pods attached to the identified workloads. -4. **Periodical Execution**: Executes the above process periodically. +1. **资源过滤器**:根据队列或标签过滤符合驱逐条件的工作负载。 +2. **策略评估**:根据配置的重新调度策略评估过滤后的工作负载,以确定应驱逐哪些工作负载。 +3. **驱逐**:驱逐附加到已识别工作负载的 Pod。 +4. **定期执行**:定期执行上述过程。 -## Rescheduling Strategies +## 重新安排策略 -Volcano's rescheduling plugin supports multiple strategies to select potential evictees: +Volcano 的重新安排插件支持多种策略来选择潜在的被驱逐者: -- **LowNodeUtilization**: Targets unbalanced nodes by evicting pods from highly utilized nodes and shuffling them to low utilized nodes based on configured target thresholds. -- **OfflineOnly (OLO)**: Only selects offline workloads (annotated with `preemptable: true`) for rescheduling. -- **LowPriorityFirst (LPF)**: Sorts workloads by priority and evicts lower priority pods first. -- **ShortLifeTimeFirst (SLTF)**: Sorts workloads by running time. Pods with the shortest life time will be rescheduled first to ensure long-running workloads are not interrupted. -- **BigObjectFirst (BOF)**: Selects workloads which request the most dominant resource and reschedules them first to improve system throughput and avoid small workloads starvation. -- **MoreReplicasFirst (MRF)**: Sorts workloads by replica number. Workloads with the most replicas are rescheduled first, making it friendly to `gang` scheduling by considering `minAvailable`. +- **LowNodeUtilization**:通过从高利用率节点驱逐 Pod 并根据配置的目标阈值将它们洗牌到低利用率节点来定位不平衡节点。 +- **OfflineOnly (OLO)**:仅选择离线工作负载(用 `preemptable: true` 注释)进行重新调度。 +- **LowPriorityFirst (LPF)**:按优先级对工作负载进行排序,并首先驱逐优先级较低的 Pod。 +- **ShortLifeTimeFirst (SLTF)**:按运行时间对工作负载进行排序。生命周期最短的 Pod 将首先被重新调度,以确保长时间运行的工作负载不被中断。 +- **BigObjectFirst (BOF)**:选择请求最主要资源的工作负载并首先重新调度它们,以提高系统吞吐量并避免小型工作负载匮乏。 +- **MoreReplicasFirst (MRF)**:按副本编号对工作负载进行排序。首先重新调度具有最多副本的工作负载,通过考虑“minAvailable”使其对“gang”调度友好。 -## Configuration +## 配置 -To enable the Rescheduling plugin, you must configure the `volcano-scheduler-configmap` by adding the `shuffle` action and configuring the `rescheduling` plugin within the tiers. +要启用重新安排插件,您必须通过添加“shuffle”操作并在层中配置“重新安排”插件来配置“volcano-scheduler-configmap”。 ```yaml actions: "enqueue, allocate, backfill, shuffle" ## Add 'shuffle' action @@ -69,4 +69,4 @@ tiers: - name: binpack ``` -> **Note:** The rescheduling decisions consider metrics collected from Prometheus. Ensure your metrics configuration is correctly set up as it evaluates real node resource utilization instead of requested resource amounts. +> **注意:** 重新安排决策考虑从 Prometheus 收集的指标。确保正确设置指标配置,因为它评估实际节点资源利用率而不是请求的资源量。 \ No newline at end of file diff --git a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Scheduler/Plugins/resource_strategy_fit.md b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Scheduler/Plugins/resource_strategy_fit.md index 0eced3c6..a5ed3217 100644 --- a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Scheduler/Plugins/resource_strategy_fit.md +++ b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Scheduler/Plugins/resource_strategy_fit.md @@ -1,36 +1,36 @@ ---- +--- title: Resource Strategy Fit --- -## Introduction +## 介绍 -The **Resource Strategy Fit Plugin** is a Volcano scheduler plugin that provides intelligent resource allocation strategies for pod scheduling. It supports both global configuration and pod-level annotations to optimize resource utilization across different workloads. +**资源策略适配插件**是一个 Volcano 调度器插件,为 Pod 调度提供智能资源分配策略。它支持全局配置和 Pod 级注释,以优化不同工作负载的资源利用率。 -## Key Features +## 主要特点 -- **Multiple Scoring Strategies**: Supports `LeastAllocated` and `MostAllocated` strategies -- **Resource-Specific Configuration**: Configure different strategies for different resource types (CPU, Memory, GPU, etc.) -- **Pod-Level Override**: Allow individual pods to override global configuration via annotations -- **Weighted Scoring**: Fine-tune resource importance with configurable weights -- **Wildcard Support**: Use wildcard patterns for resource matching +- **多种评分策略**:支持“最少分配”和“最多分配”策略 +- **特定于资源的配置**:针对不同的资源类型(CPU、内存、GPU等)配置不同的策略 +- **Pod-Level Override**:允许单个 Pod 通过注释覆盖全局配置 +- **加权评分**:通过可配置的权重微调资源重要性 +- **通配符支持**:使用通配符模式进行资源匹配 -## Installation +## 安装 -### 1. Install Volcano +### 1. 安装火山 -Refer to [Install Guide](https://github.com/volcano-sh/volcano/blob/master/installer/README.md) to install Volcano. +请参考【安装指南】(https://github.com/volcano-sh/volcano/blob/master/installer/README.md)安装Volcano。 -### 2. Configure the Plugin +### 2. 配置插件 -Update the Volcano scheduler configuration: +更新 Volcano 调度程序配置: ```bash kubectl edit cm -n volcano-system volcano-scheduler-configmap ``` -Add the `resource-strategy-fit` plugin to your configuration: +将 `resource-strategy-fit` 插件添加到您的配置中: ```yaml kind: ConfigMap @@ -64,18 +64,18 @@ data: weight: 2 ``` -## Global Configuration +## 全局配置 -### Basic Configuration +### 基本配置 -The plugin supports two main scoring strategies: +该插件支持两种主要的评分策略: -| Strategy | Description | Use Case | +| 策略 | 描述 | 使用场景 | |----------|-------------|----------| -| `LeastAllocated` | Prefers nodes with more available resources | General workloads, load balancing | -| `MostAllocated` | Prefers nodes with higher resource utilization | GPU workloads, resource consolidation | +| `LeastAllocated` | 倾向于选择可用资源较多的节点 | 通用工作负载、负载均衡 | +| `MostAllocated` | 倾向于选择资源利用率较高的节点 | GPU 工作负载、资源整合 | -### Configuration Parameters +### 配置参数 ```yaml arguments: @@ -92,9 +92,9 @@ arguments: weight: 2 ``` -### Advanced Configuration Examples +### 高级配置示例 -#### 1. GPU-Optimized Configuration +#### 1. GPU 优化配置 ```yaml arguments: @@ -114,7 +114,7 @@ arguments: weight: 3 ``` -#### 2. Mixed Strategy Configuration +#### 2. 混合策略配置 ```yaml arguments: @@ -131,20 +131,20 @@ arguments: weight: 2 ``` -## Pod-Level Configuration +## Pod 级配置 -### Pod Annotations +### Pod 注释 -Individual pods can override the global configuration using annotations: +各个 Pod 可以使用注释覆盖全局配置: -| Annotation Key | Description | Example | +| 注解键 | 描述 | 示例 | |----------------|-------------|---------| -| `volcano.sh/resource-strategy-scoring-type` | Override scoring strategy | `"LeastAllocated"` or `"MostAllocated"` | -| `volcano.sh/resource-strategy-weight` | Override resource weights | `{"cpu": 2, "memory": 1, "nvidia.com/gpu": 3}` | +| `volcano.sh/resource-strategy-scoring-type` | 覆盖评分策略 | `"LeastAllocated"` 或 `"MostAllocated"` | +| `volcano.sh/resource-strategy-weight` | 覆盖资源权重 | `{"cpu": 2, "memory": 1, "nvidia.com/gpu": 3}` | -### Pod-Level Examples +### Pod 级示例 -#### 1. Override Strategy for Specific Pod +#### 1. 覆盖特定 Pod 的策略 ```yaml apiVersion: v1 @@ -170,7 +170,7 @@ spec: schedulerName: volcano ``` -#### 2. Custom Resource Weights +#### 2. 自定义资源权重 ```yaml apiVersion: v1 @@ -192,9 +192,9 @@ spec: schedulerName: volcano ``` -## Volcano Job Integration +## 火山工作整合 -### Basic Volcano Job +### 基本火山工作 ```yaml apiVersion: batch.volcano.sh/v1alpha1 @@ -229,7 +229,7 @@ spec: restartPolicy: Never ``` -### Multi-Task Job with Different Strategies +### 具有不同策略的多任务作业 ```yaml apiVersion: batch.volcano.sh/v1alpha1 @@ -276,11 +276,11 @@ spec: memory: "4Gi" ``` -## Use Cases +## 使用案例 -### 1. GPU Workload Optimization +### 1. GPU 工作负载优化 -For GPU-intensive workloads, use `MostAllocated` strategy to consolidate GPU usage: +对于 GPU 密集型工作负载,请使用“MostAllocation”策略来整合 GPU 使用情况: ```yaml # Global configuration @@ -295,9 +295,9 @@ arguments: weight: 1 ``` -### 2. Load Balancing +### 2. 负载均衡 -For general workloads, use `LeastAllocated` strategy to distribute load evenly: +对于一般工作负载,使用“LeastAllocation”策略来均匀分配负载: ```yaml # Global configuration @@ -312,9 +312,9 @@ arguments: weight: 1 ``` -### 3. Mixed Workloads +### 3. 混合工作负载 -Combine different strategies for different resource types: +针对不同的资源类型结合不同的策略: ```yaml # Global configuration @@ -332,11 +332,11 @@ arguments: weight: 5 ``` -## Troubleshooting +## 故障排除 -### Verify Plugin Configuration +### 验证插件配置 -Check the scheduler logs to ensure the plugin is loaded correctly: +检查调度程序日志以确保插件正确加载: ```bash kubectl logs -n volcano-system deployment/volcano-scheduler | grep "resource-strategy-fit" @@ -347,16 +347,16 @@ Expected output: Initialize resource-strategy-fit plugin with configuration: {resourceStrategyFitWeight: 10, resources: {...}} ``` -### Common Issues +### 常见问题 -1. **Plugin not loaded**: Ensure the plugin is included in the scheduler configuration -2. **Invalid annotations**: Check JSON format for pod-level weight annotations -3. **Resource not found**: Verify resource names match exactly (case-sensitive) -4. **Scoring not working**: Check plugin weight and resource weights are properly configured +1. **插件未加载**:确保插件包含在调度程序配置中 +2. **无效注解**:检查Pod级别权重注解的JSON格式 +3. **找不到资源**:验证资源名称是否完全匹配(区分大小写) +4. **评分不起作用**:检查插件权重和资源权重是否正确配置 -### Debug Information +### 调试信息 -Enable debug logging to see scoring decisions: +启用调试日志记录以查看评分决策: ```yaml # Add to scheduler configuration @@ -366,11 +366,11 @@ arguments: logLevel: 4 # Enable debug logging ``` -## Best Practices +## 最佳实践 -1. **Start with global configuration** for consistent behavior across all workloads -2. **Use pod-level annotations sparingly** for specific workload requirements -3. **Test different strategies** to find optimal configuration for your use case -4. **Monitor resource utilization** after applying the plugin -5. **Use appropriate weights** to balance different resource types -6. **Consider workload characteristics** when choosing between `LeastAllocated` and `MostAllocated` +1. **从全局配置开始**,以在所有工作负载中保持一致的行为 +2. **针对特定工作负载需求谨慎使用 pod 级注释** +3. **测试不同的策略**以找到适合您的用例的最佳配置 +4. **应用插件后监控资源利用率** +5. **使用适当的权重**来平衡不同的资源类型 +6. **在“LeastAllocation”和“MostAlowned”之间进行选择时,请考虑工作负载特征** \ No newline at end of file diff --git a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Scheduler/Plugins/resourcequota.md b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Scheduler/Plugins/resourcequota.md index 1a9f8411..1f3ef16a 100644 --- a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Scheduler/Plugins/resourcequota.md +++ b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Scheduler/Plugins/resourcequota.md @@ -2,23 +2,23 @@ title: ResourceQuota --- -## Introduction +## 介绍 -In a multi-tenant cluster, administrators commonly use Kubernetes `ResourceQuota` to limit the total resource consumption per namespace. However, by default, the scheduler may continuously try to enqueue and schedule pod groups even if the namespace's `ResourceQuota` is insufficient, leading to pending jobs and scheduler overhead. +在多租户集群中,管理员通常使用 Kubernetes `ResourceQuota` 来限制每个命名空间的总资源消耗。但是,默认情况下,即使命名空间的“ResourceQuota”不足,调度程序也可能会不断尝试排队和调度 pod 组,从而导致挂起的作业和调度程序开销。 -The **ResourceQuota Plugin** solves this problem by ensuring that a PodGroup is only allowed to enqueue if there is sufficient resource capacity in the namespace to satisfy the minimal resource quota required by the PodGroup. +**ResourceQuota 插件** 通过确保只有命名空间中有足够的资源容量来满足 PodGroup 所需的最小资源配额时才允许 PodGroup 入队,从而解决了这个问题。 -## Mechanism +## 机制 -Volcano implements the ResourceQuota plugin using the `AddJobEnqueueableFn` function. +Volcano 使用 `AddJobEnqueueableFn` 函数实现 ResourceQuota 插件。 -1. **Namespace Capacity Cache**: The plugin maintains an `RQStatus` map to cache all resource quotas for each namespace. -2. **Evaluation**: It calculates the `minQuotas`—which defines the minimal resource quota required to run the pod group. -3. **Enqueue Admission**: When evaluating pending PodGroups, the plugin allows them to enqueue *only* if the namespace's Kubernetes `ResourceQuota` has enough available capacity. It also considers PodGroups that have already been permitted in the current scheduling round to prevent race conditions that could exceed the namespace quota. +1. **命名空间容量缓存**:该插件维护一个“RQStatus”映射来缓存每个命名空间的所有资源配额。 +2. **评估**:它计算“minQuotas”——定义运行 pod 组所需的最小资源配额。 +3. **入队准入**:在评估待处理的 PodGroup 时,如果命名空间的 Kubernetes `ResourceQuota` 有足够的可用容量,则该插件*仅*允许它们入队。它还考虑当前调度轮次中已允许的 PodGroup,以防止可能超出命名空间配额的竞争条件。 -## Configuration +## 配置 -To enable the ResourceQuota Plugin, add it to your `volcano-scheduler-configmap`. +要启用 ResourceQuota 插件,请将其添加到“volcano-scheduler-configmap”中。 ```yaml actions: "enqueue, allocate, backfill" @@ -37,4 +37,4 @@ tiers: - name: binpack ``` -Once enabled, Volcano will respect the Kubernetes native `ResourceQuota` configuration and prevent jobs from enqueuing into the scheduling pipeline if they cannot possibly fit within their namespace quota. +启用后,Volcano 将尊重 Kubernetes 原生“ResourceQuota”配置,并防止作业在无法满足其命名空间配额的情况下排队进入调度管道。 \ No newline at end of file diff --git a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Scheduler/Plugins/sla.md b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Scheduler/Plugins/sla.md index 5353b789..0ce24ec8 100644 --- a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Scheduler/Plugins/sla.md +++ b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Scheduler/Plugins/sla.md @@ -4,36 +4,36 @@ title: "SLA" ## 概述 -当用户向 Volcano 提交作业时,可能需要为作业添加特定约束,例如最长 Pending 时间以防止作业饥饿。这些约束可视为 Volcano 与用户之间约定的**服务级别协议(SLA)**。SLA 插件用于接收并执行针对单个作业和整个集群的 SLA 设置。 +当用户向 Volcano 提交作业时,他们可能需要为作业添加特定的约束,例如最长的 Pending 时间,以防止作业饿死。这些约束可以被视为 Volcano 和用户之间商定的 **服务级别协议 (SLA)**。提供 SLA 插件来接收和实施单个作业和整个集群的 SLA 设置。 -## 工作原理 +## 它是如何运作的 -SLA 插件监控作业的等待时间,并在 SLA 约束被违反时采取相应措施: +SLA 插件监控作业等待时间,并在违反 SLA 约束时采取措施: -- **JobWaitingTime**:作业在 Pending 状态下允许等待的最长时间 -- **JobEnqueuedFn**:在作业入队前检查是否满足 SLA 要求 +- **JobWaitingTime**:作业在待处理状态下可以等待的最长时间 +- **JobEnqueuedFn**:在排队之前检查作业是否满足 SLA 要求 -当作业的等待时间超过配置的阈值时,调度器可采取纠正措施,例如提升作业优先级或通知管理员。 +当作业的等待时间超过配置的阈值时,调度程序可以采取纠正措施,例如确定作业的优先级或通知管理员。 -## 应用场景 +## 设想 -用户可根据业务需求在自己的集群中自定义 SLA 相关参数: +用户可以根据业务需求在自己的集群中自定义SLA相关参数: ### 实时服务 -对于有高实时性要求的集群,可将 `JobWaitingTime` 设置得尽量小,以确保作业被快速调度或被标记为需关注。 +对于实时服务要求较高的集群,“JobWaitingTime”可以设置得尽可能小,以确保作业被快速调度或标记为引起注意。 ### 批量计算 -对于主要运行批量计算作业的集群,可将 `JobWaitingTime` 设置得较大,以允许更灵活的时间窗口内进行调度。 +对于主要运行批量计算作业的集群,可以将“JobWaitingTime”设置得更大,以便随着时间的推移进行更灵活的调度。 ### 多租户环境 -在多租户集群中,不同队列或命名空间可以根据其服务等级设置不同的 SLA 要求。 +在多租户集群中,不同的队列或命名空间可以根据其服务层具有不同的 SLA 要求。 ## 配置 -在调度器 ConfigMap 中启用 SLA 插件: +在调度程序 ConfigMap 中启用 SLA 插件: ```yaml tiers: @@ -47,15 +47,15 @@ tiers: ### 配置参数 -| 参数 | 说明 | 默认值 | -|-----------|-------------|---------| +| 参数 | 描述 | 默认值 | +|-----------|-------------|---------| | `sla.JobWaitingTime` | 作业的最长等待时间 | - | -`JobWaitingTime` 参数使用时长格式指定(例如 `5m`、`1h`、`30s`)。 +可以使用持续时间格式指定“JobWaitingTime”参数(例如“5m”、“1h”、“30s”)。 -## 示例 +## 例子 -### 集群级 SLA 配置 +### 集群范围的 SLA 配置 ```yaml apiVersion: v1 @@ -80,9 +80,9 @@ data: - name: nodeorder ``` -### 带 SLA 注解的作业 +### 使用 SLA 注释的作业 -也可以在作业级别指定 SLA 约束: +您还可以在作业级别指定 SLA 约束: ```yaml apiVersion: batch.volcano.sh/v1alpha1 @@ -105,14 +105,14 @@ spec: command: ["sleep", "3600"] ``` -在此示例中,若作业在 Pending 状态下等待超过 10 分钟,SLA 插件将其标记为需优先调度或提醒管理员关注。 +在此示例中,如果作业在待处理状态下等待超过 10 分钟,SLA 插件会将其标记为优先调度或管理关注。 -### 监控 SLA 违规 +### 监控 SLA 违规情况 -Volcano 暴露的指标可用于监控 SLA 合规情况: +Volcano 公开了可用于监控 SLA 合规性的指标: - 作业等待时间指标 - SLA 违规计数 -- 队列级 SLA 统计数据 +- 队列级SLA统计 -这些指标可与 Prometheus 等监控系统集成,以跟踪整个集群的 SLA 合规状态。 \ No newline at end of file +这些指标可以与 Prometheus 等监控系统集成,以跟踪整个集群的 SLA 合规性。 \ No newline at end of file diff --git a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Scheduler/Plugins/task_topology.md b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Scheduler/Plugins/task_topology.md index 58f02186..b418f8ca 100644 --- a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Scheduler/Plugins/task_topology.md +++ b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Scheduler/Plugins/task_topology.md @@ -1,23 +1,23 @@ ---- +--- title: Task Topology --- -## Environment setup +## 环境设置 -### Install volcano +### 安装火山 -Refer to [Install Guide](https://github.com/volcano-sh/volcano/blob/master/installer/README.md) to install volcano. +参考【安装指南】(https://github.com/volcano-sh/volcano/blob/master/installer/README.md)安装volcano。 -### Update scheduler configmap +### 更新调度程序配置图 -After installed, update the scheduler configuration: +安装后,更新调度程序配置: ```shell kubectl edit configmap -n volcano-system volcano-scheduler-configmap ``` -Register `task-topology` plugin in configmap +在 configmap 中注册 `task-topology` 插件 ```yaml kind: ConfigMap @@ -44,20 +44,20 @@ data: - name: binpack ``` -### Running Jobs +### 正在运行的作业 -Take tensorflow job as sample. +以张量流作业为例。 -#### Install kubeflow/tf-operator +#### 安装 kubeflow/tf-operator -Refer to [Install Guide](https://www.kubeflow.org/docs/started/getting-started/) to install kubeflow, tf-operator included. +请参考[安装指南](https://www.kubeflow.org/docs/started/getting-started/)安装kubeflow,包括tf-operator。 -#### Edit yaml of tfjob +#### 编辑 tfjob 的 yaml -1. add annotations in volcano job or tensorflow job in format below. - 1. `affinity` annotation indicates that tasks have connections between each other, so they should be set on same nodes; - 2. `anti-affinity` annotation indicates that tasks do not have connections between each other, so they should be set on different nodes; - 3. `task-order` annotation indicates the order that tasks should be allocated. For example, `ps,worker` means scheduler should schedule `ps` tasks first. After all `ps` tasks were allocated, scheduler started to schedule `worker` tasks. **This annotation is not a required field.** +1. 按以下格式在火山作业或张量流作业中添加注释。 + 1. `affinity` 注解表示任务之间有联系,因此应设置在同一节点上; + 2. `anti-affinity` 注解表示任务之间没有联系,所以应该设置在不同的节点上; + 3. `task-order` 注解表示任务分配的顺序。例如,“ps,worker”表示调度程序应首先调度“ps”任务。当所有`ps`任务分配完毕后,调度程序开始调度`worker`任务。 **此注释不是必填字段。** ```yaml volcano.sh/task-topology-affinity: "ps,worker;ps,evaluator" diff --git a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Scheduler/Plugins/tasktopology.md b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Scheduler/Plugins/tasktopology.md index 321a234e..43379acb 100644 --- a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Scheduler/Plugins/tasktopology.md +++ b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Scheduler/Plugins/tasktopology.md @@ -4,45 +4,45 @@ title: "Task-topology" ## 概述 -Task-topology 算法根据 Job 内任务之间的亲和性和反亲和性配置来计算任务和节点的优先级。通过配置 Job 内任务之间的亲和性和反亲和性策略,并使用 Task-topology 算法,具有亲和性配置的任务将优先被调度到同一节点,而具有反亲和性配置的任务则被调度到不同节点。 +任务拓扑算法根据作业中任务之间的亲和性和反亲和性配置来计算任务和节点的优先级。通过配置Job内任务之间的亲和性和反亲和性策略,并使用Task-topology算法,可以将亲和性配置的任务优先调度到同一节点,而反亲和性配置的任务则调度到不同的节点。 -## 工作原理 +## 它是如何运作的 -Task-topology 插件分析作业内的任务关系并优化任务放置: +任务拓扑插件分析作业中的任务关系并优化放置: -- **亲和性(Affinity)**:适合放置在同一节点上的任务(例如,以实现快速本地通信) -- **反亲和性(Anti-affinity)**:应放置在不同节点上的任务(例如,以实现容错) +- **亲和性**:受益于同一节点的任务(例如,为了快速本地通信) +- **反亲和性**:应该在不同节点上的任务(例如,为了容错) -实现的关键函数: +实现的关键功能: -- **TaskOrderFn**:根据拓扑偏好对任务进行排序 -- **NodeOrderFn**:根据节点满足拓扑要求的程度对节点打分 +- **TaskOrderFn**:根据拓扑首选项对任务进行排序 +- **NodeOrderFn**:根据节点满足拓扑要求的程度对节点进行评分 -## 应用场景 +## 设想 -### 节点亲和性 +### 节点亲和力 -#### 深度学习与 TensorFlow +#### 深度学习和 TensorFlow -Task-topology 对于提高深度学习计算场景中的计算效率非常重要。以 TensorFlow 计算为例,配置"ps"(参数服务器)与"worker"之间的亲和性,Task-topology 算法能够使"ps"和"worker"尽可能被调度到同一节点,从而提高二者之间的网络和数据交互效率,进而提升计算效率。 +任务拓扑对于提高深度学习计算场景中的计算效率非常重要。以TensorFlow计算为例,配置ps(参数服务器)与worker的亲和力。 Task-topology算法使得“ps”和“worker”尽可能被调度到同一个节点,提高它们之间的网络和数据交互的效率,从而提高计算效率。 -#### HPC 与 MPI +#### 高性能计算和MPI -HPC 和 MPI 场景中的任务具有高度同步性,需要高速网络 IO。将相关任务放置在同一节点上可降低网络延迟,提升性能。 +HPC和MPI场景中的任务高度同步,需要高速的网络IO。将相关任务放置在同一节点上可以减少网络延迟并提高性能。 -### 反亲和性 +### 反亲和力 #### 参数服务器分布 -在 TensorFlow 计算中,"ps"实例之间的反亲和性可确保它们分布在不同节点上,以实现更好的负载均衡。 +在TensorFlow计算中,“ps”实例之间的反亲和性可以确保它们分布在不同的节点上,以实现更好的负载分配。 #### 高可用性 -电商服务场景可利用反亲和性实现主从备份和数据容灾,确保在主作业故障后备份作业能够继续提供服务。 +电商业务场景受益于主从备份的反亲和性和数据容灾,保证主作业失败后备份作业继续提供服务。 ## 配置 -在调度器中启用 Task-topology 插件: +在调度程序中启用任务拓扑插件: ```yaml tiers: @@ -55,9 +55,9 @@ tiers: - name: task-topology ``` -## 示例 +## 例子 -### 带任务亲和性的作业 +### 具有任务亲和力的工作 ```yaml apiVersion: batch.volcano.sh/v1alpha1 @@ -105,7 +105,7 @@ spec: - worker ``` -### 带任务反亲和性的作业 +### 工作与任务反亲和力 ```yaml apiVersion: batch.volcano.sh/v1alpha1 @@ -130,4 +130,4 @@ spec: - master ``` -在此示例中,两个 master 副本将被调度到不同节点,以确保高可用性。 \ No newline at end of file +在本例中,两个主副本将被调度到不同的节点以保证高可用性。 \ No newline at end of file diff --git a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Scheduler/Plugins/tdm.md b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Scheduler/Plugins/tdm.md index 70ec0ffa..82c38a53 100644 --- a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Scheduler/Plugins/tdm.md +++ b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Scheduler/Plugins/tdm.md @@ -3,38 +3,38 @@ title: "TDM" --- ## 概述 -TDM 的全称是**时分复用(Time Division Multiplexing)**。在混合部署环境中,部分节点可能同时属于 Kubernetes 集群和 YARN 集群。对于这些节点,Kubernetes 和 YARN 集群可以通过时分复用的方式共享这些资源。 +TDM 的全称是**时分复用**。在共置环境中,某些节点可能同时属于 Kubernetes 集群和 YARN 集群。对于这些节点,Kubernetes和YARN集群可以通过分时复用的方式使用这些资源。 -TDM 插件将这些节点标记为`可撤销节点`。在节点的可撤销时间窗口内,TDM 插件会尝试将`可抢占任务`调度到`可撤销节点`上。在可撤销时间窗口结束后,TDM 插件会将`可撤销节点`上的`可抢占任务`驱逐。 +TDM 插件将这些节点标记为“可撤销节点”。在节点的可撤销时间窗口内,TDM插件将尝试将“可抢占任务”分派给“可撤销节点”。在可撤销时间窗口之外,TDM 插件会从“可撤销节点”中逐出“可抢占任务”。 -TDM 插件提升了 Volcano 调度过程中节点资源的时分复用能力。 +TDM插件提高了Volcano调度过程中节点资源的时分复用能力。 -## 工作原理 +## 它是如何运作的 TDM 插件管理基于时间的资源共享: -1. **可撤销节点(Revocable Nodes)**:被标记为可撤销的节点,可在多个编排系统之间共享 -2. **可撤销时间窗口(Revocable Time Windows)**:定义节点对 Kubernetes 工作负载可用的时间段 -3. **可抢占任务(Preemptable Tasks)**:在可撤销时间窗口结束时可被驱逐的任务 +1. **可撤销节点**:标记为可撤销的节点,可以在编排系统之间共享 +2. **可撤销时间窗口**:定义节点可用于 Kubernetes 工作负载的时间段 +3. **Preemptable Tasks**:可撤销时间窗口结束时可以被驱逐的任务 -关键函数: +主要功能: -- **PredicateFn**:检查任务是否可以在当前时间窗口内被调度到可撤销节点上 -- **PreemptableFn**:根据时间约束判断任务是否应被驱逐 +- **PredicateFn**:检查当前时间窗口内是否可以在可撤销节点上调度任务 +- **PreemptableFn**:确定是否应根据时间限制驱逐任务 -## 应用场景 +## 设想 -### ToB 业务 +### ToB业务 -在 ToB(企业对企业)场景中,云厂商为商家提供基于云的资源,不同商家采用不同的容器编排框架(Kubernetes、YARN 等)。TDM 插件提高了公共节点资源的时分复用效率,进一步提升资源利用率。 +在ToB(Business-to-Business)场景中,云厂商为商户提供基于云的资源,不同商户采用不同的容器编排框架(Kubernetes、YARN等)。 TDM插件提高了普通节点资源的分时效率,进一步提高了资源利用率。 ### 混合集群 -同时运行 Kubernetes 和 Hadoop/YARN 工作负载的组织可以使用 TDM 在两个系统之间共享物理节点,通过基于时间的调度确保工作负载互不干扰。 +同时运行 Kubernetes 和 Hadoop/YARN 工作负载的组织可以使用 TDM 在两个系统之间共享物理节点,并通过基于时间的调度确保工作负载不会相互干扰。 ### 成本优化 -通过启用时分复用,组织可以在不同时间段跨不同工作负载类型共享节点,从而最大化硬件基础设施的利用率。 +通过启用时分复用,组织可以在不同时间段内跨不同工作负载类型共享节点,从而最大限度地利用其硬件基础设施。 ## 配置 @@ -47,9 +47,9 @@ kubectl label node volcano.sh/revocable-node=true kubectl annotate node volcano.sh/revocable-zone="zone-a" ``` -### 调度器配置 +### 调度程序配置 -启用带时间窗口配置的 TDM 插件: +启用具有时间窗口配置的 TDM 插件: ```yaml tiers: @@ -66,25 +66,25 @@ tiers: ### 配置参数 -| 参数 | 说明 | 格式 | +| 参数 | 描述 | 格式 | |-----------|-------------|--------| | `tdm.revocable-zone.` | 可撤销区域的时间窗口 | `:` | -时间窗口使用 Cron 表达式指定: -- `0 8 * * *` 表示"每天 8:00 AM" -- `0 18 * * *` 表示"每天 6:00 PM" +时间窗口使用 cron 表达式指定: +- `0 8 * * *` 表示“每天上午 8:00” +- `0 18 * * *` 表示“每天下午 6:00” -## 示例 +## 例子 ### 可撤销节点配置 ```bash -# 将节点标记为 zone-a 中的可撤销节点 +# Mark a node as revocable in zone-a kubectl label node worker-node-1 volcano.sh/revocable-node=true kubectl annotate node worker-node-1 volcano.sh/revocable-zone=zone-a ``` -### 带 TDM 的调度器 ConfigMap +### 带有 TDM 的调度程序 ConfigMap ```yaml apiVersion: v1 @@ -103,14 +103,14 @@ data: - name: predicates - name: tdm arguments: - # zone-a 在每天 8 AM 至 6 PM 期间对 Kubernetes 可用 + # zone-a is available for Kubernetes from 8 AM to 6 PM tdm.revocable-zone.zone-a: "0 8 * * *:0 18 * * *" - name: nodeorder ``` ### 可抢占作业 -提交一个可被调度到可撤销节点上的作业: +提交一个可以在可撤销节点上调度的作业: ```yaml apiVersion: batch.volcano.sh/v1alpha1 @@ -133,7 +133,7 @@ spec: command: ["sleep", "3600"] ``` -在此示例中: -- 作业被标记为可抢占 -- 在配置的时间窗口内,可被调度到可撤销节点上 -- 时间窗口结束时,作业将被驱逐 \ No newline at end of file +在这个例子中: +- 该作业被标记为可抢占 +- 可以在配置的时间窗口内将其安排在可撤销节点上 +- 时间窗口结束后将被驱逐 \ No newline at end of file diff --git a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Scheduler/Plugins/usage.md b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Scheduler/Plugins/usage.md index 9b7c1cf9..73a8c124 100644 --- a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Scheduler/Plugins/usage.md +++ b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Scheduler/Plugins/usage.md @@ -2,24 +2,24 @@ title: Usage-based Scheduling --- -## Introduction +## 介绍 -Currently, Kubernetes pod scheduling is based on resource requests and node allocatable resources rather than the actual node usage. This can lead to unbalanced resource usage across compute nodes, where pods might be scheduled to nodes with higher actual usage and lower allocation rates. +目前,Kubernetes Pod 调度基于资源请求和节点可分配资源,而不是实际的节点使用情况。这可能会导致计算节点之间的资源使用不平衡,其中 Pod 可能会被调度到实际使用率较高且分配率较低的节点。 -The **Usage-based scheduling** plugin allows Volcano to schedule pods based on real-time node usage. This helps to balance the cluster's actual resource usage and avoid scheduling pods on overloaded nodes. +**基于使用情况的调度**插件允许 Volcano 根据实时节点使用情况来调度 pod。这有助于平衡集群的实际资源使用情况,避免在过载的节点上调度 pod。 -## Mechanism +## 机制 -The Usage-based scheduling plugin primarily performs three functions: -1. **Predicate**: Filters nodes whose actual resource usage (e.g., CPU, Memory) is higher than the usage threshold defined by the user. -2. **Prioritize (NodeOrder)**: Prioritizes nodes with lower real-time usage, ensuring that nodes with more idle resources get higher scores. -3. **Preempt**: Pods on nodes with lower usage can preempt pods on nodes with higher usage to balance the cluster load. +基于使用情况的调度插件主要执行三个功能: +1. **谓词**:过滤实际资源使用率(如CPU、内存)高于用户定义的使用阈值的节点。 +2. **Prioritize (NodeOrder)**:优先考虑实时使用率较低的节点,确保空闲资源较多的节点获得较高分数。 +3. **抢占**:使用率较低的节点上的 Pod 可以抢占使用率较高的节点上的 Pod,以平衡集群负载。 -Volcano retrieves the node usage monitoring data from a metrics server (such as Prometheus, Prometheus Adaptor, or Elasticsearch). +Volcano 从指标服务器(例如 Prometheus、Prometheus Adaptor 或 Elasticsearch)检索节点使用情况监控数据。 -## Configuration +## 配置 -To enable the Usage-based scheduling plugin, configure the `volcano-scheduler-configmap`. +要启用基于使用情况的调度插件,请配置“volcano-scheduler-configmap”。 ```yaml actions: "enqueue, allocate, backfill" @@ -51,11 +51,11 @@ metrics: # metrics server related configuration interval: 30s # Optional. The scheduler pulls metrics from Prometheus with this interval, 30s by default. ``` -## Integrating with Metrics Sources +## 与指标源集成 -### 1. Prometheus Adaptor (Custom Metrics API) +### 1. Prometheus 适配器(自定义指标 API) -**Recommended approach**. Ensure the Prometheus Adaptor is installed and custom metrics API is available. Add the following rules to Prometheus Adaptor configuration: +**推荐方法**。确保 Prometheus Adapter 已安装并且自定义指标 API 可用。将以下规则添加到 Prometheus Adapter 配置中: ```yaml rules: @@ -79,13 +79,13 @@ rules: metricsQuery: avg_over_time(((1-node_memory_MemAvailable_bytes/<<.Series>>))[10m:30s]) ``` -Set the metrics `type` in the scheduler configmap to `prometheus_adaptor`. +将调度程序配置映射中的指标“type”设置为“prometheus_adaptor”。 -### 2. Prometheus +### 2. 普罗米修斯 -Set the `metrics.type` to `prometheus` and provide the `metrics.address` directly to the Prometheus server as shown in the configuration example. +将“metrics.type”设置为“prometheus”,并将“metrics.address”直接提供给 Prometheus 服务器,如配置示例所示。 -### 3. Elasticsearch +### 3. 弹性搜索 Set the `metrics.type` to `elasticsearch` and provide the following configuration: ```yaml From 77fa25f568418aafdcd9cce6629330dd46f3d947 Mon Sep 17 00:00:00 2001 From: hemantch01 Date: Mon, 15 Jun 2026 06:38:28 +0000 Subject: [PATCH 7/7] docs: fix sidebar, frontmatter and update docusaurus config Signed-off-by: hemantch01 --- .../current.json | 4 + .../current/Controller/Overview.md | 4 +- .../current/Controller/_category_.json | 4 +- .../current/Scheduler/Overview.md | 85 +++++++++---------- .../current/Scheduler/_category_.json | 4 +- 5 files changed, 49 insertions(+), 52 deletions(-) diff --git a/i18n/zh-Hans/docusaurus-plugin-content-docs/current.json b/i18n/zh-Hans/docusaurus-plugin-content-docs/current.json index e61c8537..8cfa3f39 100644 --- a/i18n/zh-Hans/docusaurus-plugin-content-docs/current.json +++ b/i18n/zh-Hans/docusaurus-plugin-content-docs/current.json @@ -42,5 +42,9 @@ "sidebar.docsSidebar.category.Contribution": { "message": "贡献", "description": "The label for category Contribution in sidebar docsSidebar" + }, + "sidebar.docsSidebar.category.Controller": { + "message": "控制器", + "description": "The label for category Controller in sidebar docsSidebar" } } \ No newline at end of file diff --git a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Controller/Overview.md b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Controller/Overview.md index ae48c502..710a2c79 100644 --- a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Controller/Overview.md +++ b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Controller/Overview.md @@ -2,6 +2,6 @@ title: Overview --- -## Introduction +## 介绍 -The Volcano Job Controller manages the lifecycle of jobs and dynamically configures job environments using plugins such as SSH, SVC, MPI, and PyTorch. +Volcano 作业控制器管理作业的生命周期,并使用 SSH、SVC、MPI 和 PyTorch 等插件动态配置作业环境。 \ No newline at end of file diff --git a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Controller/_category_.json b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Controller/_category_.json index 51e5301d..63cdc312 100644 --- a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Controller/_category_.json +++ b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Controller/_category_.json @@ -1,4 +1,4 @@ { - "label": "Controller", + "label": "控制器", "position": 6 -} +} \ No newline at end of file diff --git a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Scheduler/Overview.md b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Scheduler/Overview.md index 3044b7b6..a5bb2f02 100644 --- a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Scheduler/Overview.md +++ b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Scheduler/Overview.md @@ -1,57 +1,52 @@ --- -title: "介绍" +title: "Introduction" sidebar_position: 1 --- -### 简介 -Volcano Scheduler是负责Pod调度的组件,它由一系列action和plugin组成。action定义了调度各环节中需要执行的动作;plugin根据不同场景提供了action -中算法的具体实现细节。Volcano scheduler具有高度的可扩展性,您可以根据需要实现自己的action和plugin。 +## 简介 +Volcano调度器是负责pod调度的组件。它由一系列操作和插件组成。操作定义了每个步骤中应执行的操作。插件提供了不同场景下的动作算法细节。 +Volcano 调度程序具有高度可扩展性。您可以根据您的要求指定和实施操作和插件。 +## 工作流程 +![火山调度程序工作流程](/img/doc/scheduler.PNG) -### 工作流 -![Volcano scheduler workflow](/img/doc/scheduler.PNG) -Volcano scheduler的工作流程如下: +Volcano调度器的工作原理如下: -1. 客户端提交的Job被scheduler观察到并缓存起来。 -2. 周期性的开启会话,一个调度周期开始。 -3. 将没有被调度的Job发送到会话的待调度队列中。 -4. 遍历所有的待调度Job,按照定义的次序依次执行enqueue、allocate、preempt、reclaim、backfill等动作,为每个Job找到一个最合适的节点。将该Job -绑定到这个节点。action中执行的具体算法逻辑取决于注册的plugin中各函数的实现。 +1. 监视并缓存客户端提交的作业。 +2. 定期打开会话。一个调度周期开始。 +3. 将缓存中未调度的作业发送到会话中的待调度队列中。 +4. 遍历所有要调度的作业。按照定义的顺序执行排队、分配、抢占、回收和回填操作,并为每个作业找到最合适的节点。将作业绑定到节点。 action中执行的具体算法逻辑取决于注册插件中每个函数的实现。 5. 关闭本次会话。 -## Actions -### enqueue -Enqueue action负责通过一系列的过滤算法筛选出符合要求的待调度任务并将它们送入待调度队列。经过这个action,任务的状态将由pending变为inqueue。 -### allocate -Allocate action负责通过一系列的预选和优选算法筛选出最适合的节点。 -### preempt -Preempt action负责根据优先级规则为同一队列中高优先级任务执行抢占调度。 -### reclaim -Reclaim action负责当一个新的任务进入待调度队列,但集群资源已不能满足该任务所在队列的要求时,根据队列权重回收队列应得资源。 -### backfill -backfill action负责将处于pending状态的任务尽可能的调度下去以保证节点资源的最大化利用。 +## 行动 +### 入队 +入队动作负责根据一系列过滤算法过滤出符合调度要求的任务,并将其发送到待调度队列中。执行操作后,任务的状态从“pending”变为“inqueue”。 +###分配 +分配动作负责根据一系列预测和优化算法选择最合适的节点。 +### 抢占 +抢占动作负责按照优先级规则抢占调度同一队列中的高优先级任务。 +### 回收 +回收动作负责当新任务进入队列且集群资源无法满足队列需要时,根据队列权重回收分配给集群的资源。 +###回填 +回填动作负责将处于“pending”状态的任务回填到集群节点中,以最大化节点的资源利用率。 -## Plugins -### gang -gang plugin认为未处于ready状态(包括Binding、Bound、Running、Allocated、Succeed、Pipelined)的任务具有更高的优先级。它会检查假如驱逐某 -些任务回收队列部分应得资源后,该任务所属的Job中任务的运行数量是否满足minAvailable的要求,以决定是否执行驱逐动作。 -### conformance -conformance plugin认为命名空间kube-system下的任务具有更高的优先级。这些任务不能被抢占。 +## 插件 +### 帮派 +gang 插件认为未处于“Ready”状态的任务(包括 Binding、Bound、Running、Allocated、Succeed 和 Pipelined)具有更高的优先级。它在尝试驱逐一些 Pod 并回收资源后,检查分配给队列的资源是否能够满足任务运行“minavailable”Pod 所需的资源。如果是,gang 插件将驱逐一些 pod。 +### 一致性 +一致性插件认为命名空间“kube-system”中的任务具有更高的优先级。这些任务不会被抢占。 ### DRF -DRF plugin认为占用资源较少的任务具有更高的优先级。它会尝试计算已分配给抢占者和被抢占者的资源总量,并在抢占者资源资源份额更少时触发抢占行为。 -### nodeorder -nodeorder plugin通过一系列维度的打分算法,算出针对某个任务时所有的节点的得分情况。得分最高的节点被认为是针对该任务最合适的节点。 -### predicates -predictions plugin通过一系列维度的评估算法,决定某个任务是否适合被绑定到某个节点。 -### priority -priority plugin用于比较两个job或任务的优先级。它通过比较job.spec.priorityClassName来决定哪个job的优先级更高。对于两个任务,它会依次比较 -task.priorityClassName、task.createTime、task.id in order来决定谁的优先级更高。 +DRF插件认为资源较少的任务具有较高的优先级。它尝试计算分配给抢占者和被抢占任务的资源总量,并在抢占者任务资源较少时触发抢占。 +### 节点顺序 +nodeorder 插件通过使用一系列评分算法对任务的所有节点进行评分。得分最高的节点被认为是最适合该任务的节点。 +### 谓词 +谓词插件通过使用一系列评估算法来确定任务是否绑定到节点。 +### 优先级 +优先级插件比较两个作业或任务的优先级。对于两个作业,它通过比较“job.spec.priorityClassName”来决定谁的优先级更高。对于两个任务,它通过依次比较“task.priorityClassName”、“task.createTime”和“task.id”来决定谁的优先级更高。 ## 配置 -由于Volcano scheduler采用了组合模式的设计,它具有高度的扩展性。用户可以根据个人需要决定使用哪些action和plugin,也可以根据action和plugin的 -接口自定义实现。scheduler的配置位于名为**volcano-scheduler-configmap**的configmap内,该configmap被作为volume挂载在容器的/volcano.scheduler -路径下。 -### 如何查看Volcano scheduler的配置 -* 查看名为volcano-scheduler-configmap的configmap +Volcano 调度程序因其复合模式设计而具有高度可扩展性。用户可以根据自己的需要决定使用哪些action和plugin,也可以通过调用action或plugin接口来实现定制。调度程序配置位于名为 **volcano-scheduler-configmap** 的 ConfigMap 中,它作为卷安装到调度程序容器中的“/volcano.scheduler”目录中。 +### 如何获取 Volcano Scheduler 的配置 +* 获取名为“volcano-scheduler-configmap”的ConfigMap。 ```shell # kubectl get configmap -nvolcano-system @@ -59,7 +54,7 @@ NAME DATA AGE volcano-scheduler-configmap 1 6d2h ``` -* 查看configmap的data部分详情 +* 查看ConfigMap中data部分的详细信息。 ```shell # kubectl get configmap volcano-scheduler-configmap -nvolcano-system -oyaml @@ -91,6 +86,4 @@ metadata: uid: 1effe4d6-126c-42d6-a3a4-b811075c30f5 ``` -在volcano-scheduler.conf中主要包括actions和tiers两部分。在actions中,使用逗号作为分隔符配置各需要执行的action。需要注意的是,action的配置 -顺序就是scheduler的执行顺序。Volcano本身不会对action顺序的合理性进行检查。tiers中配置的plugin列表即为注册到scheduler中的plugin。plugin中 -实现的算法将会被action调用。 \ No newline at end of file +“actions”和“tiers”包含在“volcano-scheduler.conf”中。在“actions”中,逗号用作分隔符来配置要由调度程序执行的操作。请注意,调度程序将按照配置的顺序执行操作。 Volcano本身不会检查订单的合理性。 `tiers` 中配置的插件列表是向调度程序注册的插件。插件中定义的具体算法将在`actions`中调用。 \ No newline at end of file diff --git a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Scheduler/_category_.json b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Scheduler/_category_.json index a59dd3a2..86ea337b 100644 --- a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Scheduler/_category_.json +++ b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/Scheduler/_category_.json @@ -1,4 +1,4 @@ { - "label": "Scheduler", - "position": 7 + "label": "调度器", + "position": 5 } \ No newline at end of file