Kubernetes基础(七)-Pod资源Limits与Requests

news2025/3/15 18:38:35

在k8s的集群环境中,资源的合理分配和使用非常重要。毕竟容器化要解决的问题之一就是资源的充分利用。在集群中分配资源的时候就不得不提到Limits和Requests。

1 Namespace配额

Kubernetes 是允许管理员在命名空间中指定资源 Requests 和 Limits 的,这一特性对于资源管理限制非常有用。但它目前还存在一定局限:如果管理员在命名空间中设置了 CPU Requests 配额,那么所有 Pod 也要在其定义中设置 CPU Requests,否则就无法被调配资源。

apiVersion: v1
kind: ResourceQuota
metadata:
  name: mem-cpu-example
spec:
  hard:
    requests.cpu: 4
    requests.memory: 4Gi
    limits.cpu: 6
    limits.memory: 6Gi

这是一个简单的ResourceQuota类型,也就是针对Namespace的配额。它会针对Namespace做如下限额:

  • 所有 CPU Requests 的总和不能超过 4 个内核
  • 所有 RAM Requests 的总和不能超过 4GiB
  • 所有 CPU Limits 的总和不能超过 6个内核
  • 所有 RAM Limits 的总和不能超过 6GiB

2 针对Pod的Request和Limit

刚上述提到可以针对Pod进行资源限额,同样也可以设置Pod申请资源的Request和Limit。k8s中会将一个CPU分成1000个shares,这和Cgroup中分成1024略有差异。正常情况下requests的数值应该小于limits,那么该Pod获得的资源可以分为两部分:

  • 完全可靠的资源,资源量大小等于requests值
  • 不可靠的资源,资源量最大等于limits和requests的差额,这份不可靠的资源能够申请到多少,取决于当时主机上容器可用资源的余量。

如下例:

kind: Deployment
apiVersion: extensions/v1beta1
metadata:
 name: redis
 labels:
   name: redis
   app: redis-app
spec:
 replicas: 2
 selector:
   matchLabels:
    name: redis
    role: redisdb
    app: redis-app
 template:
   spec:
     containers:
       - name: redis
         image: redis:5.0.3-alpine
         resources:
           limits:
             memory: 500Mi
             cpu: 1
           requests:
             memory: 250Mi
             cpu: 500m
       - name: busybox
         image: busybox:1.28
         resources:
           limits:
             memory: 100Mi
             cpu: 100m
           requests:
             memory: 50Mi
             cpu: 50m
  • Pod 中两个容器公共的有效 Request 是 300MiB 的内存和 550 毫核(millicore)的 CPU。我们需要一个具有足够可用可分配空间的节点来调度 Pod。
  • 如果 Redis 容器尝试分配超过 500MB 的 RAM,就会被 OOM-killer。
  • 如果 Redis 容器尝试每 100ms 使用 100ms 以上的 CPU,那么 Redis 就会受到 CPU 限制(如果一共有 4 个内核,可用时间为 400ms/100ms),从而导致性能下降
  • 如果 busybox 容器尝试分配 100MB 以上的 RAM,也会引起 OOM
  • 如果 busybox 容器尝试每 100ms 使用 10ms 以上的 CPU,也会使 CPU 受到限制,从而导致性能下降

需要注意的是,Kubernetes 限制的是每个容器,而不是每个 Pod。其他 CPU 指标,如共享 CPU 资源使用情况,只对分配有参考价值,所以如果遇到了性能上的问题,建议不要在这些指标上浪费时间。


3 Requests等于Limits 的时候

一般情况,设置的Requests值一般都要小于Limits,但是也存在特殊情况。涉及到一个概念就是服务质量等级

  • Guaranteed(完全可靠的):Limits==requests,或者只设置了Limits,此时默认requests等于limits
  • Burstable(弹性波动、较可靠的):分为两种情况:
    • Pod中一部分容器在一种或多种资源类型中配置了requests和limits;
    • Pod中一部分容器未定义资源配置(requests和limits都未配置)
  • BestEffort(尽力而为、不太可靠的):Pod所有中所有容器都未定义requests和limits

注意:在容器未定义limits时,limits值默认是节点资源容量的上限。

另外当分配CPU的requests和limits相等的时候,就是指该容器独占CPU,需要在kubelet服务的配置中增加--cpu-manager-policy=static

4 可压缩资源和不可压缩资源

上文提到,在容器可使用的资源有CPU和内存。所以拓展一下k8s集群中的可压缩资源和不可压缩资源概念。
在k8s中,CPU就是可压缩资源。空闲的CPU资源会按照容器的requests值得比例进行分配,举例说明:

