K8s---容器资源限制

K8s---容器资源限制,第1张

K8s---容器资源限制

目录

基本概念

内存限制

 CPU限制

 配置namespace资源

为namespace设置资源限制:

为namespace设置资源配额

数量配置:为 Namespace 配置Pod配额


基本概念

在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

docker load -i stress.tar 
docker push reg.westos.org/library/stress:latest

server2:

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

kubectl apply -f demo.yaml 
kubectl get pod
kubectl delete -f pod/deploy.yml 
kubectl get pod
kubectl describe pod memory-demo 
kubectl logs memory-demo 
报错:直接被kill了,因为超出了内存需求

vim demo.yaml 
【限制最多不能超过300】

kubectl delete -f demo.yaml 
kubectl apply -f demo.yaml 
kubectl get pod
可以看到状态已经就绪
kubectl delete -f demo.yaml

 CPU限制
vim demo.yaml 
将上下限分别修改为2和0.5,使用两个cpu

kubectl apply -f demo.yaml 

kubectl get pod
状态是running

kubectl delete -f demo.yaml 

vim demo.yaml 
kubectl apply -f demo.yaml 
kubectl get pod
状态是pending(节点上需求无法满足)
kubectl delete -f demo.yaml 

 配置namespace资源 为namespace设置资源限制:
vim demo.yaml 
kubectl apply -f demo.yaml 
kubectl get limitranges 
kubectl describe limitranges 
kubectl run demo --image=nginx
创建一个pod
kubectl get pod
kubectl describe pod demo 
可以看到刚才没有加资源限制。但是Limits和Requests都有限制

kubectl describe limitranges 
kubectl delete pod demo 
mkdir limit
cd limit/
mv ../demo.yaml .
vim pod.yaml

kubectl apply -f pod.yaml 
创建报错(因为最大cpu使用是1,但是这里limit设置的是2)

kubectl describe limitranges 
vim pod.yaml

kubectl apply -f pod.yaml
都使其满足要求后创建成功
kubectl get pod
kubectl delete -f  pod.yaml 

 

为namespace设置资源配额:
vim demo.yaml 
kubectl apply -f demo.yaml 
kubectl get resourcequotas 
kubectl run demo1 --image=nginx
kubectl get pod
kubectl get resourcequotas 
可以看到资源配额已经变了(会时时计算这个pod内所有的pod)

kubectl run demo2 --image=nginx
kubectl get resourcequotas 
kubectl run demo3 --image=nginx
kubectl get resourcequotas 
kubectl run demo4 --image=nginx
kubectl get resourcequotas 
这个时候资源上限刚刚好,没有超,不会影响到pod

kubectl get pod

kubectl run demo5 --image=nginx
再次创建demo5就会报错,因为配额到上限了
kubectl delete pod --all
回收掉所有的pod

kubectl get limitranges 
kubectl delete limitranges limitrange-memory 

kubectl get resourcequotas 
现在只剩配额没有资源限制

kubectl run demo1 --image=nginx
创建pod报错(必须要指定资源限制,不然不能计算资源配额)

kubectl apply -f demo.yaml 

kubectl get limitranges 
创建之后资源限制又有了

kubectl run demo1 --image=nginx
创建pod就没有报错了

kubectl describe pod demo1 
kubectl get pod

数量配置:为 Namespace 配置Pod配额
vim demo.yaml 
kubectl apply -f demo.yaml 
kubectl describe resourcequotas 
kubectl run demo2 --image=nginx
kubectl describe resourcequotas 

kubectl run demo3 --image=nginx
报错原因:资源有,但是pod数量上限了

kubectl delete -f demo.yaml 
kubectl delete pod --all

 

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/zaji/5704779.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-12-17
下一篇2022-12-17

发表评论

登录后才能评论

评论列表(0条)

    保存