一、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节点和配额