一、k8s容器资源限制

  • Kubernetes采用request和limit两种限制类型来对资源进行分配。
    request(资源需求):即运行Pod的节点必须满足运行Pod的最基本需求才能运行Pod。
    limit(资源限额):即运行Pod期间,可能内存使用量会增加,那最多能使用多少内存,这就是资源限额。
  • 资源类型:
    CPU 的单位是核心数,内存的单位是字节。
    一个容器申请0.5个CPU,就相当于申请1个CPU的一半,你也可以加个后缀m 表示千分之一的概念。比如说100m的CPU,100豪的CPU和0.1个CPU都是一样的。
  • 内存单位:
    K、M、G、T、P、E #通常是以1000为换算标准的。
    Ki、Mi、Gi、Ti、Pi、Ei #通常是以1024为换算标准的。

1.内存限制

为了实验效果,真机将stress的tar包传给server1
请添加图片描述
请添加图片描述
server1导入stress镜像,并上传至仓库
请添加图片描述
创建一个目录limit 用来存放编辑pod.yaml文件;
设置容器内存为200,但限制其可使用的内存资源为100M
请添加图片描述
应用资源清单,可以看到pod无法创建成功,这因为使用的内存超过了上限;
如果容器超过其内存限制,则会被终止请添加图片描述
查看日志
请添加图片描述
请添加图片描述
删除pod节点,修改上限内存为300M
请添加图片描述
再次执行清单,并查看pod节点信息,成功创建
请添加图片描述
查看日志
请添加图片描述
实验完成之后,将pod.yaml清除
在这里插入图片描述

2.cpu限制

首先将server2的cpu设置为2个核心
请添加图片描述
编辑pod1.yaml文件,将容器的cpu上限设为10,下限设为5,使用2个cpu
在这里插入图片描述
执行清单pod1.yaml,pod处于pending状态,因为cpu数量不在限定范围内,虚拟机也就两个cpu;
请添加图片描述
查看详细信息,cpu限制直接影响调度,调度失败;
调度失败是因为申请的CPU资源超出集群节点所能提供的资源,但CPU 使用率过高,不会被杀死
请添加图片描述
修改pod1.yaml文件,使其满足cpu要求
在这里插入图片描述
删除原来的cpu-demo,重新应用pod1.yaml文件,pod成功运行
在这里插入图片描述

3.为namespace设置资源限制

编辑limitrange.yaml文件,设定最大最小内存和cpu限制以及默认运行参数限制;
应用资源清单
请添加图片描述
查看详细信息;
LimitRange 在 namespace 中施加的最小和最大内存限制只有在创建和更新 Pod 时才会被应用,改变 LimitRange 不会对之前创建的 Pod 造成影响。
请添加图片描述
接下来注释pod.yaml文件中定义的内存限制,使用limitrange.yaml文件中的默认限制
请添加图片描述
重新应用资源清单
请添加图片描述
查看pod详细信息
请添加图片描述
可以看到pod会使用limitrange.yaml默认的内存和cpu限制
请添加图片描述
编辑pod.yaml文件,重新打开自定义限制;
应用pod.yaml文件创建pod时报错,因为容器配置文件中设定的内存50Mi限制小于limitrange文件中规定的范围(最低为100Mi)
请添加图片描述

4.为namespace设置资源配额

  • 创建的ResourceQuota对象将在default名字空间中添加以下限制:
    每个容器必须设置内存请求(memory request),内存限额(memory limit),cpu请求(cpu request)和cpu限额(cpu limit)。
    所有容器的内存请求总额不得超过1 GiB;
    所有容器的内存限额总额不得超过2 GiB;
    所有容器的CPU请求总额不得超过1 CPU;
    所有容器的CPU限额总额不得超过2 CPU。

编辑limitrange.yaml配置文件
请添加图片描述
执行配额清单limitrange.yaml,查看资源配额
在这里插入图片描述
注意有了配额后,创建pod必须指定内存的上限和下限,cpu的上限和下限;
如果将内存限制注释,那么执行清单pod.yaml的时候会报错如下图:
请添加图片描述
重新编辑配置文件,指定内存和cpu的上下限;
应用配置,查看配额详细信息可以看到已使用的资源量
请添加图片描述
执行配额清单
请添加图片描述
将pod.yaml中的限制再次注释,改名为memory-demo-2
请添加图片描述
查看pod详细信息
请添加图片描述
查看其cpu和内存的限制
请添加图片描述
可以看到配额大小发生了变化
请添加图片描述
请添加图片描述
再次更改pod.yaml,打开限制,改名为memory-demo-3
请添加图片描述
此时pod创建失败,因为限额规定每个容器最大cpu使用量为1,而memory-demo-3的cpu限制为2
请添加图片描述
并查看配额,因为此时请求1个cpu,但是只剩了0.8个可以使用,因此无法为pod分配资源;
修改清单文件
请添加图片描述
执行清单,并查看配额;
可以看到,它的配额是在不断累加的,直至达到最大限制为之
请添加图片描述

5. 为Namespace 配置Pod配额

查看pod信息,有3个pod正在运行
请添加图片描述
ResourceQuota也可以限制namespace中运行的Pod数,超出设定则无法建立;
编辑limitrange.yaml,将ns中的pod数量配额限制为3
请添加图片描述
请添加图片描述
执行清单limitrange.yaml,查看配额信息
请添加图片描述
实验完毕之后,删除pod节点和配额
请添加图片描述

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