K8S Resources-多维度集群资源管理

一个 Pod 到底是限制使用呢,还是不限制使用好呢,如果限制给它多少的CPU,多事内存合适呢?从整个集群的视角来看,如何规划资源的使用呢?这些问题是我们每个用户都需要面临的。

初始 Resources

  • CPU
  • 内存
  • GPU
  • 持久化存储

其中CPU、内存是最基础最常用的一种资源类型。

file

核心设计

  • Requests(至少分配):表示容器希望被分配到的可以完全保证的一个资源量,它会给调度器,调度器会使用这个值来参与它的调度策略的一系列计算,从而给我们找到最优的节点。
  • Limits(最多分配) :容器能够使用的一个资源的上限,当整个节点资源不足时,发生竞争的时候,会参考这个值来进行运算,从而做出进一步的决策。

file

服务的可靠性是用这两个值来区分:

  • Requests == Limits
  • 不设置(不建议)
  • Limits > Requests
kubectl describe limits -n test

file

kubectl get deploy -n test -o yaml

file

删除:

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

为者常成,行者常至