Linux企业运维——Kubernetes(十五)容器资源限制

Posted 是大姚呀

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux企业运维——Kubernetes(十五)容器资源限制相关的知识,希望对你有一定的参考价值。

Linux企业运维——Kubernetes(十五)容器资源限制

1、基本概念

在K8s中定义Pod中运行容器有两个维度的限制:

  • 资源需求:即运行Pod的节点必须满足运行Pod的最基本需求才能运行Pod。如: Pod运行至少需要2G内存,1核CPU
  • 资源限额:即运行Pod期间,可能内存使用量会增加,那最多能使用多少内存,这就是资源限额。

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为换算标准的。

2、内存限制

如果容器超过其内存限制,则会被终止。如果可重新启动,则与所有其他类型的运行时故障一样,kubelet 将重新启动它。
如果一个容器超过其内存请求,那么当节点内存不足时,它的 Pod 可能被逐出

真实主机将stress.tar发送给server1

server1加载该镜像然后将镜像上传至仓库

在server2上创建实验目录,编辑pod.yaml

设置容器内存为200M.但是限制其可使用的内存资源为100M

应用配置,查看pod状态,无法运行,因为其要使用的内存超出了我们给它限制的内存上限

删除之前的pod,重新编辑pod.yaml,将内存限制由100M改为300M

应用配置,查看pod状态,可以看到现在正常运行

3、CPU限制

server2编辑pod1.yaml,将容器的cpu上限设为10,下限设为5,使用2个cpu

应用配置,pod被创建,但是处于Pending状态,没有正常运行的原因是容器使用的cpu数量要在设定的上限和下限之间

使用kubectl describe pod cpu-demo查看pod详细信息,原因是调度失败

删除上一个pod,重新编辑pod1.yaml,将上下限分别修改为2和0.5

应用配置,cpu-demo被创建

查看pod状态,现在是正常运行了,实验完成将其删除

4、为namespace设置资源限制

编辑limitrange.yaml,在该配置文件中编辑最大最小内存和cpu限制以及默认运行参数限制

应用配置,
LimitRange 在 namespace 中施加的最小和最大内存限制只有在创建和更新 Pod 时才会被应用。改变 LimitRange 不会对之前创建的 Pod 造成影响。

现在将memory-demo配置文件中的内存限制注释掉

应用配置,查看pod详细信息

资源限制变成了我们在limitrange.yaml中设置的默认限制

编辑memory-demo配置文件,将容器的资源限定注释打开

应用配置,可以看到容器创建失败,因为容器配置文件中设定的内存限制小于limitrange文件中规定的范围

5、为namespace设置资源配额

编辑limitrange.yaml配置文件
创建的ResourceQuota对象将在default名字空间中添加以下限制:
每个容器必须设置内存请求(memoryrequest),内存限额(memorylimit),cpu请求(cpu request)和cpu限额(cpulimit)。
所有容器的内存请求总额不得超过1GiB。
所有容器的内存限额总额不得超过2GiB。
所有容器的CPU请求总额不得超过1 CPU。
所有容器的CPU限额总额不得超过2 CPU。

应用配置,查看资源配额,可以看到mem-cpu-demo

编辑pod.yaml,将资源限制注释掉

应用配置,可以看到容器创建失败,这是因为有了配额后,创建pod必须指定内存和cpu的上限和下限。

重新编辑配置文件,指定内存和cpu的上下限

应用配置,查看限额详细信息可以看到已使用资源量


配置pod.yaml,创建memory-demo-1,查看其已使用的资源量

查看pod详细信息,查看其cpu和内存的限制

编辑pod.yaml,设置内存和cpu的限制

应用配置,memory-demo-2创建失败,因为限额规定每个容器最大cpu使用量为1,而memory-demo-2的cpu限制为2

6、为namespace配置Pod配额

设置Pod配额以限制可以在namespace中运行的Pod数量
查看pod信息,有两个pod正在运行

编辑limitrange.yaml,将命名空间中的pod数量配额限制为2

查看限额信息,可以看到pod数量限额为2,已使用2

以上是关于Linux企业运维——Kubernetes(十五)容器资源限制的主要内容,如果未能解决你的问题,请参考以下文章

Linux企业运维——Kubernetes(十三)访问控制

Linux企业运维——Kubernetes(二十)Prometheus监控

Linux企业运维——Kubernetes(二十)Prometheus监控

Linux企业运维——Kubernetes(十四)PSP安全策略

Linux企业运维——Kubernetes(十六)容器资源监控

Linux企业运维——Kubernetes(十六)容器资源监控