K8s 服务质量等级
创始人
2025-05-28 13:50:27
0

本文介绍下K8s的三种服务质量等级:

给容器配置申请资源(cpu或内存)request和最大使用资源limit的方式,

requests是需要使用的集群资源的大小,limits是使用的集群资源上限;

Mi是M*1024 byte,标准值是64M;

k8s把cpu分成了1000份,250m为0.25cpu,也可以写1.0或0.5;

requests和limits设定值的不同会影响到pod在集群中的生存周期和服务质量等级。

Guaranteed(可保证的)

requests和limits值一样是可保证的服务质量等级,等级是最高的,资源是可保证的;把pod下的所有的容器加起来requests=limits,才是这种pod等级。

如果在集群当中只有一个node(cpu 16核,内存64G),node上的2个pod都是一样的配置(cpu 8核,内存 32G),把这2个pod调度到这个节点上之后,这两个pod申请的资源正好是节点所占用的,当然这个节点就不可以被其他pod所使用了,pod自身没有crash的时候,就永远运行在这个节点之上,集群可以保证这两个pod的资源一旦被集群的节点所分配,就永远使用。

缺点是可能存在资源浪费:

在实际使用中大部分情况是只使用一部分资源 ,大部分pod所申请的资源都是浪费的。

Burstable(突发的)

requests小于limits或者只有requests没有limits,表示突发的服务质量等级,一般或默认的情况下使用requests设定的资源,极端的情况使用limit设定的资源;

先申请requests,大部分情况下都是使用这么多资源,极限的情况下,可能会使用更多的资源,但不会超过limits限制。

把节点上可分配的资源定义成free:节点可分配资源-节点所申请的资源=剩余的内存和cpu,系统上的所有资源减去在节点上运行的系统的进程,比如kubelet进程(这个进程可能会保留一部分资源,但是非常少),剩下的资源就是可分配的资源。

集群会按pod申请的资源,把pod调度到这个节点上;

pod requests资源来决定空闲的资源剩余是否足够大,如果足够大的话,才会把pod调度到这个节点上即pod能否调度到这个节点上运行是根据requests资源决定的。

当request小于limit或根本没有limit,使用实际的cpu或内存可能就会超过所设定的limit值;

当request资源小于limit资源的时候,在极端情况下或特殊情况下,cpu实际使用量会超过request,内存的实际使用量也可能会超过request,当出现这两种情况下的时候k8s如何处理的pod?

cpu实际使用未达到limit或没有limit

cpu的实际使用超过了request但没有超过limit或者没有limit,当需要更多的cpu的时候,k8s按request量等比例分配分配空闲的资源,集群允许pod把节点上所有的cpu资源给用了,反正闲着也是闲着。

cpu实际使用达到limit

如果实际使用的cpu超过了limit,pod1获取1个cpu +0.5cpu=1.5cpu,这个是pod1的上限,pod2理论上可以获取剩下的2个cpu,但它的上限是2个cpu,所以它最多可以获的1个cpu达到limit。

任何情况下都按照request和free分配pod

这个时候又有一个新的pod,pod3依然是可以被调度到这个节点,因为k8s是以request量作为使用标准,保证pod使用的资源量;在没有其他pod的时候,pod1和pod2按照剩余资源的比例进行分配;有新的pod的时候,剩余资源就会被使用,pod1和pod2虽然程序需要更多的cpu,但是没有更多的cpu可以使用了,虽然limit=1.5但实际上没有那么多cpu供使用,就变成了pod1、pod2、pod3共同使用。

内存实际使用的超过了request,只要应用需要更多的内存,只要有空闲的内存,可持续使用空闲内存直到limit。

overcommit

2个pod对内存的需求已经超过了节点的剩余内存空间,k8s允许limits超过节点可用内存,超过的部分叫overcommit。

cpu是可压缩资源(内存是不可压缩资源),所以集群可以控制cpu的使用,比如程序使用2个cpu,但实际上可能使用不到2个cpu,内存不一样,比如程序需要使用32g,但如果只给8个g,这个情况下会OOM;允许overcommit的原因是k8s在赌所有的容器不会同时达到limit内存;极端的情况下,所有的容器都达到了极限,

