K8s学习----PriorityClass优先级类
在 Kubernetes 集群中,当资源存在竞争时,如何确保核心系统组件和关键业务优先获得资源?
PriorityClass 作为 Kubernetes 调度系统的 “优先级标签”,通过定义 Pod 的相对重要性及资源抢占机制,为这一问题提供了标准化解决方案。
一、PriorityClass 的核心定位与核心特性
1. 本质定义
PriorityClass 是 Kubernetes 中的集群级非命名空间资源,用于为 Pod 分配 “优先级数值”,数值越高表示 Pod 重要性越高。当集群资源不足时,调度器会依据 PriorityClass 决定 “优先调度哪些 Pod”,以及 “优先终止哪些 Pod 以释放资源”,避免核心服务因资源短缺被意外中断。
2. 关键特性
-
集群级可见性:PriorityClass 不归属任何命名空间,在整个集群内可见,所有命名空间的 Pod 均可引用,适合统一管理跨环境的资源优先级策略。
-
数值优先级体系:优先级数值范围通常为 0 - 10000000(1000 万),建议:
-
系统核心组件(如 etcd、kube-apiserver)优先级 ≥ 1000000(100 万);
-
关键业务应用优先级不超过 5000000(500 万);
-
后台非关键任务(如数据导出、日志归档)优先级可设为 100000(10 万)以下。
-
-
非配额机制:PriorityClass 仅定义 “优先级顺序”,不替代 ResourceQuota 的资源限制功能,无法保证高优先级 Pod 一定能获得资源,需与资源配额配合使用以实现精细化管控。
二、PriorityClass 的配置与分类实践
1. 核心配置结构
PriorityClass 的 YAML 配置包含三个核心字段:
-
value:优先级数值(必填),决定 Pod 相对重要性; -
name:PriorityClass 名称(必填),供 Pod 引用; -
description:描述信息(可选),用于说明该优先级的适用场景,提升可维护性。
2. 三类典型 PriorityClass 配置示例
定义三组优先级,分别对应核心系统、关键业务、后台任务,配置如下:
yaml
# 1. 核心系统组件(必须保证运行,优先级最高)
apiVersion: scheduling.k8s.io/v1
kind: PriorityClass
metadata:
name: sys-essential
description: "核心系统组件,必须保证运行"
value: 10000000 # 1000万,系统级优先级
# 2. 关键业务应用(高优先级,保障业务连续性)
apiVersion: scheduling.k8s.io/v1
kind: PriorityClass
metadata:
name: business-critical
description: "关键业务应用"
value: 8000000 # 800万,业务级优先级
# 3. 后台非关键任务(低优先级,资源不足时可终止)
apiVersion: scheduling.k8s.io/v1
kind: PriorityClass
metadata:
name: best-effort
description: "尽力而为的后台任务"
value: 100000 # 10万,任务级优先级
3. Pod 引用 PriorityClass
Pod 通过 spec.priorityClassName 字段引用已创建的 PriorityClass,示例如下(关键业务应用 Pod):
yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: order-service # 订单服务(关键业务)
spec:
replicas: 2
selector:
matchLabels:
app: order-service
template:
metadata:
labels:
app: order-service
spec:
priorityClassName: business-critical # 引用关键业务优先级
containers:
- name: order-processor
image: nginx
resources:
requests:
cpu: "800m" # 申请0.8核CPU
memory: "500Mi" # 申请500Mi内存
limits:
cpu: "800m"
memory: "500Mi"
三、PriorityClass 的实践注意事项
使用 PriorityClass 时需规避以下常见问题:
-
避免 “优先级倒挂”:不要为非核心组件设置过高优先级(如后台任务设为 1000 万),否则可能导致系统组件因资源被抢占而故障;
-
配合资源请求配置:所有引用 PriorityClass 的 Pod 必须设置
resources.requests(CPU / 内存),否则调度器无法计算资源需求,可能导致抢占逻辑失效; -
监控抢占事件:通过
kubectl get events --field-selector involvedObject.kind=Pod查看资源抢占事件,及时发现异常抢占(如关键业务被意外终止); -
清理无用优先级:实验或业务下线后,需通过
kubectl delete priorityclass <name>删除无用 PriorityClass,避免冗余配置干扰调度。
总结
PriorityClass 是 Kubernetes 构建 “生产级高可用集群” 的关键组件,其核心价值在于通过 “数值优先级 + 资源抢占” 机制,保障核心系统与关键业务的资源优先性。掌握 PriorityClass 的配置与抢占逻辑,能有效提升集群在资源竞争场景下的稳定性。
更多推荐




所有评论(0)