优先级
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
下一步是什么
以下是推荐下一步阅读的内容:
