Skip to main content
Version: v25.03

在离线混部

特性介绍

在云上业务类型和硬件资源越来越丰富的背景下,对云原生系统提出了更高的管理要求,例如资源利用率问题,服务质量保障问题等等。为了让多样性业务和算力混部系统以更优状态运行,各种在离线业务混部解决方案应运而生,在openFuyao在离线混部和资源超卖的解决方案中,包括以下功能。

  • 业务特性感知调度。
  • 混部节点管理。
  • 混部工作负载管理。
  • 节点超卖资源管理和上报。
  • 基于NRI机制的无侵入超卖Pod创建和cgroup管理。
  • 超卖调度。
  • 单机混部引擎(rubik)和内核隔离技术多层次优化系统。

应用场景

用户在部署工作负载时,需要根据工作负载的特性决定该工作负载是离线业务、离线超卖业务、在线业务、还是非混部的普通业务。调度器会将该工作负载调度到混部节点、超卖节点或非混部节点上,以满足用户对混合部署的诉求。

能力范围

在/离线、超卖业务混合部署策略配置以及统计信息可视化。

亮点特征

业界领先的在离线业务混合部署和资源超卖解决方案。支持在线/离线业务混合部署,保障在线业务在使用高峰时期的调度,同时使能离线业务在在线业务低谷时期使用超卖资源提升集群的资源利用率。

实现原理

集群中的节点规划分为超卖节点、混部节点和非混部节点。一般情况下,在线业务和离线业务部署在混部节点上,普通业务部署在非混部节点上,超卖业务部署在超卖节点上。混部调度器根据当前要部署的业务属性以及集群中节点的混部属性,合理调度当前业务到适当的节点上。

图 1 在离线混部和资源超卖解决方案示例图

实现原理

  • colocation-website:以Deployment形式部署在集群中。在离线混部前台界面设计,包括混部统计可视化、混部节点管理、混部工作负载管理和混部规则管理等。
  • colocation-service:以Deployment形式部署在集群中。对外提供sevice服务接口,包括混部统计信息接口,混部节点管理的添加、移除,Pod、Deployment、StatefulSet、Job、CronJob等工作负载的混部状态切换、查看等,混部规则的创建、修改、查看、删除等。
  • colocation-agent:以Daemonset形式部署在集群中。主要负责在混部节点上打开内存QoS管理开关。
  • colocation-operator:以Deployment形式部署在集群中。负责混部规则CRD的定义和管理,工作负载混部离线、混部在线、非混部等状态切换管理,准入控制器的实现等。

图 2 在离线混部模块设计及部署视图
NUMA分配

超卖节点资源上报和管理系统由Master和单机Agent两部分组成:

  • oss-agent:以DaemonSet形式部署在集群超卖节点上。单机Agent负责从kubelet得到node和Pod的资源采样数据并上报超卖Master。
  • oss-master:以Deployment形式部署在集群中。超卖Master从采样数据中刻画出每台节点上的LS Pod的资源使用画像,再结合系统配置参数和超卖公式,将BE可分配资源量更新到node对象上。

图3 节点资源超卖上报和管理

超卖系统架构1

超卖Pod创建和cgroup管理利用NRI机制在容器多个生命周期执行自定义逻辑:

  • 借助NRI机制在Pod和容器的生命周期hook期间添加自定义逻辑。
  • 借助NRI reply完成对容器oci spec的修改。
  • 通过NRI UpdateContainer完成对实际资源的修改。

整个过程涉及两个工作负载:

  • overquota-pod-webhook:以Deployment形式部署在集群中。超卖工作负载的准入控制器,负责在超卖工作负载准入阶段校验工作负载的配置是否满足超卖规则,拒绝掉不符合条件的超卖规则。
  • overquota-pod-management:以DaemonSet形式部署在超卖节点上。利用上述NRI机制完成对实际资源的修改。

图4 基于NRI机制的无侵入超卖Pod创建和cgroup管理

超卖系统架构2

相关实例

代码链接:
openFuyao/colocation-website (gitcode.com)
openFuyao/colocation-service (gitcode.com)
openFuyao/colocation-agent (gitcode.com)
openFuyao/colocation-operator (gitcode.com)
openFuyao/overquota-resource-management (gitcode.com)
openFuyao/overquota-pod-management (gitcode.com)

安装

