目录
基本概念
内存限制
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都有限制
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



