Linux企业运维——Kubernetes(十五)容器资源限制
Posted 是大姚呀
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux企业运维——Kubernetes(十五)容器资源限制相关的知识,希望对你有一定的参考价值。
Linux企业运维——Kubernetes(十五)容器资源限制
文章目录
一、基本概念
在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为换算标准的。
二、内存限制
如果容器超过其内存限制,则会被终止。如果可重新启动,则与所有其他类型的运行时故障一样,kubelet 将重新启动它。
如果一个容器超过其内存请求,那么当节点内存不足时,它的 Pod 可能被逐出
真实主机将stress.tar发送给server1
server1加载该镜像然后将镜像上传至仓库
在server2上创建实验目录,编辑pod.yaml
设置容器内存为200M.但是限制其可使用的内存资源为100M
应用配置,查看pod状态,无法运行,因为其要使用的内存超出了我们给它限制的内存上限
删除之前的pod,重新编辑pod.yaml,将内存限制由100M改为300M
应用配置,查看pod状态,可以看到现在正常运行
三、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状态,现在是正常运行了,实验完成将其删除
四、配置namespace资源
4.1、为namespace设置资源限制
编辑limitrange.yaml,在该配置文件中编辑最大最小内存和cpu限制以及默认运行参数限制
应用配置,
LimitRange 在 namespace 中施加的最小和最大内存限制只有在创建和更新 Pod 时才会被应用。改变 LimitRange 不会对之前创建的 Pod 造成影响。
现在将memory-demo配置文件中的内存限制注释掉
应用配置,查看pod详细信息
资源限制变成了我们在limitrange.yaml中设置的默认限制
编辑memory-demo配置文件,将容器的资源限定注释打开
应用配置,可以看到容器创建失败,因为容器配置文件中设定的内存限制小于limitrange文件中规定的范围
4.2、为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
4.3、为namespace配置Pod配额
设置Pod配额以限制可以在namespace中运行的Pod数量
查看pod信息,有两个pod正在运行
编辑limitrange.yaml,将命名空间中的pod数量配额限制为2
查看限额信息,可以看到pod数量限额为2,已使用2
以上是关于Linux企业运维——Kubernetes(十五)容器资源限制的主要内容,如果未能解决你的问题,请参考以下文章
Linux企业运维——Kubernetes(二十)Prometheus监控
Linux企业运维——Kubernetes(二十)Prometheus监控
Linux企业运维——Kubernetes(十四)PSP安全策略