K8S容器调度优先级误设导致集群雪崩踩坑记录
admin
2023-03-28 17:01:25
0

        今天上班的时候,突然收到集群很多容器调度失败的告警,大致如下;

K8S容器调度优先级误设导致集群雪崩踩坑记录

        

        看到大量容器调度失败,里面查了下管理平台,看看这个时间段内有没有哪个业务发布,果然发现有一个转码服务(CPU消耗性)的业务在这个时间点发布了一批任务。但这批任务发布为什么会导致出现一堆任务调度失败呢?

        紧接着我们抽查了几个告警的容器,发现这些容器状态都处于proeempted (抢占)状态,原因只能是有更高优先级的pod调度到这台node节点,把上面原有的pod 排挤走。但是刚刚发布的这个业务并没有设置容器调度优先级,为什么会比其他容器优先级高呢?


K8S容器调度优先级误设导致集群雪崩踩坑记录


        经排查是因为同事在管理平台上调整了容器默认优先级,由原来的默认低优先级修改成高优先级,具体背景是这样:

        前几天有业务反馈他们的业务跑着跑着突然容器挂掉了,最后发现是因为调度了高优先级容器过去导致原本低优先级pod被排挤走。业务方同事觉得这个策略不靠谱,如果大家上来都选择最高优先级,那所有人优先级都一样了,他们建议默认策略改成最高优先级,允许业务按需将优先级调低,优先级低的容器在最后做成本分摊的时候适当打折,于是容器组同事将管理平台上面的容器调度默认优先级修改为最高优先级。


同事将PriotityClasses 中highest-priority 的 globalDefault 设置成了true,也就是说默认所有新调度的容器都将是最高优先级。

查看 PriorityClasses 配置

apiVersion: scheduling.k8s.io/v1beta1

kind: PriorityClass

metadata:

name: highest-priority

value: 400

globalDefault: true


官网上关于priorityClass 做了以下解释

        The globalDefault field indicates that the value of this PriorityClass should be used for Pods without a priorityClassName. Only one PriorityClass with globalDefault set to true can exist in the system. If there is no PriorityClass with globalDefault set, the priority of Pods with no priorityClassName is zero.


        PriorityClass 还有两个可选的字段:globalDefault 和 description。globalDefault 表示 PriorityClass 的值应该给那些没有设置 PriorityClassName 的 Pod 使用。整个系统只能存在一个 globalDefault 设置为 true 的 PriorityClass。如果没有任何 globalDefault 为 true 的 PriorityClass 存在,那么,那些没有设置 PriorityClassName 的 Pod 的优先级将为 0。


注意

1、If you upgrade your existing cluster and enable this feature, the priority of your existing Pods is effectively zero.

如果您升级已经存在的集群环境,并且启用了该功能,那么,那些已经存在系统里面的 Pod 的优先级将会设置为 0。


2、Addition of a PriorityClass with globalDefault set to true does not change the priorities of existing Pods. The value of such a PriorityClass is used only for Pods created after the PriorityClass is added.

将一个 PriorityClass 的 globalDefault 设置为 true,不会改变系统中已经存在的 Pod 的优先级。也就是说,PriorityClass 的值只能用于在 PriorityClass 添加之后创建的那些 Pod 当中。


        也就是说priorityClass 中的globalDefault 设为true的话,只针对后续发布的Pod生效,已发布的Pod优先级仍为0

        今天早上遇到的问题是集群中一台机器宕机,然后上面所有的pod 都重新调度到其他机器,这些重新调度的Pod拥有最高优先级,当这批容器调度到其他node节点后就会把该节点上面原有的低优先级Pod排挤走。然后这些被排挤走的Pod 又拥有最高优先级调度到其他node节点,又把另外一台节点上面的Pod挤走,最终造成整个集群雪崩(全部容器重启了一遍)。


总结:

1、将 priorityClass 中 globalDefault 设置为false 并通过前端默认设置最高优先级

在Pod中指定默认优先级而不是通过globalDefault指定

K8S容器调度优先级误设导致集群雪崩踩坑记录


2、关注集群资源使用情况,资源不足时应及时扩容,至少保证集群中挂掉2,3台node节点后,上面承载的容器能够漂移到其他剩下的node节点上。



相关内容

热门资讯

特朗普下令不打了,美国的“余粮... 可以说戛然而止,快得让很多人都无法适应。前两周,每一天美国都要打击伊朗一通。就在7月24日白宫会议前...
穆杰塔巴最新表态:支持黎真主党 △伊朗最高领袖穆杰塔巴·哈梅内伊(资料图)当地时间7月26日晚,伊朗最高领袖穆杰塔巴·哈梅内伊对黎巴...
美军瘫痪一艘驶向伊朗的油轮,特... 美国总统特朗普虽下令暂停打击伊朗,但美军仍在执行对霍尔木兹海峡的封锁任务。针对美军瘫痪一艘驶向伊朗油...
“小牌大耍”的底气到底是哪里来... 澎湃首席评论员 李平这两天,“艺人李权哲乘高铁占座事件”在网上引发热议,该艺人参加的活动主办方曾发布...
越南籍船舶南海遇险沉没,中方已... 据凤凰卫视报道,一艘越南船舶7月24日夜间在越南庆和以东220海里附近遇险沉没,船上共62名越南籍人...
李权哲占座、蒙面、装死:娱乐圈... 你买了一张高铁一等座的票,找到自己的位置,18A。有人坐着。你拿出手机看了眼购票记录——没错,18A...
杭州景区咖啡店闯入1条幼蛇,仅... 夏天气温高、湿度大,蛇类活动进入高峰期,千万别被“小蛇无害”的刻板印象骗了!有些幼蛇看着迷你可爱,实...
AI开源公开信签署企业增至50... IT之家 7 月 26 日消息,英伟达、微软、IBM、Meta 等 25 家美国科技企业本周(7 月...
南阳快手短视频代运营企业的服务... 在短视频平台快速发展的背景下,企业通过快手等渠道进行内容运营已成为常见的市场动作。对于希望借助短视频...
普通人该如何跟上科技发展的步伐 这个被称作科技的词汇, 听起来既有宏大之感, 又颇为遥远, 好似仅仅归属于在实验室里专心致志钻研的科...