什么是QoS?
在Kubernetes中,QoS(Quality of Service)可以被用来控制Pod的部署优先级。Kubernetes会根据容器的资源需求以及优先级来分配Pod资源。高优先级的Pod将会优先被调度。当所有节点无法再提供足够的资源时,Kubernetes会根据Pod的QoS等级来决定哪些Pod应该被驱逐,以便更高优先级的Pod能够获取足够的资源。
Kubernetes的三种QoS等级
Kubernetes定义了三种QoS等级,分别是:
- Guaranteed(保证)
- Burstable(弹性)
- BestEffort(尽力而为)
Guaranteed
Guaranteed是最高的QoS等级,又被称为QoS Class 1。Pod可以申请保证的CPU和内存资源,并且Kubernetes保证这些资源可用。如果Pod无法获得需要的资源,调度器将不会在其上运行。这种QoS等级的Pod优先级最高,将会被最后驱逐。
Burstable
Burstable是中等的QoS等级,又被称为QoS Class 2。Pod可以申请最小的CPU和内存资源,但是可以弹性请求更多的资源。因此,这些Pod在资源不足的情况下,将会率先被驱逐。
BestEffort
BestEffort是最低的QoS等级,又被称为QoS Class 3。Pod不会申请任何资源,只会使用系统的剩余资源。如果由于某些原因,系统资源不足,这些Pod将会被驱逐。
如何设置Pod的QoS等级
Pod的QoS等级是根据被定义的资源申请和优先级来计算的。Kubernetes将根据Pod所需的资源和申请的限制来计算每个容器的QoS等级。
设置Guaranteed等级
要将Pod设置为Guaranteed等级,需要指定每个容器的requests
和limits
字段的值相等。
----- ----------- - ----- ----- ------ ----- ---------- --------- ---- - ------- --- ------- ---- - ------- ---
设置Burstable等级
要将Pod设置为Burstable等级,需要为每个容器指定requests
字段的值,但不要指定limits
字段或者将其保持与requests
字段的值相同。
----- ----------- - ----- ----- ------ ----- ---------- --------- ---- ---- ------- -----
设置BestEffort等级
要将Pod设置为BestEffort等级,需要确保每个容器都没有设置requests
或limits
的值。
----- ----------- - ----- ----- ------ -----
QoS等级和Pod的驱逐
当节点上没有足够的资源来满足Pod的要求时,Kubernetes将使用以下顺序进行Pod的驱逐:
- 驱逐QoS等级为BestEffort的Pod。
- 如果还没有足够的资源,请驱逐QoS等级为Burstable的Pod。
- 最后,如果还没有足够的资源,请驱逐QoS等级为Guaranteed的Pod。
示例代码
以下是一个基础的nginx Pod,它设置了Guaranteed等级。
----------- -- ----- --- --------- ----- ---------------- ------- ----- -------- ----- ----------- - ----- ----- ------ ----- ------ - -------------- -- ---------- --------- ------- ------- ---- ----- ------- ------- ----- ---- ---
以下是一个设置了可变的Burstable等级的基础的nginx Pod。
----------- -- ----- --- --------- ----- --------------- ------- ----- -------- ----- ----------- - ----- ----- ------ ----- ------ - -------------- -- ---------- --------- ------- ------- ---- ------
以下是一个设置了BestEffort等级的基础的nginx Pod。
----------- -- ----- --- --------- ----- ---------------- ------- ----- -------- ----- ----------- - ----- ----- ------ ----- ------ - -------------- --
结论
QoS等级是对Kubernetes工作负载可用性进行控制的重要组成部分。通过正确设置QoS等级,管理员可以轻松地控制Pod的优先级和资源申请,以确保最关键的工作负载能够获得资源并保持可用性。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/670f8df95f5512810265535d