设置工作负载的资源限制

最近更新时间:2023-05-17 15:40:28

我的收藏

请求(Request)与限制(Limit)

Request:容器使用的最小资源需求,作为容器调度时资源分配的判断依赖。只有当节点上可分配资源量 >= 容器资源请求数时才允许将容器调度到该节点。但 Request 参数不限制容器的最大可使用资源值。nLimit: 容器能使用的资源最大值。
更多 LimitRequest 参数介绍,单击 查看详情

CPU 限制说明

CPU 资源允许设置 CPU 请求和 CPU 限制的资源量,以核(U)为单位,允许为小数。
注意
CPU Request 作为调度时的依据,在创建时为该容器在节点上分配 CPU 使用资源,称为 “已分配 CPU” 资源。
CPU Limit 限制容器 CPU 资源的上限,不设置表示不做限制(CPU Limit >= CPU Request)。

内存限制说明

内存资源只允许限制容器最大可使用内存量。以 MiB 为单位,允许为小数。
注意
内存 Request 作为调度时的依据,在创建时为该容器在节点上分配内存,称为 “已分配内存” 资源。
内存资源为不可伸缩资源。当节点上所有容器使用内存均超量时,存在 OOM(Out Of Memory,即内存溢出)的风险。不设置 Limit 时,容器可以使用节点所有可使用资源,会导致其它容器的资源被占用,且该类型的容器所在的 Pod 容易被驱逐,不建议使用。建议 Limit = Request。

CPU 使用量和 CPU 使用率

CPU 使用量为绝对值,表示实际使用的 CPU 的物理核数,CPU 资源请求和 CPU 资源限制的判断依据都是 CPU 使用量。
CPU 使用率为相对值,表示 CPU 的使用量与 CPU 单核的比值(或者与节点上总 CPU 核数的比值)。

使用示例

一个简单的示例说明 Request 和 Limit 的作用,测试集群包括1个 4U4G 的节点、已经部署的两个 Pod ( Pod1,Pod2 ),每个 Pod 的资源设置为(CPU Request,CPU Limit,Memory Request,Memory Limit)=(1U,2U,1G,1G)。(1.0G = 1000MiB)n节点上 CPU 和内存的资源使用情况如下图所示:n
Alt text

n已经分配的 CPU 资源为:1U(分配 Pod1) + 1U(分配 Pod2) = 2U,剩余可以分配的 CPU 资源为2U。n已经分配的内存资源为:1G(分配 Pod1) + 1G(分配 Pod2) = 2G,剩余可以分配的内存资源为2G。n所以该节点可以再部署一个 ( CPU Request, Memory Request ) =( 2U,2G )的 Pod 部署,或者部署2个(CPU Request,Memory Request) = (1U,1G) 的 Pod 部署。
在资源限制方面,每个 Pod1 和 Pod2 使用资源的上限为 ( 2U,1G ),即在资源空闲的情况下,Pod 使用 CPU 的量最大能达到2U。

服务资源限制推荐

TKE 会根据您当前容器镜像的历史负载来推荐 Request 与 Limit 值,使用推荐值会保证您的容器更加平稳的运行,减小出现异常的概率。
推荐算法:n我们首先会取出过去7天当前容器镜像分钟级别负载,并辅以百分位统计第95%的值来最终确定推荐的 Request,Limit 为 Request 的2倍。
Request = Percentile(实际负载[7d],0.95)
Limit = Request * 2
如果当前的样本数量(实际负载)不满足推荐计算的数量要求,我们会相应的扩大样本取值范围,尝试重新计算。例如,去掉镜像 tag,namespace,serviceName 等筛选条件。若经过多次计算后同样未能得到有效值,则推荐值为空。
推荐值为空:n在使用过程中,您会发现有部分值暂无推荐的情况,可能由于以下几点造成:
1. 当前数据并不满足计算的需求,我们需要待计算的样本数量(实际负载)大于1440个,即有一天的数据。
2. 推荐值小于您当前容器已经配置的 Request 或者 Limit。
注意
由于推荐值是根据历史负载来计算的,原则上,容器镜像运行真实业务的时间越长,推荐的值越准确。
使用推荐值创建服务,可能会因为集群资源不足造成容器无法调度成功。在保存时,须确认当前集群的剩余资源。
推荐值是建议值,您可以根据自己业务的实际情况做相应的调整。

相关文档

容器的 Request 及 Limit 需根据服务类型、需求及场景进行灵活设置。详情可参见 设置 Request 与 Limit