前提条件

  1. openFuyao的混部引擎为rubik组件,rubik只能运行在openEuler操作系统上,且要选用openEuler 22.03 LTS或更新的版本。在离线混部的完整功能在openEuler 22.03 LTS版本上做了详细的验证,对于其它更新版本,用户可以选择部署,但暂不保证功能正确性。

  2. 已部署Kubernetes v1.21版本及以上、containerd v1.7.0版本及以上,kube-prometheus v1.19版本及以上

  3. 混部节点开启kubelet的10255端口。

    2.1 在混部节点上,执行如下命令,查看config文件。

     vi /etc/kubernetes/kubelet-config.yaml

    说明:
    如果上述位置没有config文件,可以在/var/lib/kubelet/config.yaml位置找到。

    2.2 修改config文件,增加readOnlyPort:10255,保存。

    2.3 重启kubelet,执行如下命令。

     sudo systemctl restart kubelet
  4. 混部节点开启containerd的nri扩展功能。

    3.1 在混部节点上,进入vim /etc/containerd/config.toml,搜索是否有[plugins."io.containerd.nri.v1.nri"]。

    3.2 如果有,则将disable=true改为disable=false。如果没有,则在[plugins]下增加:

    [plugins."io.containerd.nri.v1.nri"]

    disable = false

    disable_connections = false

    plugin_config_path="/etc/nri/conf.d"

    plugin_path="/opt/nri/plugins"

    plugin_registration_timeout="5s"

    plugin_request_timeout = "2s"

    socket_path="/var/run/nri/nri.sock"

    3.3 配置完成,执行如下命令重启containerd。

     sudo systemctl restart containerd 

开始安装

  1. 在openFuyao平台左侧导航栏选择“应用市场 > 应用列表”,进入“应用列表”界面。
  2. 勾选左侧类型“扩展组件”,查看所有扩展组件。或在搜索框中输入“colocation-package”。
  3. 单击“colocation-package”卡片,进入在离线混部扩展组件“详情”界面。
  4. 单击“部署”进入“部署”界面。
  5. 输入应用名称、选择安装版本和命名空间。
  6. 在参数配置的“Values.yaml”中输入要部署的values信息。
  7. 单击“部署”完成部署。
  8. 单击左侧导航栏的“扩展组件管理”管理该组件。

说明:
部署后需要对集群中的节点进行混部支持的配置,该操作可能导致该节点上的工作负载被驱逐重调度,现网环境请合理规划集群中的混部节点,并谨慎使用。

独立部署

相比于应用市场安装部署,本组件提供了独立部署功能,步骤如下:

  1. 拉取镜像。

    helm pull oci://harbor.openfuyao.com/openfuyao-catalog/charts/colocation-package --version xxx

    将其中的xxx替换成需要拉取的helm镜像版本,例如:0.13.0

  2. 解压安装包。

    tar -zxvf colocation-package-xxx.tgz
  3. 关闭openFuyao及Oauth开关。

    vim colocation-package/values.yaml

    colocation-website.enableOAuth以及colocation-website.openFuyao选项改为false。

  4. 将service设置为NodePort类型。

    vim colocation-package/values.yaml

    修改colocation-website.service.typeNodePort

  5. 对接promtheus

    vim colocation-package/values.yaml

    独立部署时需要集群中已经安装好监控组件,修改colocation-service.serviceHost.prometheus字段为当前集群中的prometheus暴露的指标查找地址和端口即可,例如:http://prometheus-k8s.monitoring.svc.cluster.local:9090

  6. 独立安装。

    helm install colocation-package ./
  7. 访问独立前端。

    可通过http://管理面的客户端登录IP地址:30880 访问独立前端。

概览

在openFuyao平台界面的左侧导航栏“算力优化中心”中选择“在离线混部 >概览”,进入在离线混部的“概览”界面,界面展示了在离线混部的使用流程、节点信息、工作负载信息、节点资源使用率信息以及超卖节点的超卖资源使用量统计情况。

说明:
资源统计模块中的超卖CPU和内存资源统计TOP5两个统计图在集群中没有设置超卖节点时不会显示,在将集群中某个节点设置为超卖节点,待节点上的超卖Agent部署完成后,会正常显示。

图 3 混部节点管理概览及列表

混部节点管理

使用节点管理

在openFuyao平台界面的左侧导航栏“算力优化中心”中选择“在离线混部 > 节点管理”,进入“节点管理”,“节点管理”界面展示了集群中混部相关的节点列表信息,提供了混部节点管理能力,同时支持将选择的混部节点设置超卖节点。

添加混部节点

前提条件

集群中至少存在一个非混部节点。

背景信息

无。

使用限制

添加混部节点后可能导致该节点上的Pod被驱逐,请合理规划集群中节点的混部能力。

