k8s资源需求和限制,以及pod驱逐策略
容器的资源需求和资源限制
requests:需求,最低保障, 保证被调度的节点上⾄少有的资源配额
limits:限制,硬限制, 容器可以分配到的最⼤资源配额
QoS Class分类
示儿的诗意是什么
如果Pod中所有Container的所有Resource的limit和request都相等且不为0,则这个Pod的QoS Class就是Guaranteed。
中国成立时间注意,如果⼀个容器只指明了limit,⽽未指明request,则表明request的值等于limit的值。
矮墩墩
Burstable
⾄少有⼀个容器设置CPU或内存资源的requests属性
Best-Effort
如果Pod中所有容器的所有Resource的request和limit都没有赋值,则这个Pod的QoS Class就是Best-Effort.
画艾莎公主Qos Class优先级排名
Guaranteed > Burstable > Best-Effort连接打印机
可压缩资源与不可压缩资源
Pod 使⽤的资源最重要的是 CPU、内存和磁盘 IO,这些资源可以被分为可压缩资源(CPU)和不可压缩资源(内存,磁盘 IO)。可压缩资源(CPU)不会导致pod被驱逐
因为当 Pod 的 CPU 使⽤量很多时,系统可以通过重新分配权重来限制 Pod 的 CPU 使⽤
不可压缩资源(内存)则会导致pod被驱逐
于不可压缩资源来说,如果资源不⾜,也就⽆法继续申请资源(内存⽤完就是⽤完了),此时 Kubernetes 会从该节点上驱逐⼀定数量的 Pod,以保证该节点上有充⾜的资源。
那么,Kubernetes 为 Pod 设置这样三种 QoS 类别,具体有什么作⽤呢?实际上,QoS 划分的主要应⽤场景,是当宿主机资源紧张的时
候,kubelet 对 Pod 进⾏ Eviction(即资源回收)时需要⽤到的。具体地说,当 Kubernetes 所管理的宿主机上不可压缩资源短缺时,就有可能触发 Eviction。⽐如,可⽤内存(memory.available)、可⽤的宿主机磁盘空间(nodefs.available),以及容器运⾏时镜像存储空间(imagefs.available)等等。
⽬前,Kubernetes 为你设置的 Eviction 的默认阈值如下所⽰:
memory.available<100Mi
小孩记忆力不好
nodefs.available<10%
nodefs.inodesFree<5%
imagefs.available<15%
当然,上述各个触发条件在 kubelet ⾥都是可配置的。⽐如下⾯这个例⼦:
美术本kubelet --eviction-hard=imagefs.available<10%,memory.available<500Mi,nodefs.available<5%,nodefs.inodesFree<5% --eviction-
snowy怎么读
soft=imagefs.available<30%,nodefs.available<10% --eviction-soft-grace-period=imagefs.available=2m,nodefs.available=2m --eviction-max-pod-grace-period=600
在这个配置中,你可以看到 Eviction 在 Kubernetes ⾥其实分为 Soft 和 Hard 两种模式。
其中,Soft Eviction 允许你为 Eviction 过程设置⼀段“优雅时间”,⽐如上⾯例⼦⾥的 imagefs.available=2m,就意味着当 imagefs 不⾜的阈值达到 2 分钟之后,kubelet 才会开始 Eviction 的过程。
⽽ Hard Eviction 模式下,Eviction 过程就会在阈值达到之后⽴刻开始。Kubernetes 计算 Eviction 阈值的数据来源,主要依赖于从 Cgroups 读取到的值,以及使⽤ cAdvisor 监控到的数据。当宿主机的 Eviction 阈值达到后,就会进⼊ MemoryPressure 或者 DiskPressure 状态,从⽽避免新的 Pod 被调
度到这台宿主机上。⽽当 Eviction 发⽣的时候,kubelet 具体会挑选哪些 Pod 进⾏删除操作,就需要参考这些 Pod 的 QoS 类别了。⾸当其冲的,⾃然是 BestEffort 类别的 Pod。其次,是属于 Burstable 类别、并且发⽣“饥饿”的资源使⽤量已经超出了 requests 的Pod。最后,才是 Guaranteed 类别。并且,Kubernetes 会保证只有当 Guaranteed 类别的 Pod 的资源使⽤量超过了其 limits 的限制,或者宿主机本⾝正处于 Memory Pressure 状态时,Guaranteed 的 Pod 才可能被选中进⾏ Eviction 操作。当然,对于同 QoS 类别的 Pod 来
说,Kubernetes 还会根据 Pod 的优先级来进⾏进⼀步地排序和选择。