当前位置: 首页 > news >正文

K8s优先级调度实战:创建高优先级类

K8s 优先级调度实践:创建 high-priority PriorityClass 并配置 Deployment

在 Kubernetes 集群中,优先级调度是保障关键工作负载资源分配的核心能力 —— 通过 PriorityClass 定义 Pod 的优先级,高优先级 Pod 会优先获得调度权,资源不足时低优先级 Pod 会被驱逐,从而确保核心业务稳定运行。本文将结合实操任务,详解如何创建自定义 PriorityClass 并配置 Deployment,帮你掌握 K8s 优先级调度的核心流程。

一、前置知识:理解 PriorityClass

在动手前,先明确 PriorityClass 的核心概念,避免操作踩坑:

1. 什么是 PriorityClass?

PriorityClass 是 K8s 的 “优先级模板”,属于集群级资源(非命名空间隔离),用于定义 Pod 的优先级数值(value)。Pod 通过spec.priorityClassName关联 PriorityClass 后,会继承其优先级,参与调度排序。

2. 关键字段解析

创建 PriorityClass 需关注 4 个核心字段:

字段

含义

apiVersion

固定为scheduling.k8s.io/v1(K8s 1.14 + 版本稳定)

metadata.name

PriorityClass 的名称(需唯一,如high-priority)

value

优先级数值(整数,数值越高优先级越高,范围建议 0~1e9,避免与系统冲突)

globalDefault

是否作为未指定优先级 Pod 的默认值(建议设为false,避免意外影响)

description

优先级用途说明(便于运维理解)

3. 系统与用户定义的 PriorityClass 区别

K8s 默认内置 2 个高优先级类,用于保障集群核心组件运行,用户定义的优先级需避开其数值范围

  • system-node-critical:value=2000001000(节点关键组件,如 kubelet)
  • system-cluster-critical:value=2000000000(集群关键组件,如 kube-dns)

二、任务实操步骤

本次任务目标:创建high-priority优先级类(值为现有用户最高优先级 - 1),并配置priority命名空间下的busybox-logger Deployment。

步骤 1:查看现有 PriorityClass,确定 high-priority 的 value

首先需筛选用户定义的 PriorityClass(排除系统默认的system-*),找到最高优先级数值:

1.1 查看所有 PriorityClass
kubectl get priorityclasses.scheduling.k8s.io -o wide# 简称"pc",可简化命令:kubectl get pc -o wide
1.2 筛选用户定义的最高优先级

通过jsonpath提取名称与数值,排除系统类并按数值倒序排序,取第一行(最高优先级):

# 命令含义:提取所有PC的名称+数值 → 排除system开头 → 按数值倒序 → 取第一行kubectl get pc -o jsonpath='{range .items[*]}{.metadata.name}{"\t"}{.value}{"\n"}{end}' \| grep -v "system-" \| sort -k2 -nr \| head -n1
1.3 计算 high-priority 的 value

假设上一步输出为user-highest-pc 1000(即现有最高用户优先级为 1000),则:

high-priority的value = 1000 - 1 = 999

若没有用户定义的 PriorityClass:直接设一个合理值(如 1000),确保低于系统默认的 2e9 即可。

步骤 2:创建 high-priority PriorityClass

通过 YAML 文件定义优先级类,便于版本控制与复用:

2.1 编写 YAML 文件(high-priority-pc.yaml)
apiVersion: scheduling.k8s.io/v1kind: PriorityClassmetadata:name: high-priority # 优先级类名称,需与后续Deployment配置一致value: 999 # 替换为步骤1.3计算的数值(如现有最高1000,则填999)globalDefault: false # 禁用默认值,避免影响其他Poddescription: "This priority class is for high-priority user workloads, with value 1 less than the highest existing user-defined priority class."
2.2 应用 YAML 创建 PriorityClass
kubectl apply -f high-priority-pc.yaml
2.3 验证创建结果
kubectl get pc high-priority# 预期输出(确认名称、value、globalDefault正确):NAME VALUE GLOBAL-DEFAULT AGEhigh-priority 999 false 15s

步骤 3:修改 priority 命名空间下的 busybox-logger Deployment

Deployment 的优先级配置需在Pod 模板(spec.template.spec)中添加priorityClassName,修改后会触发滚动更新(新 Pod 用新优先级,旧 Pod 逐步删除)。

方法 1:kubectl edit 直接编辑(可视化)
# 编辑priority命名空间下的busybox-logger Deploymentkubectl edit deployment busybox-logger -n priority

在打开的编辑器中,找到spec.template.spec节点,添加priorityClassName: high-priority:

spec:template:spec:priorityClassName: high-priority # 新增此行,关联high-prioritycontainers:- name: busybox-loggerimage: busybox:1.35 # 示例镜像,以实际为准# ... 其他容器配置

