k8s学习笔记(六):限制pod内存资源的使用
k8s如何限制pod的内存资源的使用?一篇文章教你搞懂!
限制pod内存资源的使用
参考官方文档:https://kubernetes.io/zh-cn/docs/tasks/configure-pod-container/assign-memory-resource/
将内存请求(request)和内存限制(limit)分配给一个容器。 我们保障容器拥有它请求数量的内存,但不允许使用超过限制数量的内存
一.安装metrics-server
因为查看节点的资源使用情况需要用到kubectl top命令,但该命令需要提前安装metrics-server才能使用
1.下载metrics-server的yaml文件
[root@k8s-master ~]# wget https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml
2.修改yaml文件,新增两行配置
[root@k8s-master ~]# vim components.yaml
yaml文件134行args指令处修改如下:
3.创建metrics-server的pod
[root@k8s-master ~]# kubectl apply -f components.yaml
提醒:因为要去谷歌去下载镜像,很有可能会拉不下来,导致pod启动失败
建议:最好先准备好metrics-server的镜像,然后docker load -i 导入镜像
我这里就是直接使用准备好的镜像。
4.将metrics-server的镜像包上传到linux,docker load导入镜像包
[root@k8s-master ~]# docker load -i metrics-server-v0.6.3.tar
5.查看metrics-server的pod
[root@k8s-master ~]# kubectl apply -f components.yaml
[root@k8s-master ~]# kubectl get pod -n kube-system
6.查看节点资源使用情况
[root@k8s-master ~]# kubectl top node
NAME CPU(cores) CPU% MEMORY(bytes) MEMORY%
k8s-master 421m 10% 1135Mi 66%
k8s-node-1 199m 4% 702Mi 40%
k8s-node-2 254m 6% 671Mi 39%
[root@k8s-master ~]# kubectl top pod
NAME CPU(cores) MEMORY(bytes)
quota-mem-cpu-demo-2 2m 1Mi
发现kubectl可以正常使用了!
二、创建命名空间
[root@k8s-master ~]# kubectl create namespace mem-example
namespace/mem-example created
三、指定内存请求和限制
创建一个命名空间,以便将本练习中创建的资源与集群的其余部分隔离
1.创建pod
创建一个拥有一个容器的 Pod。 容器将会请求 100 MiB 内存,并且内存会被限制在 200 MiB 以内。 这是 Pod 的配置文件
[root@k8s-master ~]# kubectl apply -f https://k8s.io/examples/pods/resource/memory-request-limit.yaml --namespace=mem-example
2.查看pod是否运行
[root@k8s-master ~]# kubectl get pod memory-demo -n mem-example
NAME READY STATUS RESTARTS AGE
memory-demo 1/1 Running 0 69s
3.查看pod详细信息
[root@k8s-master ~]# kubectl get pod memory-demo --output=yaml -n mem-example
申请了100M的内存,最大可以使用200M内存
4.kubectl top查看pod指标数据
[root@k8s-master ~]# kubectl top pod -n mem-example
NAME CPU(cores) MEMORY(bytes)
memory-demo 61m 150Mi
输出结果显示:Pod 正在使用的内存大约为 162,900,000 字节,约为 150 MiB。 这大于 Pod 请求的 100 MiB,但在 Pod 限制的 200 MiB之内。
5.删除pod
[root@k8s-master ~]# kubectl delete pod memory-demo -n mem-example
四、超出容器限制的内存
1.创建pod
创建一个 Pod,尝试分配超出其限制的内存。 这是一个 Pod 的配置文件,其拥有一个容器,该容器的内存请求为 50 MiB,内存限制为 100 MiB
[root@k8s-master ~]# kubectl apply -f https://k8s.io/examples/pods/resource/memory-request-limit-2.yaml --namespace=mem-example
2.多次查看pod运行状态
[root@k8s-master ~]# kubectl get pod memory-demo-2 -n mem-example
发现pod在被反复的杀死和重启
3.查看pod运行的详细信息
[root@k8s-master ~]# kubectl describe pod memory-demo-2 -n mem-example
可以看到pod在被反复的杀死和重启!
4.删除pod
[root@k8s-master ~]# kubectl delete pod memory-demo-2 -n mem-example
五、超过整个节点容量的内存
1.创建pod
创建一个 Pod,其内存请求超过了你集群中的任意一个节点所拥有的内存。 这是该 Pod 的配置文件,其拥有一个请求 1000 GiB 内存的容器,这应该超过了你集群中任何节点的容量
[root@k8s-master ~]# kubectl apply -f https://k8s.io/examples/pods/resource/memory-request-limit-3.yaml --namespace=mem-example
pod/memory-demo-3 create
2.查看pod状态
[root@k8s-master ~]# kubectl get pod memory-demo-3 -n mem-example
NAME READY STATUS RESTARTS AGE
memory-demo-3 0/1 Pending 0 60s
发现pod处于pending状态,挂起状态,代表申请的内存资源超过了节点的内存资源,处于被挂起状态
3.查看pod详细信息
[root@k8s-master ~]# kubectl describe pod memory-demo-3 -n mem-example
输出结果: Warning FailedScheduling 55s (x3 over 119s) default-scheduler 0/3 nodes are available: 1 node(s) had taint {node-role.kubernetes.io/master: }, that the pod didn't tolerate, 2 Insufficient memory.
由于节点内存不足,该容器无法被调度
4.删除pod
[root@k8s-master ~]# kubectl delete pod memory-demo-3 -n mem-example
pod "memory-demo-3" deleted
六、删除命名空间
[root@k8s-master ~]# kubectl delete namespace mem-example
namespace "mem-example" deleted
更多推荐
所有评论(0)