#yyds干货盘点#k8s中容器资源需求与资源限制

网友投稿 238 2022-10-23

#yyds干货盘点#k8s中容器资源需求与资源限制

在 Kubernetes 上,可由容器或 Pod 请求与消费的“资源”主要是指 CPU 和内存(RAM),它可统称为计算资源,另一种资源是可用存储卷空间的存储资源。

CPU 属于可压缩型资源,即资源额度可按需弹性变化,而内存(当前)则是不可压缩型资源,对其执行压缩操作可能会导致某种程度的问题,例如进程崩溃等。目前,资源隔离仍属于容器级别,CPU 和内存资源的配置主要在 Pod 对象中的容器上进行。

资源需求:定义需要系统预留给该容器使用的资源最小可用值,容器运行时可能用不到这些额度的资源,但用到时必须确保有相应数量的资源可用。

资源限制:定义该容器可以申请使用的资源最大可用值,超出该额度的资源使用请求将被拒绝;显然,该限制需要大于等于 requests 的值,但系统在某项资源紧张时,会从容器回收超出 request 值的那部分。

在 Kubernetes 系统上,1 个单位的 CPU 相当于虚拟机上的 1 颗虚拟 CPU(vCPU)或物理机上的一个超线程(Hyperthread,或称为一个逻辑 CPU),它支持分数计量方式,一个核心(1core)相当于 1000 个微核心(millicores,以下简称为 m),因此 500m 相当于是 0.5 个核心,即 1/2 个核心。内存的计量方式与日常使用方式相同,默认单位是字节,也可以使用 E、P、T、G、M 和 K 为单位后缀,或 Ei、Pi、Ti、Gi、Mi 和 Ki 形式的单位后缀。

stress-ng 是一个多功能系统压力测试工具,master/worker 模型,master 为主进程,负载生成和控制子进程,worker 是负责执行各类特定测试的子进程,例如测试 CPU 的子进程,以及测试 RAM 的子进程等。

与资源需求不同的是,资源限制并不影响 Pod 对象的调度结果,即一个节点上的所有 Pod 对象的资源限制数量之和可以大于节点拥有的资源量,即支持资源的过载使用(overcommitted)。不过,这么一来,一旦内存资源耗尽,几乎必然地会有容器因 OOMKilled 而终止。

在容器中运行 top 等命令观察资源可用量信息时,容器可用资源受限于 requests 和 limits 属性中的定义,但容器中可见的资源量依然是节点级别的可用总量。

根据 Pod 对象的 requests 和 limits 属性,Kubernetes 把 Pod 对象归类到 BestEffort、Burstable 和 Guaranteed 这 3 个服务质量类别(Quality of Service,QoS)类别下。

Guaranteed:Pod 对象为其每个容器都设置了 CPU 资源需求和资源限制,且二者具有相同值;同时为每个容器都设置了内存资需求和内存限制,且二者具有相同值。这类 Pod 对象具有最高级别服务质量。

Burstable:至少有一个容器设置了 CPU 或内存资源的 requests 属性,但不满足 Guaranteed 类别的设定要求,这类 Pod 对象具有中等级别服务质量。

BestEffort:不为任何一个容器设置 requests 或 limits 属性,这类 Pod 对象可获得的服务质量为最低级别。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:什么是HDMI接口?HDMI接口的重要性
下一篇:Java RabbitMQ的工作队列与消息应答详解
相关文章

 发表评论

暂时没有评论,来抢沙发吧~