一、部署在集群内的资源对象
注意:说明:
注意:使用可抢占式 Job 需要首先在集群中安装 QoSAgent 组件并开启 CPU 使用优先级,我们会自动为所有可抢占式 Job 分配最低的优先级(优先级7),在发生资源抢占时被绝对抢占,该组件在集群中部署的资源对象请参见下方表格。
| Kubernetes 对象名称 | 类型 | 默认占用资源 | 所属 Namespaces |
| avoidanceactions.ensurance.crane.io | CustomResourceDefinition | – | – |
| nodeqoss.ensurance.crane.io | CustomResourceDefinition | – | – |
| podqoss.ensurance.crane.io | CustomResourceDefinition | – | – |
| timeseriespredictions.prediction.crane.io | CustomResourceDefinition | – | – |
| kube-system | Namespace | – | – |
| all-be-pods | PodQOS | – | kube-system |
| qos-agent | ClusterRole | – | – |
| qos-agent | ClusterRoleBinding | – | – |
| crane-agent | Service | – | kube-system |
| qos-agent | ServiceAccount | – | kube-system |
| qos-agent | Daemonset | – | kube-system |
二、功能说明
·因为只有原生节点才有闲置资源,所以该功能仅支持在 原生节点 中使用。
·支持为 Job、CronJob 分配集群中的闲置资源。
·该部分闲置资源不占用集群中的剩余可调度资源。
·当发生资源竞争时,闲置资源会被优先回收,因此被称之为可抢占式 Job。
·节点和集群的闲置资源数值是动态变化的,根据实际的负载动态变化。当集群/节点闲置资源小于 Job 对闲置资源申请时,导致 Pod 会 Pending。
三、Request 推荐原理
·闲置资源的分配方式是根据 Kubernetes 原生的 Extended Resource 实现。通过 Extended Resource 回收节点的剩余可用资源形成共享资源池,共享资源池不占用实际集群/节点的 CPU/RAM 可调度资源量。
·如下所示,QoS Agent 组件将集群中所有没有被真正使用的资源中抽取一部分资源,根据节点历史负载画像情况预测出安全的 Extended Resource 数值,该部分资源可以被声明使用 Extended Resource 的 Job/CronJob 使用。
四、安装组件
1. 登录 容器服务控制台,选择左侧导航栏中的集群。
2. 在集群管理页面单击目标集群 ID,进入集群详情页。
3. 选择左侧菜单栏中的组件管理,进入组件列表页面。
4. 在组件列表页面中选择新建,并在新建组件页面中勾选 QoS Agent。
5. 单击完成即可安装组件。
五、部署可抢占式 Job
1. 登录 容器服务控制台,选择左侧导航栏中的集群。
2. 在集群管理页面单击目标集群 ID,进入集群详情页。
3. 选择工作负载 > Job/CronJob,在 Job/CronJob 资源列表页面,单击新建。
4. 在新建组件页面中开启可抢占功能。如下:
开启可抢占的能力之后,Job/CronJob 的资源输入方式发生了变化,无需输入 Request/Limit 变为了 Extended CPU 和 Extended 内存:
·Extended CPU:申请原生节点中的空闲 CPU 资源。Extended CPU 限制只能是整数。
·Extended 内存:申请原生节点中的空闲内存资源。Extended 内存限制只能是整数。如下:
5. 通过声明使用 Extended Resource 的闲置资源创建出来的可抢占类型的 Job:
注意:若你没有原生节点,或原生节点没有足够多的闲置资源,则可能有如下报错:"Insufficient gocrane.io/memory",表示没有足够的闲置内存资源;如果是"Insufficient gocrane.io/cpu",表示没有足够的闲置 CPU 资源。此时需要增加 原生节点 数量。
报错信息如下: