如何正确设置Kubernetes的request和limit

news2025/1/12 10:05:34

有效设置Kubernetes的request和limit对应用程序性能、稳定性和成本有重大影响。然而,在过去的一年里,与许多团队的合作向我们表明,很难确定这些参数的正确值。出于这个原因,我们创建了这个简短指南,以帮助团队更准确地设置Kubernetes的申请和限制。

基础知识

资源请求和限制是在容器级别指定的可选参数。Kubernetes将一个Pod的request和limit计算为其所有容器中request和limit的总和。然后,Kubernetes将这些参数用于调度和资源分配决策。

Request

Pods将获得他们request的内存。如果它们超过了它们的内存请求,如果另一个吊舱恰好需要这个内存,它们可能会被杀死。只有在关键系统或高优先级工作负载需要内存的情况下,当使用的内存少于request的内存时,才会终止Pod。

类似地如果有可用CPU,Pod中的每个容器都被分配CPU。如果其他正在运行的Pods/Job不需要可用资源,则可能会分配额外的CPU周期。

注意:如果Pod的总请求在单个节点上不可用,那么Pod将保持挂起状态(即不运行),直到这些资源可用。

Limit

资源limit有助于Kubernetes调度程序更好地处理资源争用。当Pod使用的内存超过其limit时,其进程将被内核终止,以保护集群中的其他应用程序。当Pod超过其CPU限制时,将对其进行CPU节流。

如果没有设置限制,那么吊舱可以在可用时使用多余的内存和CPU。

以下是如何设置容器规范的request和limit的快速示例:

apiVersion: v1
kind: Pod
metadata:
  name: hello-app
spec:
  containers:
  - name: wp
    image: wordpress
    resources:
      requests:
        memory: "64Mi"
        cpu: "250m"
      limits:
        memory: "128Mi"
        cpu: "500m"

CPU requests以CPU单位设置,其中1000 millicpu(“m”)等于1 vCPU或1 Core。所以250m的CPU相当于1/4的CPU。可以使用Ti、Gi、Mi或Ki单位设置内存。有关这些参数的力学机制的更高级技术信息,我们建议阅读以下文章:

  • https://github.com/kubernetes/community/blob/master/contributors/design-proposals/node/resource-qos.md
  • Resource Management for Pods and Containers | Kubernetes

权衡

确定request和limit的正确级别是为了管理权衡,如下表所示。在设置request时,在运行应用程序的成本和该应用程序的性能/停机风险之间存在着内在的权衡。平衡这些风险取决于额外CPU/RAM的相对成本与应用程序节流或停机事件的预期成本。例如,如果再分配一个1 Gb的RAM(成本5美元)可以将应用程序中断事件的风险(成本10000美元)降低1%,那么这些计算资源的额外成本是值得的。

请求太低了太高了
中央处理器饥饿–可能无法获得所需的CPU周期效率低下–需要额外的CPU来安排其他Pod
存储器杀伤风险–如果其他吊舱需要内存,可能会终止效率低下-需要额外的RAM来安排其他吊舱

在设定limit时,权衡是相似的,但并不完全相同。这里的权衡是共享基础架构上各个应用程序的相对性能与运行这些应用程序的总成本。例如,将CPU limit 的数量设置为高于分配的CPU数量,会使应用程序面临潜在的限制风险。提供额外的CPU(即增加开支)是一个潜在的解决方案,而降低某些应用程序的CPU限制(即增加节流风险)则是另一个解决方案。

限制太低了太高了
中央处理器CPU调节耗尽其他吊舱或资源效率低下
存储器被内核杀死耗尽其他吊舱或资源效率低下

在下一节中,我们将介绍一个更有效地管理这些权衡的框架。

确定正确的值

设置request时,首先确定容器在特定时间窗口(例如24小时)内的使用超过其request的可接受概率。为了预测未来的情况,我们可以分析历史资源使用情况。例如,允许使用率超过request阈值的概率为0.01(即3个9),这意味着平均每天1.44分钟,它将面临更大的节流或死亡风险。

您可以将应用程序划分为不同的可用性层,并应用这些经验规则来确定适当的可用性级别:

请求限制
关键/高可用性99.99%+100%净空2倍 request 或更高request(如果资源可用)
生产/非关键99%+50%净空2x request
开发/实验95%或考虑命名空间配额1.5x request 或考虑命名空间配额

这种分析历史使用模式的方法通常既能很好地表示未来,又易于理解/反思。应用额外的净空允许历史采样可能错过的波动。我们建议至少测量一周以上的使用量,并根据Pod的具体可用性要求设置阈值。

*共享实验集群的开发人员可能需要更广泛的保护资源配额.Quotas在命名空间级别设置聚合上限,有助于保护诸如长时间运行的批处理或ML作业之类的任务,使其不会因为有人在另一命名空间中不正确地指定了资源而被终止。

解决方案

看到正确设置这些参数并随着时间的推移进行管理的困难,促使我们在Kubecost产品中创建一个解决方案,以直接为您的应用程序生成建议。我们的建议基于可配置的可用性层(如生产或开发),可通过Kubecost产品中的命名空间或其他概念轻松跟踪。

除了提供请求建议外,此解决方案还可以主动检测内存不足和CPU节流风险。完整的Kubecost产品可通过单个Helm命令获得(安装选项)并且可以在Namespace视图中轻松查看每个容器的这些建议。我们的商业产品对小型集群免费,对大型集群免费试用,并且基于Kubecost开源项目 .

此外,如果您想自己计算这些指标,这里还有一些Prometheus查询示例!

内存请求(生产层)

我们建议container_memory_working_set_bytes因为这个指标不包括缓存的数据,并且是Kubernetes用于OOM/调度决策的指标。此中的更多信息文章 .

1.5 * avg(quantile_over_time(.99,container_memory_working_set_bytes{container_name!="POD",container_name!=""}[7d])) by (container_name,pod_name,namespace)

CPU请求(生产层)

首先,使用此表达式创建录制规则。注意,我们建议使用irate捕捉短期峰值是资源需求。

avg( irate(container_cpu_usage_seconds_total{container_name!="POD", container_name!=""}[5m]) ) by (container_name,pod_name,namespace)

然后运行此查询:

1.5 * quantile_over_time(.99,container_cpu_usage_irate[7d])

垂直吊舱自动缩放

垂直吊舱自动缩放(VPA)的目标是不必担心为容器的CPU和内存request指定值。在某些情况下,它可能是一个很好的解决方案,通常使用无状态工作负载,但您应该注意到,截至2019年9月,此工具仍处于测试阶段。以下是需要注意的一些实际限制:

  • 当VerticalPodAutoscaler需要更改Pod的资源request时,Pod被收回,需要重新启动。
  • 如果配置不正确,VPA可能会导致性能风险和中断,并增加可观察性复杂性。
  • 为了适当地处理扩展事件,建议还启用Cluster Autoscaler来处理工作负载的增加资源需求大小。
  • VPA需要仔细调整,以实现具有不同参数的基于层的解决方案,用于高可用应用程序、开发、产品、登台等。

我们建议团队在将VPA用于关键生产工作负载时要谨慎。它给您的基础设施带来了复杂性,您应该充分确保您的部署和VPA本身配置正确。撇开风险不谈,如果应用得当,它可能是一个很好的解决方案。

有关VPA的更多信息,请访问:

  • https://github.com/kubernetes/autoscaler/tree/master/vertical-pod-autoscaler网站
  • https://github.com/kubernetes/community/blob/master/contributors/design-proposals/autoscaling/vertical-pod-autoscaler.md

结论

有效地设置请求和限制可以决定Kubernetes中应用程序的性能和可靠性。

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

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

相关文章

leetcode动态规划学习

0-1背包问题 参考: 【动态规划/背包问题】那就从 0-1 背包问题开始讲起吧 ... 内容是学习 宫水三叶的刷题日记 公众号专题内容时的笔记,为了方便个人复习整理到这里。建议大家关注该公众号,写的很清楚,有更多内容。 经典0-1背…

Linux进程等待

Linux进程等待 一.什么是进程等待二.为什么要有进程等待三.怎么进行进程调用1.僵尸进程问题2.waitpid3.获取进程退出状态 一.什么是进程等待 通过系统调用wait和waitpid,来进行对子进程进行状态检测与回收功能。 二.为什么要有进程等待 1。之前讲过,子…

【第25例】IPD体系进阶:需求分析团队RAT

目录 简介 RAT CSDN学院相关内容推荐 作者简介 简介 RAT是英文Requirement Analysis Team英文首字母的简称,也即需求分析团队,每个产品线都需要设定对应的一个RAT的组织。 RAT主要负责产品领域内需求的分析活动,是RMT的支撑团队: 这个时候可以将RAT细化为PL-RAT团队,…

C语言--strcmp函数(介绍与自己实现)

strcmp函数:字符串比较函数。 用法:strcmp(str1,str2)。str1,str2可以是字符串常量或者字符串变量,返回值为整形。 str1小于str2,返回负值,str1等于str2,返回为0,str1大于str2,返回正值 那么两个字符串是…

Ubuntu环境下DOSBOX的配置

【步骤一】 先打开命令行,进入root模式,输入如下语句: sudo apt-get install dosbox 该语句的作用主要是安装dosbox 【步骤二】 安装完成之后,命令行输入dosbox 会进入dosbox页面: 【步骤三】 在你的主机中&…

腾讯云主机服务器什么时候最便宜?

腾讯云主机服务器价格对于许多用户来说是一个重要考虑因素。本文将探讨腾讯云主机服务器的最佳购买时期,并为大家提供一些建议,帮助大家以最优惠的价格购买腾讯云主机服务器。 首先,我们需要了解腾讯云服务器的优惠政策。一般来说&#xff0c…

Games104现代游戏引擎笔记 网络游戏进阶架构

Character Movement Replication 角色位移同步 玩家2的视角看玩家1的移动是起伏一截一截,并且滞后的 interpolation:内插值,在两个旧的但已知的状态计算 extrapolation:外插值,本质是预测 内插值:但网络随着…

用友U8SMSProxy -SQL注入漏洞

0x01 漏洞介绍 用友GRP-U8 R10政务管理软件是由用友政务公司基于云技术所推出的第十代政务产品。这款产品继承了用友R9、R9i、U8等行政事业版产品的各项优点,并融合了全国广大用户的最佳实践应用。它旨在为政府财政部门、社保部门、卫生部门、教育部门、民政部门、党…

phar反序列化

序列化和反序列化的区别? 可参考:【精选】什么是反序列化?反序列化的过程,原理-CSDN博客 通俗的说序列化将对象转化为了字符串,包含了对象的所有数据信息, 反序列化时再根据这些信息还原对象 序列化&…

0026Java程序设计-中学走读生信息管理系统设计与实现

文章目录 摘要**目录**系统设计开发环境 摘要 目前,中学走读生信息管理系统已经发展成为学校的学生走读管理工作中必不可少的一个组成部分,没有该系统,学生的日常工作就会变得繁琐、效率低下。在信息化的社会发展下,有必要建立一…

Three.js 基础纹理贴图

本文简介 带尬猴,我嗨德育处主任 尽管 Three.js 文档已经比较详细了,但对于刚接触 Three.js 的工友来说,最麻烦的还是不懂如何组合。Three.js 的功能实在太多了,初学者很容易被大量的新概念冲晕。 本文主要讲解入门 Three.js 必…

BES2700 蓝牙协议之RFCOMM通道使用方法

是否需要申请加入数字音频系统研究开发交流答疑群(课题组)?可加我微信hezkz17, 本群提供音频技术答疑服务 BES2700 RFCOMM通道使用方法 RFCOMM_CHANNEL_NUM 枚举定义了一系列的通道号码,并为每个通道号码指定了一个具体的名称。以下是其中一些通道的中文含义: RFCOMM_CHAN…

解决Windows出现找不到mfcm90u.dll无法打开软件程序的方法

今天,我非常荣幸能够在这里与大家分享关于mfc90u.dll丢失的5种解决方法。在我们日常使用电脑的过程中,可能会遇到一些软件或系统错误,其中之一就是mfc90u.dll丢失。那么,mfc90u.dll究竟是什么文件呢?接下来&#xff0c…

【代码随想录】算法训练计划02

1、977. 有序数组的平方 给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。 输入:nums [-4,-1,0,3,10] 输出:[0,1,9,16,100] 思路: 这题思路在于——双指针…

网工内推 | 国企,解决方案工程师,最高30k,有软考证书优先

01 中电信数智科技有限公司海南分公司 招聘岗位:解决方案经理(ICT) 职责描述: 1、负责调动前后端资源做好全省ICT业务的售前支撑服务工作。 2、根据实际项目需求,主动协同客户渠道开展ICT项目商机挖掘,促进…

点云处理【七】(点云配准)

点云处理 第一章 点云数据采集 1.点云配准 点云配准是将两个或多个点云数据集融合到一个统一的坐标系统中的过程。这通常是为了创建一个完整的模型或融合从不同视角采集的数据。 点云配准一般分为粗配准和精配准,粗配准指的是在两幅点云之间的变换完全未知的情况下…

JS加密/解密之那些不为人知的基础逻辑运算符

不多说,直接上干货 使用逻辑非运算符 ! 和双重逻辑非运算符 !!:例如 ![]、!![]、!0、!!0 和 !""、!!""。空字符串的转换:!"" 和 !!""。数组和对象的类型转换:[] []、[] - []、{} [] 和…

STM32中除零运算,为何程序不崩溃?

在 C 语言中,除零运算会导致异常吗? 在 C 语言中,当一个数除以零时,会导致除法运算错误,通常表现为“除以零”错误或被称为“浮点异常”(floating-point exception)。 对于整数除法&#xff0c…

YOLOv5源码中的参数超详细解析(3)— 训练部分(train.py)| 模型训练调参

前言:Hello大家好,我是小哥谈。YOLOv5项目代码中,train.py是用于模型训练的代码,是YOLOv5中最为核心的代码之一,而代码中的训练参数则是核心中的核心,只有学会了各种训练参数的真正含义,才能使用YOLOv5进行最基本的训练。🌈 前期回顾: YOLOv5源码中的参数超详细解析…

IC-705连接wfview

wfview是一款开源的主要针对ICOM的远程控制软件,可以通过USB或者无线控制电台,貌似还支持X6100。 IC-705支持WLAN功能,连接wfview非常方便。 IC-705的WLAN支持两种模式,一种是Station模式,可用于连接WI-FI路由器&#…