容器A requests1 limits 10;容器B requests2 limits 8,假如一开始该节点上可用CPU为3,那么两个容器恰好得到各自requests的量。此时节点又释放了1.5CPU,A和B都需要更多CPU资源,那么这1.5CPU就会按照A和B的requests量按比例分配,最后A得到1.5CPU,B得到3CPU。

目前k8s支持的不可压缩资源是内存。Pod中可以得到requests的内存量,如果Pod使用小于该值,那么Pod正常运行;如果Pod使用超过了该值极=就有可能被k8s杀掉。比如,Pod A使用了大于requests但是小于limits的内存,此时Pod B使用了小于requests的内存,但是Pod B中的程序突然压力增大,向k8s请求更多的但是不超过自己requests的内存资源,而节点上已没有空闲内存资源,这时候k8s就可能会直接kill Pod A。

4 选择可靠的Requests和Limits

具备一定 Kubernetes 经验的人都知道正确设置 Request 和 Limit 对于应用程序和集群的性能的重要性。

理想情况下,Pod 请求多少资源,它就用多少资源,但在现实场景下,资源使用是不断变化的,而且它的变化没有规律,不可预测。

如果 Pod 的资源使用量远低于请求量,那会导致资源浪费;如果资源使用量高于请求量,那就会使节点出现性能问题。因此在实际操作中,可以把 Request 值上下浮动 25% 作为一个良性参考标准。

而关于 Limit,设置合理的 Limit 数值其实需要尝试,因为它主要取决于应用程序的性质、需求模型、对错误的容忍度以及许多其他因素,没有固定答案。

另一件需要考虑的事是在节点上允许的 Limits 过量使用。


这些 Limits 由用户执行,因为 Kubernetes 没有关于超额使用的自动化机制。

另外需要考虑的事情是在节点上允许的Limits过量使用。

 这些Limits是由用户执行,因为kubernetes没有关于超额使用的自动化机制。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1197093.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

半小时拥有自己的ChatGPT4,高效低成本,无脑跟即可

文章目录 一、获取Key二、获取服务器三、设置端口三、安装Docker环境 一、获取Key 最简单的获取方法,去某宝搜 “open账号ai” 购入一个key,几块钱,有3.5、4.0,买3.5就行了,4.0太贵了。注意是购入key,不是…

ArcGIS10.8 连接 PostgreSQL 及遇到的两个问题

前提 以前同事用过我的电脑连PostgreSQL,失败了。当时不知道原因,只能使用GeoServer来发布数据了。现在终于搞明白了,原因是ArcGIS10.2版本太老,无法连接PostgreSQL9.4。参考这里 为了适应时代的发展,那我就用新的Ar…

测量直线模组时如何降低误差?

直线模组属于高精度传动零部件,是机械行业中不可或缺的零部件之一,其具有高精度、速度快、使用寿命长等特点;如果直线模组的精度受损,则不能达到预期的使用效果,那么我们测量时应该如何减少误差,确保直线模…

ENVI IDL:如何解析XML文件(以Landsat9-MTL.xml文件为例)

01 前言 我们原本是打算对Landsat9文件进行辐射定标,但是辐射定标的参数在MTL文件中,从文件中查看参数直接复制到IDL中固然可行,但是当我们对Landsat9文件进行批量辐射定标时,这种方法就将失效了。因此我们需要自动从MTL文件中读…

SSM框架Demo: 简朴博客系统

文章目录 1. 前端页面效果2. 项目创建3. 前期配置3.1. 创建数据库数据表3.2. 配置文件 4. 创建实体类5. 统一处理5.1. 统一返回格式处理5.2. 统一异常处理 6. 全局变量7. Session工具类8. 登录拦截器9. 密码加盐加密10. 线程池组件11. dao层11.1. UserMapper11.2. ArticleMappe…

jenkins分步式构建环境(agent)

rootjenkins:~# netstat -antp|grep 50000 tcp6 0 0 :::50000 ::😗 LISTEN 5139/java 1.52 安装Jenkins rootubuntu20:~# dpkg -i jenkins_2.414.3_all.deb 配置各种类型的Agent的关键之处在于启动Agent的方式 ◼ JNLP Agent对应着“通过Java Web启动代理”这种方…

人工智能基础——Python:Pillow与图像处理

人工智能的学习之路非常漫长,不少人因为学习路线不对或者学习内容不够专业而举步难行。不过别担心,我为大家整理了一份600多G的学习资源,基本上涵盖了人工智能学习的所有内容。点击下方链接,0元进群领取学习资源,让你的学习之路更加顺畅!记得…

SPSS:卡方检验(交叉表)

