koordinator-sh / koordinator

A QoS-based scheduling system brings optimal layout and status to workloads such as microservices, web services, big data jobs, AI jobs, etc.
https://koordinator.sh
Apache License 2.0
1.3k stars 321 forks source link

[question]reservation对象和namespace配额疑问 #2108

Open zj619 opened 2 months ago

zj619 commented 2 months ago

What happened: 在namespace huang中设置限额为request和limit都为1核1Gi,然后创建3个资源预留对象,每个资源预留对象request和limit都为500m 和800Mi,申请出来3个reservation对象都是RUNNING,结果符合预期吗? 问题1、reservation对象变成avaliable就是占住了资源吗? 问题2、资源预留对象和namespace配额有无关系?

image

------------------------------------quota.yaml-------------------------------------------------------------- apiVersion: v1 kind: ResourceQuota metadata: name: huang-quota namespace: huang spec: hard: requests.cpu: "1" requests.memory: "1Gi" limits.cpu: "1" limits.memory: "1Gi"

--------------------------------------------reservation-demo.yaml---------------------------- apiVersion: scheduling.koordinator.sh/v1alpha1 kind: Reservation metadata: name: reservation-huang spec: allocateOnce: false template: # set resource requirements namespace: huang spec: containers:

--------------------------------------------reservation-demo2.yaml---------------------------------------- apiVersion: scheduling.koordinator.sh/v1alpha1 kind: Reservation metadata: name: reservation-huang spec: allocateOnce: false template: # set resource requirements namespace: huang spec: containers:

-------------------------------------------------reservation-demo3.yaml---------------------------------------------------- apiVersion: scheduling.koordinator.sh/v1alpha1 kind: Reservation metadata: name: reservation-huang2 spec: allocateOnce: false template: # set resource requirements namespace: huang spec: containers:

[root@kde-offline3 huang]# ls quota.yaml reservation-demo2.yaml reservation-demo3.yaml reservation-demo.yaml [root@kde-offline3 huang]# cat reservation-demo3.yaml apiVersion: scheduling.koordinator.sh/v1alpha1 kind: Reservation metadata: name: reservation-huang3 spec: allocateOnce: false template: # set resource requirements namespace: huang spec: containers:

What you expected to happen:

Environment:

Anything else we need to know:

saintube commented 2 months ago

@zj619 Reservation 对象是 non-namespaced,不过它在调度器内的 fake pod 是依据 template 生成的,可以填写 namespace,从而生效一些 namespace 维度的调度功能。针对你的问题,这里有2点需要注意下:

  1. reservation.spec.template 中的 namespace 填写有误,namespace 字段需要填写在 metadata 字段下。因为 reservation CRD 设置了不会强校验字段合法,因此你这里错误的 namespace 最终也可以提交成功,但实际生产的 fake pod 不会生效指定的 namespace。
  2. reservation 通过生成 fake pod 在调度流程里预留资源,但 fake pod 对外部组件是不可见的,所以 webhook 等流程默认不会处理 reservation。