K8S的服务质量QoS —— 筑梦之路

news/2024/10/17 19:25:20/

K8S中的应用服务质量(QoS)介绍

服务质量(QoS)类是Kubernetes的概念,它确定Pod的调度和驱逐优先级

Kubelet使用它来管理驱逐pod的顺序,以及使用高级CPU管理策略允许更复杂的pod调度决策。

QoS由Kubernetes本身分配给Pod。但是,DevOps可以通过处理Pod内各个容器的资源请求和限制来控制分配给容器的QoS类。

QoS级别分类

  • Guaranteed:POD中所有容器(包含初始化容器)都必须统一设置了limits,并且设置参数都一致;

  • Burstable:POD中有容器设置了 内存 或 CPU request;

  • BestEffort:POD中的所有容器都没有指定CPU和内存的requests和limits;

Guaranteed
对于 QoS 类为 Guaranteed 的 Pod:Pod 中的每个容器,包含初始化容器,必须指定内存 请求和 内存 限制,并且两者要相等。Pod 中的每个容器,包含初始化容器,必须指定 CPU 请求和 CPU 限制,并且两者要相等。举例:
apiVersion: v1
kind: Pod
metadata:
name: qos-demo
spec:
containers:
- name: qos-demoimage: nginxresources:limits:memory: "500Mi"cpu: "700m"requests:memory: "500Mi"cpu: "700m"注意点:如果容器指定了自己的内存limits,但没有指定内存requests,Kubernetes 会自动为它指定与内存limits匹配的内存requests。 同样,如果容器指定了自己的 CPU limits,但没有指定 CPU requests,Kubernetes 会自动为它指定与 CPU limits匹配的 CPU requests;------------------------------------------------------------------------------Burstable
如果满足下面条件,将会指定 Pod 的 QoS 类为 Burstable:Pod 不符合 Guaranteed QoS 类的标准;Pod 中至少一个容器具有内存 或 CPU requests;举例:apiVersion: v1
kind: Pod
metadata:
name: qos-demo2
spec:
containers:
- name: qos-demo2image: nginxresources:limits:memory: "500Mi"requests:memory: "200Mi"--------------------------------------------------------------------------BestEffort
对于 QoS 类为 BestEffort 的 Pod,Pod 中的容器必须没有设置内存和 CPU 限制或请求。举例:apiVersion: v1
kind: Pod
metadata:
name: qos-demo3
spec:
containers:
- name: qos-demo3image: nginx
如何查看Qoskubectl describe po qos-demo

QoS优先级

3种QoS优先级从有低到高(从左向右):

BestEffort pods -> Burstable pods -> Guaranteed pods

驱逐原理

可压缩资源:CPU

在压缩资源部分已经提到CPU属于可压缩资源,当pod使用超过设置的limits值,pod中进程使用cpu会被限制,但不会被kill。

不可压缩资源:内存

节点OOM时如何处理Guaranteed, Burstable 和 BestEffort Pods? 

如果节点在Kubelet可以回收之前耗尽了内存,即节点发生了oom,则oom_killer会根据其oom_score终止容器。

对于 “Guaranteed” Pod中的容器,oom_score_adj 为 “ -998”;

对于 “BestEffort” Pod中的容器,其为“ 1000”;

Burstable Pod中的容器,值为“ min(max(2,1000-(1000 * memoryRequestBytes)/ machineMemoryCapacityBytes),999” )”。

oom_killer首先终止QoS等级最低,且超过请求资源最多的容器。这意味着会优先从Burstable中选择占用资源请求过多的容器进行驱逐;

最佳实践

  • 1、按照应用类型进行分类:核心应用(core)/ 常规应用(nomarl)/ 附加应用(extral)

  • 2、核心应用:Guaranteed  / 常规应用:Burstable / 附加应用:BestEffort

  • 3、集群节点分为:核心应用节点 / 常规应用节点 / 附加应用节点

  • 4、调度策略:

    • 核心应用:可以采用nodeAffinity的prefer调度策略调度到核心节点;

    • 常规应用:可以采用nodeAffinity的硬亲和调度策略调度到常规节点;

    • 附加应用:可以采用nodeAffinity的硬亲和调度策略调度到附加节点;


http://www.ppmy.cn/news/107309.html

相关文章

国产替代10BASE-T ST7010QNL 应用局域网的以太网变压器/扼流器

Hqst华强盛导读: 华强盛是电子产品国产替代大军中的一员,随着中国电子产业的快速发展,越来越多的电子产品开始出现了国产替代品。这些国产替代品在性能、品质和价格等方面都有了显著的提升,成为了工厂用户的首选。 国产替代10BAS…

JAVA BigDecimal 比较大小 、计算

1&#xff1a;比较大小 注意&#xff1a;使用compareTo&#xff08;&#xff09;方法比较大小时 参与比较的两个值 必须有值 不能为空 BigDecimal a new BigDecimal("3"); BigDecimal b new BigDecimal("4"); if (a.compareTo(b) < 0) { System.…

干货分享:小红书商业化+微信社区运营,引流自动裂变拓客方案

干货分享&#xff1a;小红书商业化微信社区运营&#xff0c;引流自动裂变拓客方案 背景&#xff1a;2023为止小红书基本已是当代年轻人都会下载和使用的软件了&#xff0c;小红书是生活方式平台和消费决策入口&#xff0c;通过智能机器人学习和对用户的精准智能匹配走红&#x…

mysql8+忘记密码的详细解决方法

mysql8忘记密码的详细解决方法 不同的版本&#xff0c;可能处理的方式不一样&#xff0c;这里说一下8以上的版本处理密码忘记的问题&#xff0c;windows系统。 一.问题&#xff1a; 太久没用mysql &#xff0c;忘记了原先的root密码 二&#xff1a;解决 1.关闭mysql服务,我的…

压力山大?搭建JMeter分布式压测环境轻松应对!

目录 引言 windows环境部署 1.安装环境变量 2.配置环境变量 3.修改Jmeter配置文件 4.启动jmeter 5.启动分布式服务 Linux环境部署 1.安装JDKJmeter 2.环境优化 4.编写Jmeter脚本 5.启动Jmeter 6.停止Jmeter 7.打包查看测试报告 引言 您想要提高您的应用程序的性…

基于长短期神经网络LSTM的飞行轨迹跟踪预测,基于长短期神经网络LSTM的三维路径预测

目录 背影 摘要 LSTM的基本定义 LSTM实现的步骤 基于长短期神经网络LSTM的飞行轨迹跟踪 完整代码: https://download.csdn.net/download/abc991835105/87705046 效果图 结果分析 展望 参考论文 背影 路径追踪预测,对实现自动飞行驾驶拥有重要意义,长短期神经网络是一种改进…

bird 2023 比赛总结

1. 引言 &#x1f4cc; 参加这场比赛的时间&#xff0c;应该是还剩一个月不到了&#xff0c;本来没啥想法&#xff0c;因为在忙一些其它的比赛或者是工作和个人上的烦心事&#xff0c;不过在看过了赛题分析后&#xff0c;整体给我感观是一道挺有意思的学习赛&#xff0c;不仅仅…

Java各种工具箱的使用

Java各种工具箱的使用 【一】StrUtil&#xff08;1&#xff09;常用的方法&#xff08;2&#xff09;hasBlank、hasEmpty方法&#xff08;3&#xff09;sub方法&#xff08;4&#xff09;去空格 回车操作 与空有关的方法&#xff08;5&#xff09;字符串包含关系&#xff08;6&…