K8s QoS Pod资源服务质量控制

Kubernetes 中如果一个 Node 节点上的 Pod 占用资源过多并且不断飙升导致 Node 节点资源不足,可能会导致为了保证节点可用,将容器被杀掉。在遇见这种情况时候,我们希望先杀掉那些不太重要的容器,确保核心容器不会首先被杀掉。为了衡量先杀掉哪个程序,所以推出了优先级机制 QoS (Quality of Service)来做判断,Kubernetes 将容器划分为三种 QoS 等级:

Guaranteed: 完全可靠的。
Burstable: 较可靠的。
BestEffort: 不太可靠的。

在 Kubernetes 中资源不足时,根据 QoS 等级杀死 Pod 会有以下特点:

BestEffort Pod: 优先级最低,在 Kubernetes 资源不足时候会将此 Pod 先杀掉。
Burstable Pod: 优先级居中,如果整个系统内存资源不足,且已经杀完全部 BestEffort 等级的 Pod 时可能被杀掉。
Guaranteed Pod: 优先级最高,一般情况下不会被杀掉,除非资源不足且系统 BestEffort 和 Burstable 的 Pod 都不存在的情况下,才可能被杀掉。

 Kubernetes 中 Qos 等级是根据 Limits 和 Requests 这两个参数设置的值息息相关,Kubernetes 会根据这两个值的不同而给 Pod 设置不同的 QoS 等级。

(1)、Guaranteed (等级-最高)

       如果 Pod 中所有容器都定义了 Limits 和 Requests,并且全部容器的 Limits 值 = Requests 值(值不能为0),那么该 Pod 的 QoS 级别就是 Guaranteed。

注意:这种情况下容器可以只设置 Limits 值即可,引入在只设置 Limits 不设置 Requests 情况下,Requests 值默认等于 Limits 的值。

(2)、BestEffort(等级-最低)

       如果 Pod 中所有容器都未定义 Requests 和 Limits 值,该 Pod 的 Qos 即为 BestEffort。

(3)、Burstable(等级-中等)

       当一个 Pod 既不是 Guaranteed 级别,也不说 BestEffort 级别时候,该 Pod 的 QoS 级别就是 Burstable。例如,Pod 中全部或者部分容器 Requests 和 Limits 都定义,且 Requests 小于 Limits 值,或者 Pod 中一部分容器未定义 Requests 和 Limits 资源时。

转:http://www.mydlq.club/article/36/

作者:tigergao
功不唐捐 玉汝于成
原文地址:https://www.cnblogs.com/tigergaonotes/p/14739078.html