优先级

Koordinator 在 Kubernetes 优先级类型的基础上定义了一套规范,并扩展了优先级的一个维度以对混部场景的细粒度支持。

定义

优先级用数字表示,目前定义了四个类:

PriorityClass优先级范围描述
koord-prod[9000, 9999]需要提前规划资源配额,并且保证在配额内成功。
koord-mid[7000, 7999]需要提前规划资源配额,并且保证在配额内成功。
koord-batch[5000, 5999]需要提前规划资源配额,一般允许借用配额。
koord-free[3000, 3999]不保证资源配额,可分配的资源总量取决于集群的总闲置资源。

PriorityClass 目前留有一些暂未使用的区间,以支持未来可能的扩展。

约束

Koordinator 将不同类型的工作负载匹配到不同的优先级:

  • koord-prod,运行典型的延迟敏感型服务,一般是指需要 “实时 “响应的服务类型,比如通过点击移动APP中的按钮调用的典型服务。
  • koord-mid,对应于长周期的可用资源,一般用于运行一些实时计算、人工智能训练任务/作业,如 tensorflow/pytorch 等。
  • koord-batch,对应于的短周期可用资源,运行典型的离线批处理作业,一般指离线分析类作业,如日级大数据报告、非交互式 SQL 查询。
  • koord-free,运行低优先级的离线批处理作业,一般指不做资源预算,利用闲置资源尽量完成,如开发人员为测试目提交的作业。

Koordinator 优先级与 Kubernetes优先级的对比

Koordinator 在 Kubernetes 集群中部署时会初始化这四个 PriorityClass。

  1. apiVersion: scheduling.k8s.io/v1
  2. kind: PriorityClass
  3. metadata:
  4. name: koord-prod
  5. value: 9000
  6. description: "This priority class should be used for prod service pods only."
  7. ---
  8. apiVersion: scheduling.k8s.io/v1
  9. kind: PriorityClass
  10. metadata:
  11. name: koord-mid
  12. value: 7000
  13. description: "This priority class should be used for mid service pods only."
  14. ---
  15. apiVersion: scheduling.k8s.io/v1
  16. kind: PriorityClass
  17. metadata:
  18. name: koord-batch
  19. value: 5000
  20. description: "This priority class should be used for batch service pods only."
  21. ---
  22. apiVersion: scheduling.k8s.io/v1
  23. kind: PriorityClass
  24. metadata:
  25. name: koord-free
  26. value: 3000
  27. description: "This priority class should be used for free service pods only."

在每个 PriorityClass 内,Koordinator 允许用户为精细化资源调度设置混部 Pod 的优先级。

示例

下面的 YAML 是一个 Pod 配置的例子,它使用了前面例子中创建的 PriorityClass 和优先级。

  1. apiVersion: v1
  2. kind: Pod
  3. metadata:
  4. name: nginx
  5. labels:
  6. env: test
  7. koordinator.sh/priority: "5300"
  8. spec:
  9. containers:
  10. - name: nginx
  11. image: nginx
  12. imagePullPolicy: IfNotPresent
  13. priorityClassName: koord-batch

下一步是什么

以下是推荐下一步阅读的内容: