这是我参与「第四届青训营」笔记创作活动的的第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