第一步 打开SPSS软件,在工具栏中选中【打开-文件-数据】,然后选择一份要打开的数据表(如图所示)。 第二步 在工具栏中找到【分析-描述统计-交叉表】打开交叉表对话框(如图所示)。 第三步 接着将【行-列】相关变量放在对应对话框中(如图所示)。 第四步 在…

2023年03月 Python(四级)真题解析#中国电子学会#全国青少年软件编程等级考试

Python等级考试(1~6级)全部真题・点这里 一、单选题(共25题,每题2分,共50分) 第1题 运行下列程序,输出的结果是?( ) def wenhao(name = zhejiang): print(hello + name) wenhao

《软件工程与计算》期末考试真题范例及答案

今天分享一套针对《软件工程与计算》这本书的真题案例,有关《软件工程与计算》23章内容的重点知识整理,已经总结在了博客专栏中,有需要的自行阅读: 《软件工程与计算》啃书总结https://blog.csdn.net/jsl123x/category_12468792.…

git基础知识

1.git的必要配置 所有的配置文件,其实都保存在本地! 查看所有配置 git config -l 即把 系统配置(system)和当前用户(global)配置都 列出来 以直接编辑配置文件,通过命令设置后会响应到这里。 注意: 如果…

男科医院服务预约小程序的作用是什么

医院的需求度从来都很高,随着技术发展,不少科目随之衍生出新的医院的,比如男科医院、妇科医院等,这使得目标群体更加精准,同时也赋能用户可以快速享受到服务。 当然相应的男科医院在实际经营中也面临痛点:…

【图像分类】【深度学习】【Pytorch版本】GoogLeNet(InceptionV1)模型算法详解

【图像分类】【深度学习】【Pytorch版本】GoogLeNet(InceptionV1)模型算法详解 文章目录 【图像分类】【深度学习】【Pytorch版本】GoogLeNet(InceptionV1)模型算法详解前言GoogLeNet(InceptionV1)讲解Inception结构InceptionV1结构1x1卷积的作用辅助分类器 GoogLeNet(Inceptio…

(论文阅读23/100)Hierarchical Convolutional Features for Visual Tracking

文献阅读笔记(分层卷积特征) 简介 题目 Hierarchical Convolutional Features for Visual Tracking 作者 Chao Ma, Jia-Bin Huang, Xiaokang Yang and Ming-Hsuan Yang 原文链接 arxiv.org/pdf/1707.03816.pdf 关键词 Hierarchical convolution…

华为防火墙双机热备配置案例(无vrrp)

思路: IP和路由、ospf要两台防火墙单配,hrp不会同步 其它zone和策略会同步,只在master上配就行了 FW_A主要配置: hrp enable hrp interface GigabitEthernet1/0/2 remote 172.16.0.2 interface GigabitEthernet1/0/0 undo shut…

Qt 自定义按钮 区分点按与长按信号,适配触摸事件

Qt 自定义按钮 区分点按与长按信号 适配触摸事件 效果 使用示例 // 点按connect(ui.btnLeft, &JogButton::stepclicked, this, &MainWindow::btnLeft_clicked);// 长按开始connect(ui.btnLeft, &JogButton::continueOn, this, &MainWindow::slotJogLeftOn);//…

【Springboot】基于注解式开发Springboot-Vue3整合Mybatis-plus实现分页查询

系列文章目录 文章目录 系列文章目录系统版本实现功能操作步骤1. 新建Mybatis的全局分页配置文件2. 编写OrderMapper :继承Mybatis-plus提供的BaseMapper3. 编写OrderServiceImpl,实现OrderService4. 编写OrdersController 控制类 发送接口请求测试 系统版本 后端&…

Antd React Form.Item内部是自定义组件怎么自定义返回值

在线演示https://stackblitz.com/edit/stackblitz-starters-xwtwyz?filesrc%2FSelfTreeSelect.tsx 需求 当我们点击提交,需要返回用户名和选中树的id信息,但是,我不关要返回树的id信息,还需要返回选中树的名称 //默认返回的 {userName:梦洁,treeInfo:leaf1-value } //但是需…

MySQL中的json使用注意

MySQL中json是一种重要的数据类型 好的点在于其不必事先定义列得名称啥的 不过不要将明显的关系型数据作为json来存储,例如用户余额、姓名、身份证等,这些是用户必须包含的数据 json适合存储的是给每个用户(或者物品)打的标签&…

红黑树的模拟实现

一、介绍 1. 概念 红黑树,是一种二叉搜索树,但在每个结点上增加一个存储位表示结点的颜色,可以是Red或Black。通过对任何一条从根到叶子的路径上各个结点着色方式的限制,红黑树确保没有一条路径会比其他路径长出俩倍&#xff0c…