保存退出后,K8s 会自动触发滚动更新。

方法 2:kubectl patch 快速修改(脚本化)

若需批量操作或脚本集成,用patch命令直接修改:

kubectl patch deployment busybox-logger -n priority \--patch '{"spec":{"template":{"spec":{"priorityClassName":"high-priority"}}}'
注意:避免修改其他 Deployment

先确认priority命名空间下的 Deployment 列表,仅操作busybox-logger:

kubectl get deploy -n priority# 仅关注NAME为busybox-logger的资源

步骤 4:验证 Deployment 部署成功

修改后需确认 3 个关键点:滚动更新完成、Pod 正常运行、优先级类已生效。

4.1 检查滚动更新状态
kubectl rollout status deployment busybox-logger -n priority# 预期输出:deployment "busybox-logger" successfully rolled out(更新完成)
4.2 查看新 Pod 状态
# 查看priority命名空间下busybox-logger的Pod(标签以实际为准,通常是app=busybox-logger)kubectl get pods -n priority -l app=busybox-logger# 预期输出:STATUS为Running(无Pending或Error)
4.3 验证 Pod 的优先级类

提取 Pod 的priorityClassName字段,确认已关联high-priority:

# 替换<POD-NAME>为上一步查询到的Pod名称kubectl get pod <POD-NAME> -n priority -o jsonpath='{.spec.priorityClassName}{"\n"}'# 预期输出:high-priority(优先级类已生效)

三、关键注意事项

  1. 避开系统优先级数值:用户定义的value建议≤1e9(1000000000),避免与system-*类冲突,导致系统组件调度异常。
  1. globalDefault 禁用:若设为true,所有未指定优先级的 Pod 会默认使用high-priority,可能抢占低优先级业务资源,风险极高。
  1. 滚动更新兼容性:修改 Pod 模板会重建 Pod,若业务不可中断,需提前配置 Deployment 的滚动策略(如maxUnavailable: 0、minReadySeconds: 30)。
  1. 资源充足性检查:若新 Pod 处于 Pending 状态,用kubectl describe pod <POD-NAME> -n priority查看事件,通常是资源不足(需扩容节点或调整资源请求)。

四、总结

K8s 优先级调度的核心是通过 PriorityClass 实现 “资源按需分配”,本次任务的核心流程可归纳为:

  1. :筛选现有用户优先级,确定新优先级数值;
  1. :通过 YAML 创建自定义 PriorityClass;
  1. :修改 Deployment 的 Pod 模板,关联新优先级;
  1. :确认更新完成与优先级生效。

在实际生产中,需结合业务重要性划分优先级层级(如高 / 中 / 低),并通过 Prometheus 监控高优先级 Pod 的调度成功率,确保核心业务稳定运行。

http://www.dtcms.com/a/423337.html

相关文章:

  • 爱站网关键词长尾挖掘工具pc端网站转手机站怎么做
  • 微信小程序的获取当前位置--步骤
  • Mac OS远程执行Shell命令技巧
  • 传媒公司网站设计方案班级网站建设的参考文献
  • 使用python技术获取淘宝商品信息应注意规避哪些风险?
  • 早晨网站建设两当网站建设
  • 网站建设定制开发推广网站一年域名费用多少钱
  • 与主机安全息息相关的EDR
  • Next.js项目演示(从零创建Next.js项目)Next.js入门实战
  • 将x减到0的最小操作数
  • wordpress小说站群齐鲁人才网泰安
  • 主机安全(核心目标、关键领域和最佳实践)
  • 在线生成固定悬浮导航的工具网站wordpress主题 搜索引擎
  • 【Linux系统】—— 环境变量
  • cors跨域问题解决
  • 【网络安全】四、中级篇:SQL注入详解
  • Ceph 分布式存储学习笔记(二):池管理、认证和授权管理与集群配置(下)
  • 网站做百科四川网络推广平台
  • 沈阳做网站的公司jsp做网站de后台管理
  • 驻马店网站开发公司电话管理咨询案例
  • MTK调试-马达
  • 深入探讨Spring Boot项目的构建与部署(指南三)
  • 曲靖网站推广做个什么样的网站
  • Vue3新变化
  • 共识算法的深度探索:从原理到实践的全面指南
  • 微算法科技(NASDAQ: MLGO)研发基于 DPoS 框架的 DL-DPoS(深度链接委托权益证明)机制,增强区块链的共识算法
  • 关于git 或者码云,初始化本地仓库以及把本地仓库与远程仓库关联
  • 私有化部署知识库
  • 济南做外贸网站动漫设计专业是什么
  • 安卓开发---写项目的注意事项