
目录
基本概念
内存限制
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.yamlCPU限制
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
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)