• pod服务质量类别


    读书笔记

    kubernetes允许节点的pod对象过载使用资源,意味着节点无法同时满足绑定其上的所有pod以资源满载的方式运行。
    内存紧缺情况下,按照什么次序终止pod对象成为问题。

    kubernetes本身无法做出决策,要借助pod对象的服务质量和优先级完成判定。

    根据pod对象的requests和limits属性,kubernetes将pod对象归类为BestEffort,Burstable,Guaranteed三个服务质量类别(Quality of Service,Qos)

    • Guaranteed: Pod对象为其每个容器都设置CPU资源需求request和资源限制limit,且二者值相同;同时为每个容器都设置了内存资源需求和资源限制,且二者具有相同值。这类pod对象具有最高级别服务质量
    • Burstable:至少有一个容器设置了CPU或内存资源的reqeusts属性,不满足Guaranteed类别的设定要求,这类pod对象具有中等级别服务质量
    • BestEffort:不为任何一个容器设置requests或limits属性,这类pod对象克获得的服务质量为最低级别。

    内存资源紧缺时,besteffort类别容器将首先被终止,因为系统不提供任何级别的资源保证,好处是:它们能够尽可能多的占用资源。

    若系统上不存在其他BestEffort类型的容器时,轮到Burstable类别的pod被终止。Guaranteed类别的容器拥有最高优先级,不会被杀死,除非其内存资源需求超限,或者OOM时没有其他更低优先级的Pod对象存在。

    每个status为running的pod都有OOM评分,评分越高越先被杀死。OOM评分计算的两个维度:

    1. 由服务质量类别继承而来的默认分值
    2. 容器的可用内存资源比例

    同等类别的pod默认分值相同,各种类别pod对象的OOM调节(Adjust)分值定义如下

    • Guaranteed类别pod资源Adjust分值为-998
    • BestEffort类别默认分值为1000
    • Buratable类别pod的Adjust分值由算法计算得出

    同级别优先级的pod资源在OOM时,与自身的request属性相比,内存占用比例最大的pod对象会先被杀死。

    ex:两个pod的优先级级别相同, pod A 当前内存占用比例 与requests值相比为95%,pod B 内存占用比例为80%,pod A先于pod B被kill。

    参考:

    Kubernetes进阶实战第二版 马永亮
    https://kubernetes.io/zh-cn/docs/tasks/configure-pod-container/quality-service-pod/
    https://github.com/kubernetes/kubernetes/blob/master/pkg/kubelet/qos/policy.go

  • 相关阅读:
    简化转换器:使用您理解的单词进行最先进的 NLP — 第 1 部分 — 输入
    FreeRTOS教程10 低功耗
    【docker】iptables实现NAT
    家族小程序:连接亲情的技术纽带
    Visual Studio插件CodeRush正式发布v22.1——优化调试可视化工具
    mysql中自定义变量(浅显易懂简洁版)
    MySQL面试题
    Vue项目build打包编译后如何再修改后台请求地址
    Qt+ECharts开发笔记(一):ECharts介绍、下载和Qt调用ECharts基础柱状图Demo
    Go 语言搭建个人博客(qiucode.cn 重构篇 三)
  • 原文地址:https://blog.csdn.net/qq_43652666/article/details/133578644