操作步骤

  1. 在“节点管理”界面的列表右上角单击“添加混部节点”,弹出“添加混部节点”窗口。

  2. 勾选需要支持混部的节点。

    输入图片说明 说明:

    • 设置为混部节点后,该节点上的工作负载可能会被驱逐重新调度,并且不能保证能够调度成功。建议在配置混部节点前,合理规划集群中的节点属性以及工作负载资源等。
    • 已置灰的节点不能添加为混部节点。
  3. 对勾选的混部节点,确认是否需要打开节点超卖开关。

  4. 单击“确定”,完成添加。

相关操作

您还可以在“节点管理”的混部节点信息列表中,单击“设置为非混部节点”列的移除混部节点图标,按需移除混部节点;也可以开启或关闭“设置为超卖”列的开关,按需设置混部节点为超卖节点。

使用工作负载管理

在openFuyao平台界面的左侧导航栏“算力优化中心”中选择“在离线混部 > 工作负载管理”,进入“工作负载管理”界面。工作负载管理界面包含“Pod”、“Deployment”、“StatefulSet”、“Job”、“Cronjob”等五个标签页,分别管理五种混部工作负载的在离线属性。以下操作以“Pod”为例进行介绍,其余工作负载操作步骤类似。

图 4 混部工作负载管理

混部工作负载管理

查看混部Pod管理

在“Pod”界面支持查看当前集群中所有的混部Pod,包括混部离线Pod、混部超卖Pod和混部在线Pod。

输入图片说明 说明:

  • “Pod”界面只支持查看混部Pod。非混部的Pod,不在本界面展示。有controller的Pod,列表上会显示但是会被置灰,修改操作需要到对应controller的界面进行。
  • “Job”界面查看方式同“Pod”界面。

添加混部Pod

前提条件

集群中存在非混部Pod。

背景信息

将一个非混部Pod设置为混部在线或混部离线Pod,保障在线业务的服务质量,提高集群资源利用率。

使用限制

  1. 对于Pod和Job等没有controller管理的工作负载的重调度当前版本尚未实现,会出现添加混部Pod或者Job后相关资源并没有被调度的情况。在其他工作负载类别下不会发生该情况。

  2. 设置为混部在线或混部离线工作负载后,相关的Pod会被驱逐重新部署到混部节点上,这将导致该Pod所提供的服务在短时间内不可用,请谨慎操作。

操作步骤

  1. 在“工作负载管理”界面单击“Pod”标签页,进入“Pod”界面。
  2. 在“Pod”界面右上角单击“添加混部Pod”,进入“添加混部Pod”界面。
  3. 选中需要设置为混部的Pod,根据诉求设置“期望混部属性”。
  4. 单击“确定”,完成添加。

相关操作

您可以在混部工作负载的列表页单击“操作”列的输入图片说明,按需选择“修改为离线”或“设置为非混部”。

输入图片说明 说明:

当前超卖类型的工作负载不支持进行混部类型的修改。

使用规则管理

在openFuyao平台界面的左侧导航栏“算力优化中心”中选择“在离线混部 > 规则管理”,进入“规则管理”界面。

图 5 混部规则管理

混部规则管理

混部规则管理界面支持对混部在线规则和离线规则进行创建、查看、修改、删除等操作,当前版本不支持配置超卖规则。

输入图片说明 说明: 用户在部署某个工作负载(或者应用,下同)之前,根据该工作负载的名称、label等特性进行混部规则的设置。当工作负载部署时,在离线混部组件会根据当前的混部规则库进行匹配,匹配完成后,根据匹配到的混部规则,将当前部署的工作负载部署为规则中规定的混部类型。如果匹配不到任何混部规则,则按照默认调度策略进行工作负载的部署。

创建混部规则

混部规则的创建支持“标签选择器模式”和“精确匹配模式”两种。您可以在“规则管理”界面右上角单击“创建”,按需选择创建的模式。

输入图片说明 说明:

  • 最多可以创建100条混部规则。
  • 创建混部规则不会影响已经部署的工作负载,只会对规则创建后部署的工作负载起作用。
  • “标签选择器模式”中,每条规则可以创建多条标签,最多可创建10条。

表 1 创建混部规则模式说明

模式描述
标签选择器式通过指定目标工作负载的标签值等信息,自动匹配混部规则。
精确匹配式通过指定目标工作负载的名称等信息,精确自动匹配混部规则。

查看混部规则

前提条件

已创建好混部规则。

背景信息

无。

使用限制

无。

操作步骤

  1. 左侧导航栏单击“规则管理”可查看规则的列表信息。

  2. 单击“规则名称”,查看该条规则的“详情”界面。

    输入图片说明 说明:
    混部规则查看界面不支持修改该条规则的内容。

相关操作

您可以在列表页面单击操作列输入图片说明,按需修改和删除混部规则。

操作说明
修改支持除“规则名称”、“混部属性”外其他属性的修改。