Kubernetes K8S之CPU和内存资源限制详解

Pod资源限制

备注:CPU单位换算:100m CPU,100 milliCPU 和 0.1 CPU 都相同;精度不能超过 1m。1000m CPU = 1 CPU。

官网地址:

https://kubernetes.io/zh/docs/tasks/configure-pod-container/assign-cpu-resource/

https://kubernetes.io/zh/docs/tasks/configure-pod-container/assign-memory-resource/

Kubernetes对资源的限制实际上是通过cgroup来控制的,cgroup是容器的一组用来控制内核如何运行进程的相关属性集合。针对内存、CPU和各种设备都有对应的cgroup。

默认情况下,Pod运行没有CPU和内存的限额。这意味着系统中的任何Pod将能够像执行Pod所在节点机器一样,可以消耗足够多的CPU和内存。一般会针对某些应用的Pod资源进行资源限制,这个资源限制是通过resources的requests【要分配的资源】和limits【最大使用资源】来实现的

CPU资源限制示例

Kubernetes K8S之CPU和内存资源限制详解

配置文件的 args 部分提供了容器启动时的参数。-cpus “2”参数告诉容器尝试使用 2 个 CPU。

内存资源限制示例

Kubernetes K8S之CPU和内存资源限制详解

配置文件的 args 部分提供了容器启动时的参数。"--vm-bytes", "150M" 参数告知容器尝试分配 150 MiB 内存。不允许args中的启动内存大于limits限制内存。

namespace资源限制

官网地址:

Kubernetes K8S之CPU和内存资源限制详解

Kubernetes K8S之CPU和内存资源限制详解

为命名空间配置内存和 CPU 配额

怎么为命名空间设置容器可用的内存和 CPU 总量。你可以通过 ResourceQuota 对象设置配额,使用 ResourceQuota 限制命名空间中所有容器的内存请求总量、内存限制总量、CPU 请求总量和CPU 限制总量。

如果你想对单个容器而不是所有容器进行限制,就请使用 LimitRange。

示例:

Kubernetes K8S之CPU和内存资源限制详解

应用如下【命名空间quota-mem-cpu-example已提前创建完毕】:

Kubernetes K8S之CPU和内存资源限制详解

查看 ResourceQuota 详情:

Kubernetes K8S之CPU和内存资源限制详解

输出部分结果如下:

Kubernetes K8S之CPU和内存资源限制详解

ResourceQuota 在 quota-mem-cpu-example 命名空间中设置了如下要求:

  • 每个容器必须有内存请求和限制,以及 CPU 请求和限制。

  • 所有容器的内存请求总和不能超过1 GiB。

  • 所有容器的内存限制总和不能超过2 GiB。

  • 所有容器的 CPU 请求总和不能超过1 cpu。

  • 所有容器的 CPU 限制总和不能超过2 cpu。

为命名空间配置默认的内存请求和限制

示例:

Kubernetes K8S之CPU和内存资源限制详解

default类似于之前的limit;defaultRequest类似于之前的request。

应用如下:

Kubernetes K8S之CPU和内存资源限制详解

命名空间default-mem-example已提前创建完毕

现在,如果在 default-mem-example 命名空间创建容器,并且该容器没有声明自己的内存请求和限制值,那么它将被指定一个默认的内存请求256 MiB和一个默认的内存限制512 Mib。

为命名空间配置默认的CPU请求和限制

示例:

Kubernetes K8S之CPU和内存资源限制详解

应用如下:

Kubernetes K8S之CPU和内存资源限制详解

其中default-cpu-example名称空间已被提前创建

现在如果在 default-cpu-example 命名空间创建一个容器,该容器没有声明自己的 CPU 请求和限制时,那么将会给它指定默认的 CPU 请求0.5和默认的 CPU 限制值1。

配置命名空间的最小和最大内存约束

示例:

Kubernetes K8S之CPU和内存资源限制详解

应用如下:

Kubernetes K8S之CPU和内存资源限制详解

其中constraints-mem-example名称空间已被提前创建

查看 LimitRange 的详情:

Kubernetes K8S之CPU和内存资源限制详解

输出显示预期的最小和最大内存约束。但请注意,即使您没有在 LimitRange 的配置文件中指定默认值,默认值也会被自动创建。

Kubernetes K8S之CPU和内存资源限制详解

现在,只要在 constraints-mem-example 命名空间中创建容器,Kubernetes 就会执行下面的步骤:

  • 如果 Container 未指定自己的内存请求和限制,将为它指定默认的内存请求和限制。

  • 验证 Container 的内存请求是否大于或等于500 MiB【超出范围容器创建失败】。

  • 验证 Container 的内存限制是否小于或等于1 GiB【超出范围容器创建失败】。

配置命名空间的最小和最大CPU约束

示例:

Kubernetes K8S之CPU和内存资源限制详解

应用如下:

Kubernetes K8S之CPU和内存资源限制详解

其中constraints-cpu-example名称空间已被提前创建

查看 LimitRange 详情:

Kubernetes K8S之CPU和内存资源限制详解

输出结果显示 CPU 的最小和最大限制符合预期。但需要注意的是,尽管你在 LimitRange 的配置文件中你没有声明默认值,默认值也会被自动创建。

Kubernetes K8S之CPU和内存资源限制详解

现在不管什么时候在 constraints-cpu-example 命名空间中创建容器,Kubernetes 都会执行下面这些步骤:

  • 如果容器没有声明自己的 CPU 请求和限制,将为容器指定默认 CPU 请求和限制。

  • 核查容器声明的 CPU 请求确保其大于或者等于200 millicpu。

  • 核查容器声明的 CPU 限制确保其小于或者等于800 millicpu。

配置命名空间下pod总数

示例:

Kubernetes K8S之CPU和内存资源限制详解

应用如下【命名空间quota-pod-example已提前创建完毕】:

Kubernetes K8S之CPU和内存资源限制详解

查看资源配额的详细信息:

Kubernetes K8S之CPU和内存资源限制详解
从输出的信息我们可以看到,该命名空间下pod的配额是2个,目前创建的pods数为0,配额使用率为0
Kubernetes K8S之CPU和内存资源限制详解

本文作者:LightZhang666。

原文链接:https://blog.csdn.net/woshizhangliang999/article/details/112205526

相关新闻

历经多年发展,已成为国内好评如潮的Linux云计算运维、SRE、Devops、网络安全、容器云、Go、Python开发专业人才培训机构!