为Pod中的容器申请资源
1 | request 资源请求 |
创建包含 requests 请求资源的 Pod
1 | [root@k8s-master1 request]# vim requests-pod.yaml |
1 | Mem: 1180484K used, 2699924K free, 1008K shrd, 36844K buff, 666140K cached |
资源 requests 如何影响调度
1 | # 调度器判断一个Pod是否适合调度到某个节点 |
查看节点资源总量
1 | [root@k8s-master1 request]# kubectl describe node k8s-node2 |
模拟超出请求资源总量
1 | # 模拟现在有一个申请3个CPU的Pod 超出我们的node资源总量 |
限制容器的可用资源
设置容器可用资源的硬限制
1 | # cpu是可压缩资源,内存是不可压缩资源 |
创建包含 limits 限制资源的 Pod
1 | [root@k8s-master1 request]# vim limits-pod.yaml |
超过 limits
1 | 1. 如果进程尝试申请比限额更多的内存时,会被杀掉(OOM) |
容器中的应用如何看待 limits
1 | Mem: 1247588K used, 2632820K free, 1008K shrd, 77436K buff, 681992K cached |
了解 Pod QoS 等级
1 | # 当节点无法提供所有Pod指定的资源的Limis之和怎么办 |
1 | 1. BestEffort (优先级最低) |
BestEffort 等级
1 | 1. 最低优先级的BestEffort 会分配给没有(为任何容器)设置任何requests和limits的Pod |
Guaranteed 等级
1 | 1. CPU和内存都要设置 requests和limits |
Burstable 等级
1 | 1. Burstable 介于前两者之间,其他的Pod都属于这个等级 |
查看Pod的等级
1 | [root@k8s-master1 request]# kubectl describe pod limits-pod |
内存不足时 哪类进程会先被杀死
1 | 1. BestEffort (优先级最低) 最先被杀掉 |
为命名空间的Pod设置 requests 和 limits
LimitRange
1 | # 通过该资源为命名空间下的Pod配置资源限制 |
1 | [root@k8s-master1 request]# vim limits.yaml |
1 | [root@k8s-master1 request]# vim limits.yaml |
1 | # 测试限制 |
1 | # 总结: |
ResourceQuota
1 | 1. Limitrange应用于单独的Pod,ResourceQuota 应用于命名空间中所有的Pod |
1 | [root@k8s-master1 request]# kubectl create -f quota-cpu-memory.yaml |
1 | # 总结 |
监控 Pod 的资源使用量
1 | 1. Kubernetes 中的组件 Metrics Server 持续采集所有 Pod 副本的指标数据。 (heapster 在k8s 1.13 版本后 被弃用了) |
部署 Metrics Server
1 | [root@k8s-master1 demo]# unzip metrics-server.zip |