K8S 资源管理和调度| 青训营笔记

145 阅读2分钟

这是我参与「第四届青训营」笔记创作活动的的第8天

k8s中的Resource,目前支持类型:

  • cpu,单位为Core(此处1 Core实际指一个Hyperthread),1 millicore=0.001Core
  • memory,单位Byte
  • storage
  • ephemeral-storage:容器日志、emptyDir、可写入的容器镜像层
  • hugepages-:目前属于Pod级别的资源
  • 自定义资源(如GPU):配置时,指定的数量必须为整数。

目前资源配置主要分成request(需要的数量)和limit(资源的界限)两种类型。

调度Pod时,调度器只会使用request进行调度(同时会考虑kubelet的--max-pods参数,默认110)

临时存储功能(默认不启动)启动后Pod挂载的emptyDir不能超过sizeLimit、Container对本地临时存储的使用量不能超过其Limit、Pod对本地临时存储的使用量不能超过所有Container的Limit之和,否则会被驱逐

巨页的request必须等于limit,多尺寸的巨页默认不支持。

自定义资源的request必须等于limit。

Pod服务质量(Qos)配置

根据CPU、内存资源的需求,对Pod的服务质量进行分类:

  • Guaranteed:Pod中每个容器都有CPU、内存的request以及limit声明,且request=limit
  • Burstable:CPU、内存的request≠limit,或者只填写了其中一种资源
  • BestEffort:没有任何request和limit

当节点上配额资源不足,kubelet会把一些低优先级的,或者说服务质量要求不高的Pod驱逐掉(先BestEffort再Burstable)。

 

CPU是按request来划分权重的,服务质量要求不高的Pod,request可以填很小的数字或者不填,Pod的权重就会非常低。

kubelet的参数cpu-manager-policy=static时,如果Guaranteed Qos的Pod的CPU的request是整数,会进行绑核;CPU的request不是整数的Guaranteed/Burstable/BestEffort,它们要用的CPU会组成一个CPU share pool,根据不同的权重划分时间片。

 

memory上也会按照不同的Qos划分OOMScore。物理机出现OOM时会优先kill掉OOMScore得分高的Pod。

    Guaranteed:会配置默认的-998的OOMScore;

    Burstable:会根据内存设计的大小和节点的关系(申请资源越多得分越低)来分配 2~999的OOMScore;

    BestEffort:会固定分配1000的OOMScore