[bing]“gang调度 Kubernetes的并发控制和一致性机制“论点的对应的源码分析

你是一位K8S专家。请分析在Kubernates(https://github.com/kubernetes/kubernetes.git)项目和调度coscheduling(https://github.com/kubernetes-sigs/scheduler-plugins/tree/master/pkg/coscheduling) 插件中支撑"PodGroup的管理和调度决策涉及到对Pod和Node资源的查询和更新操作。这些操作通过client-go与Kubernetes API服务器进行交互,遵循Kubernetes的并发控制和一致性机制"论点的对应的源码分析。


在 Kubernetes 和 coscheduling 插件中,PodGroup 的管理和调度决策确实涉及到对 Pod 和 Node 资源的查询和更新操作。这些操作通过 client-go 与 Kubernetes API 服务器进行交互,遵循 Kubernetes 的并发控制和一致性机制。以下是一些相关的源码分析:

  1. PodGroup 的管理:PodGroup 是 coscheduling 插件中的一个自定义资源(CRD),用于表示一组需要共同调度的 Pod。PodGroup 的管理主要在 pkg/coscheduling/coscheduling.go 文件中,其中定义了 PodGroup 的创建、更新和删除操作。

  2. 调度决策:调度决策主要在 pkg/coscheduling/core/core.go 文件中进行。在这里,插件会查询 PodGroup 的状态,并根据 PodGroup 的 Pod 数量、优先级等信息进行调度决策。

  3. 资源的查询和更新:资源的查询和更新操作主要通过 client-go 进行。例如,在 pkg/coscheduling/core/core.go 文件中,我们可以看到使用 client-go 查询 Pod 和 Node 资源的操作。

  4. 并发控制和一致性机制:Kubernetes 的并发控制和一致性机制主要通过 etcd 实现。在 Kubernetes 的源码中,我们可以在 staging/src/k8s.io/apiserver/pkg/storage/etcd3/store.go 文件中看到这些操作。

以上就是对 Kubernetes 和 coscheduling 插件中支撑 “PodGroup 的管理和调度决策涉及到对 Pod 和 Node 资源的查询和更新操作。这些操作通过 client-go 与 Kubernetes API 服务器进行交互,遵循 Kubernetes 的并发控制和一致性机制” 论点的源码分析。希望对你有所帮助!


基于上述描述的语境范围进一步分析:

  • Kubernetes调度框架 k8s.io/kubernetes/pkg/scheduler/framework/
  • coscheduling源码分析
    • kubernetes-sigs/scheduler-plugins/pkg/coscheduling/coscheduling.go
    • kubernetes-sigs/scheduler-plugins/pkg/coscheduling/core/core.go

最好的方式是通过调度框架的流程,把源码串起来,下面是图示的(语境范围):
在这里插入图片描述

https://kubernetes.io/docs/concepts/scheduling-eviction/scheduling-framework/

  • 6
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要检查GANG调度配置是否正确,可以使用以下命令: ``` sview -G ``` 这将显示当前配置的所有GANG分区和节点。 要编写一个在单个分区执行GANG调度的脚本,可以按照以下步骤进行操作: 1. 创建一个新的脚本文件,例如`gang_submit.sh`。 2. 在脚本中设置SLURM选项,如下所示: ``` #!/bin/bash #SBATCH --partition=<partition_name> #SBATCH --nodes=<number_of_nodes> #SBATCH --ntasks-per-node=<number_of_tasks_per_node> #SBATCH --gres=gpu:<number_of_gpus_per_node> #SBATCH --job-name=<job_name> #SBATCH --output=<output_file> #SBATCH --error=<error_file> ``` 其中,`<partition_name>`是要使用的分区的名称,例如`gpu`,`<number_of_nodes>`是要使用的节点数,`<number_of_tasks_per_node>`是每个节点上要运行的任务数,`<number_of_gpus_per_node>`是每个节点上要使用的GPU数,`<job_name>`是作业的名称,`<output_file>`是标准输出文件的名称,`<error_file>`是标准错误文件的名称。 3. 在脚本中添加GANG调度选项,如下所示: ``` #SBATCH --dependency=afterok:<jobid1>:<jobid2>:... #SBATCH --kill-on-invalid-dep=yes #SBATCH --clusters=<gang_cluster_name> #SBATCH --gang #SBATCH --gang-partition=<gang_partition_name> #SBATCH --gang-nodes=<gang_number_of_nodes> #SBATCH --gang-tasks-per-node=<gang_number_of_tasks_per_node> #SBATCH --gang-gres=gpu:<gang_number_of_gpus_per_node> ``` 其中,`<jobid1>:<jobid2>:...`是需要等待的前置作业的ID列表,`<gang_cluster_name>`是GANG集群的名称,`<gang_partition_name>`是要使用的GANG分区的名称,`<gang_number_of_nodes>`是要使用的GANG节点数,`<gang_number_of_tasks_per_node>`是每个GANG节点上要运行的任务数,`<gang_number_of_gpus_per_node>`是每个GANG节点上要使用的GPU数。 4. 在脚本中添加要运行的命令,例如: ``` srun python my_script.py ``` 这将在GANG调度下运行`my_script.py`。 5. 提交作业,例如: ``` sbatch gang_submit.sh ``` 这将提交GANG调度作业并将其添加到队列中。 请注意,GANG调度只能在支持GANG的分区上运行。在提交GANG调度作业之前,请确保已在`slurm.conf`文件中正确配置了GANG分区和节点。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值