K8S Resources-多维度集群资源管理
一个 Pod 到底是限制使用呢,还是不限制使用好呢,如果限制给它多少的CPU,多事内存合适呢?从整个集群的视角来看,如何规划资源的使用呢?这些问题是我们每个用户都需要面临的。
初始 Resources
- CPU
- 内存
- GPU
- 持久化存储
其中CPU、内存是最基础最常用的一种资源类型。
核心设计
- Requests(至少分配):表示容器希望被分配到的可以完全保证的一个资源量,它会给调度器,调度器会使用这个值来参与它的调度策略的一系列计算,从而给我们找到最优的节点。
- Limits(最多分配) :容器能够使用的一个资源的上限,当整个节点资源不足时,发生竞争的时候,会参考这个值来进行运算,从而做出进一步的决策。
服务的可靠性是用这两个值来区分:
- Requests == Limits
- 不设置(不建议)
- Limits > Requests
kubectl describe limits -n test
kubectl get deploy -n test -o yaml
删除:
kubectl delete -f object-count.yaml
Pod 驱逐 - Eviction
常见的驱逐策略配置
- --eviction-soft=memory.available < 1.5Gi
- --eviction-soft-grace-period=memory.available=1m30s
磁盘紧缺:
- 删除死掉的Pod、容器
- 删除没用的容器
- 按优先级、资源占用情况驱逐pod
内存紧缺
- 驱逐不可靠的 pod (也就是占用内存最大的pod)
- 驱逐基本可靠的pod(删除实际内存大于requests 的内存,超过的越多,则会优先删除)
- 驱逐可靠的pod
为者常成,行者常至
自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)