在这种情况下,其中的pod将会被驱离,由于内存是不可压缩资源,当内存产生压力时,k8s会将pod从节点上移除以获得空闲内存,牺牲某个或某些pod,让剩下的pod得以继续运行,驱离的pod在当前节点上被kill,但是集群会选择其他的资源够的节点再把它重新启动起来,如果没有其他可用的节点,服务就宕了。

BestEffort(尽力而为的)

这种情况是request和limit都不设定,

BestEffort是服务等级最低的情况,只要具备空闲cpu或空闲内存的节点上,pod都会被调度过去:

1、以低优先级获得cpu资源,在极端情况下无法获取cpu资源,其他的pod把cpu用完的时候,BestEffort这样的pod就获取不到任何的cpu资源;

2、当内存产生压力时最先被驱离

小结

三种不同的服务质量等级其实面向三种不同的应用场景:

Guaranteed适合面向服务型应用

集群需要保证申请的资源,pod只要调度到节点上,就不会因为系统资源问题被驱离或被终止这样的情况产生;

Burstable适合面向中型应用

  • 只有request的资源可以被保证

  • 在节点内存吃紧时可能被驱离

BestEffort适合面向任务型应用

比如计算任务或日志分析类型,有资源就启动,没有资源被驱离

  • 以低优先级获取空闲cpu资源

  • 在极端的情况下会无cpu使用

  • 在节点内存吃紧时优先被驱离

相关内容

热门资讯

linux入门---制作进度条 了解缓冲区 我们首先来看看下面的操作: 我们首先创建了一个文件并在这个文件里面添加了...
C++ 机房预约系统(六):学... 8、 学生模块 8.1 学生子菜单、登录和注销 实现步骤: 在Student.cpp的...
JAVA多线程知识整理 Java多线程基础 线程的创建和启动 继承Thread类来创建并启动 自定义Thread类的子类&#...
【洛谷 P1090】[NOIP... [NOIP2004 提高组] 合并果子 / [USACO06NOV] Fence Repair G ...
国民技术LPUART介绍 低功耗通用异步接收器(LPUART) 简介 低功耗通用异步收发器...
城乡供水一体化平台-助力乡村振... 城乡供水一体化管理系统建设方案 城乡供水一体化管理系统是运用云计算、大数据等信息化手段࿰...
程序的循环结构和random库...   第三个参数就是步长     引入文件时记得指明字符格式,否则读入不了 ...
中国版ChatGPT在哪些方面... 目录 一、中国巨大的市场需求 二、中国企业加速创新 三、中国的人工智能发展 四、企业愿景的推进 五、...
报名开启 | 共赴一场 Flu... 2023 年 1 月 25 日,Flutter Forward 大会在肯尼亚首都内罗毕...
汇编00-MASM 和 Vis... Qt源码解析 索引 汇编逆向--- MASM 和 Visual Studio入门 前提知识ÿ...
【简陋Web应用3】实现人脸比... 文章目录🍉 前情提要🌷 效果演示🥝 实现过程1. u...
前缀和与对数器与二分法 1. 前缀和 假设有一个数组,我们想大量频繁的去访问L到R这个区间的和,...
windows安装JDK步骤 一、 下载JDK安装包 下载地址:https://www.oracle.com/jav...
分治法实现合并排序(归并排序)... 🎊【数据结构与算法】专题正在持续更新中,各种数据结构的创建原理与运用✨...
在linux上安装配置node... 目录前言1,关于nodejs2,配置环境变量3,总结 前言...
Linux学习之端口、网络协议... 端口:设备与外界通讯交流的出口 网络协议:   网络协议是指计算机通信网...
Linux内核进程管理并发同步... 并发同步并发 是指在某一时间段内能够处理多个任务的能力,而 并行 是指同一时间能够处理...
opencv学习-HOG LO... 目录1. HOG(Histogram of Oriented Gradients,方向梯度直方图)1...
EEG微状态的功能意义 导读大脑的瞬时全局功能状态反映在其电场结构上。聚类分析方法一致地提取了四种头表面脑电场结构ÿ...
【Unity 手写PBR】Bu... 写在前面 前期积累: GAMES101作业7提高-实现微表面模型你需要了解的知识 【技...