Skip to content

多机、多集群、多项目组 部署调度

栾鹏 edited this page Jun 17, 2024 · 15 revisions

视频教程

公有云,单机,多机,多集群,分布式存储,私有仓库,gpu,功能初步验证

配置文件所在地

本地调试时:(启动方式:install/docker/目录下执行docker-compose up)

  • k8s集群的config文件:在install/docker/kubeconfig/下面
  • 配置文件config.py文件:在install/docker/config.py中
  • 启动文件entrypoint.sh文件:在install/docker/entrypoint.sh中

线上部署时:(启动方式:install/kubernetes/目录下执行 kubectl apply -k cube/overlays

  • k8s集群的config文件:在install/kubernetes/kubeconfig/下面
  • 配置文件config.py文件:在install/kubernetes/cube/overlays/config/config.py中
  • 启动文件entrypoint.sh文件:在install/kubernetes/cube/overlays/config/entrypoint.sh中

机器标签管理

机器通过label进行管理,所有的调度机器由平台控制,不由用户直接控制。

开发训练服务机器管理:

  • 对于cpu的train/notebook/service会选择cpu=true的机器
  • 对于gpu的train/notebook/service会选择gpu=true的机器
  • 对于vgpu的service会选择vgpu=true的机器
  • 对于rdma网络的pod会选择rdma=true的机器
  • 训练任务会选择train=true的机器
  • notebook会选择notebook=true的机器
  • 服务化会选择service=true的机器
  • 不同资源组的任务会选择对应org=xx的机器。默认为org=public
  • 可以通过gpu-type=xx表示gpu的型号,比如gpu-type=V100或gpu-type=T4,在配置gpu算力时也可以同步配置gpu型号。例如2(T4)表示2张T4卡。

控制器机器管理:

  • mysql=true 部署mysql服务的机器
  • redis=true 部署mysql服务的机器
  • kubeflow-dashobard=true 部署cube服务的机器
  • kubeflow=true 部署kubeflow的机器
  • isito=true 部署istio的机器
  • monitoring=true 部署prometheus的机器

单集群多机

实现原理:

2、集群扩容

基础准备:主机/data/k8s目录下需为分布式存储

1、初始化机器

在新机器上只需要拉取rancher镜像

cd install/kubernetes/rancher
python3 all_image.py > pull_rancher_images.sh
sh pull_rancher_images.sh

在新机器上只需要拉取cube-studio镜像

cd install/kubernetes/
bash init_node.sh

2、添加k8s,只需要worker角色

在rancher界面,将新机器加入rancher集群,新机器只需要为worker,并且为机器添加label。

操作路径:打开单机时创建的集群-> 点击节点菜单->编辑集群->底部复制加入集群命令。在新机器上执行复制的命令即可

3、 为机器添加标签

service=true train=true notebook=true org=public cpu=true # 按需 gpu=true # 按需 gpu-type=A100 # 按需

在这里插入图片描述

3、分布式存储

目前机器学习平台依赖强io性能的分布式存储。

参考分布式存储部署

!!!重要:分布式文件系统需要挂载到每台机器的/data/k8s/下面,当然也可以挂载其他目录下,以软链的形式链接到/data/k8s/下 (如果使用juicefs,则不需要这一步)

需要每台机器都有对应的目录/data/k8s为分布式存储目录(如果使用juicefs,则不需要这一步)

mkdir -p /data/k8s/kubeflow/minio  
mkdir -p /data/k8s/kubeflow/global  
mkdir -p /data/k8s/kubeflow/pipeline/workspace  
mkdir -p /data/k8s/kubeflow/pipeline/archives  

平台pvc会使用这些分布式存储目录下的subpath,所以如果你是rancher部署k8s集群,需要在kubelet容器中挂载主机的/data/k8s/目录到kubelet容器的/data/k8s/目录。

rancher修改kubelet容器挂载目录(选中集群-升级-编辑yaml)

    kubelet:
      extra_binds:
        - '/data/k8s:/data/k8s'

多资源组

每个k8s集群的算力都可以划分为多个资源组。这些划分是通过机器label来实现的。

为机器添加标签org=xx其中xx为资源组名称,

添加机器标签后,在项目组中添加资源组配置为上面的xx,然后保存项目组配置后,该项目组下的成员就会自动使用这一波资源组算力了。

在这里插入图片描述

单集群多项目组算力均衡

多项目组之间的算力的均衡通过schedules.py中的adjust_node_resource任务实现。

基本原则是每5分钟,将可共享的机器(lable包含share=true),从当前负载最小的项目组划分到负载最高的项目组,同时保证项目组的最小可用算力

开源体验地址:

http://39.96.177.55:8888/

学习、部署、体验、咨询

Clone this wiki locally