对于运行各种负载(如Service、Job)的中等规模或者大规模的集群来说,出于各种原因,我们需要尽可能提高集群的资源利用率。而提高资源利用率的常规做法是采用优先级方案,即不同类型的负载对应不同的优先级,同时允许集群中的所有负载所需的资源总量超过集群可提供的资源,在这种情况下,当发生资源不足的情况时,系统可以选择释放一些不重要的负载(优先级最低的),保障最重要的负载能够获取足够的资源稳定运行。
priorityClassName
通常需要你自行创建不同等级的 PriorityClass
,以便为不同的应用场景或工作负载分配合适的优先级。在 Kubernetes 默认配置中,只提供一个默认的 PriorityClass
(system-cluster-critical
和 system-node-critical
),这些默认的优先级通常用于 Kubernetes 内部核心组件(如 kube-apiserver、kube-dns 等)。
一、为什么需要自定义 PriorityClass?
- 区分不同重要性的工作负载:
- 核心业务(如生产环境的应用)通常需要更高的优先级。
- 非核心任务(如批处理、测试任务)可以分配较低优先级。
- 确保关键服务的可用性:
- 在资源紧张或发生抢占时,确保关键服务优先获得资源。
- 优化资源使用:
- 合理规划不同优先级的应用,避免资源被不重要的任务占用。
二、创建不同等级的 PriorityClass
以下是常见的三种优先级等级示例:
1. 高优先级:核心业务
apiVersion: scheduling.k8s.io/v1
kind: PriorityClass
metadata: