K8S中的优先级

  • 优先级是什么?

    • 优先级代表一个Pod相对其他Pod的重要性
  • 优先级有什么用

    • 优先级可以保证重要的Pod被调用运行
  • 如何使用优先级和抢占

    • 配置优先级类PriorityClass

    • 创建Pod是为其设置对应的优先级

  • PriorityClass

    • PriorityClass是一个全局资源对象,它定义了从优先级类名称到优先级整数值的映射。优先级在values字段中指定,可以设置小于10亿的整数值,值越大,优先级越高
  • PriorityClass还有两个可选字段:

    1. globalDefault:用于设置默认优先级状态,如果没有任何优先级设置,Pod的优先级为零

    2. description:用来配置描述性信息,告诉用户优先级的用途

  • 优先级策略

    1. 非抢占优先:指的是在调度阶段优先进行调度分配,一旦容器调度完成就不可以抢占,资源不足时,只能等待 ,对应 preemptionPolicy: Never

    2. 抢占优先:强制调度一个Pod,如果资源不足无法被调度,调度程序会抢占(删除 )较低优先级的Pod的资源,来保证高优先级Pod的运行,对应 preemptionPolicy: PreemptLowerPriority

Pod优先级

案例演示

创建定义优先级文件

vim priotity.yml

执行 :kubectl apply -f priotity.yml

创建无优先级的 Pod:vim pod1.yml

执行:kubectl apply -f pod1.yml

创建低优先级 Pod :vim pod2.yml

执行:kubectl apply -f pod2.yml

创建高优先级 Pod:vim pod3.yml

执行: kubectl apply -f pod3.yml

因为资源不够,无妨强制在node2节点继续创建超出资源的pod

创建两个默认抢占会发生什么

vim preemt.yml

查看抢占优先级:kubectl get priorityclasses.scheduling.k8s.io

vim pod1.yml

kubectl apply -f pod3.yml

vim pod2.yml​​​​​​​

kubectl apply -f pod3.yml

vim pod3.yml

kubectl apply -f pod3.yml

查看pod: kubectl get po

新版本不再能抢占

QoS 等级 资源配置规则(requests/limits) 优先级 驱逐顺序
Guaranteed 所有容器CPU/内存 requests=limits 都配置 最高 最后杀
Burstable 至少配了一项requests/limits,不满足Guaranteed 中等 中间杀
BestEffort 所有容器都不配 requests、limits 最低 最先杀
  • requests :Pod 申请最少需要多少资源(调度用,节点剩余资源够 requests 才会调度)

  • limits :Pod 允许使用最大资源上限(超了会被限流/杀掉)

节点优先级

在 Kubernetes 中,节点优先级(Node Priority)是用于指定节点的调度权重的设置。节点优先级主要用于调度器在选择节点时进行权衡和做出选择。

优先级类型

1、静态优先级(Static Priority)

可以手动为每个节点设置一个固定的优先级值。在节点对象的注解(Annotations)中使用 scheduler.alpha.kubernetes.io/priority 注解来定义节点的优先级。较高的优先级值表示节点的优先级较高。

2、亲和性优先级(Affinity Priority)

可以通过节点的亲和性(Affinity)设置来隐式地设置节点的优先级。优先级是根据亲和性规则和节点的亲和性权重(weight)来计算的。

3、服务质量优先级(Quality of Service Priority)

可以通过指定 Pod 的服务质量等级(Quality of Service Class)来设置节点的优先级。服务质量等级包括 Guaranteed、Burstable、BestEffort。较高的服务质量等级对应较高的优先级。

4、插件优先级(Plugin Priority)

可以编写插件来扩展调度器的功能,并为节点设置一些额外的优先级规则。

调度器在进行节点选择时,会根据节点的优先级进行权衡,优先选择具有较高优先级的节点。如果存在多个节点具有相同的优先级,则会根据其它因素(例如节点资源、亲和性规则等)进一步进行选择

静态优先级案例

kubectl annotate node node-new-1 scheduler.alpha.kubernetes.io/priority=100

kubectl annotate node node-new-2 scheduler.alpha.kubernetes.io/priority=100

kubectl annotate node node-old scheduler.alpha.kubernetes.io/priority=50

现在有一个大数据处理的Pod,需要大量的CPU和内存资源。当调度器调度这个Pod时,会首先考虑node-new-1node-new-2这两个优先级为100的节点,因为它们的优先级高于node-old(优先级为50)。只有当新硬件节点资源不足或者不符合其他调度规则(如亲和性规则)时,调度器才会考虑node-old

删除注解 kubectl annotate node node-old scheduler.alpha.kubernetes.io/priority-

亲和性优先级案例

kubectl label node node-1 zone=zone-a

kubectl label node node-2 zone=zone-a

kubectl label node node-3 zone=zone-b

当调度data-app-pod时,调度器首先会过滤出zone-a的节点(node-1node-2),因为有硬亲和性要求。然后,根据亲和性优先级的权重计算,node-1因为权重为80,会比node-2(权重为40)更有可能被选中。

相关推荐
张忠琳35 分钟前
【kubernetes v1.21】(controller-manager part 1)kube-controller-manager 核心架构与启动流程
云原生·架构·kubernetes
qq_452396231 小时前
第十五篇:《Docker 与 Kubernetes 集成:从 Swarm 到 K8s 的迁移》
docker·容器·kubernetes
HackTwoHub2 小时前
K8s综合渗透测试工具,集成信息搜集、权限逃逸、横向移动,一站式搞定全流程渗透测试工作
人工智能·安全·web安全·云原生·容器·kubernetes·系统安全
做个文艺程序员2 小时前
第05篇:K8s CI/CD 全流程:GitOps × ArgoCD × Harbor——Java SaaS 从代码提交到生产部署一键直达
ci/cd·kubernetes·argocd
人工智能培训2 小时前
数字孪生建模常用方式有哪些?
人工智能·深度学习·机器学习·容器·知识图谱
lpfasd1232 小时前
docker中默认网络的作用和注意事项
网络·docker·容器
IT策士2 小时前
第 37 篇 k8s之调度进阶:亲和性、污点与容忍
云原生·容器·kubernetes
EntyIU2 小时前
DOCKER_CHEATSHEET
运维·docker·容器
SilentSamsara3 小时前
Python 与 Docker:多阶段构建、最小镜像与健康检查
运维·开发语言·python·docker·中间件·容器
小猿姐3 小时前
三种 MongoDB Operator 实测对比:Community、Percona 与 KubeBlocks,谁更适合团队落地?
运维·mongodb·kubernetes