Kubernetes QoS控制详解

什么是QoS?

在Kubernetes中,QoS(Quality of Service)可以被用来控制Pod的部署优先级。Kubernetes会根据容器的资源需求以及优先级来分配Pod资源。高优先级的Pod将会优先被调度。当所有节点无法再提供足够的资源时,Kubernetes会根据Pod的QoS等级来决定哪些Pod应该被驱逐,以便更高优先级的Pod能够获取足够的资源。

Kubernetes的三种QoS等级

Kubernetes定义了三种QoS等级,分别是:

  1. Guaranteed(保证)
  2. Burstable(弹性)
  3. 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等级,需要指定每个容器的requestslimits字段的值相等。

-----
  -----------
  - ----- -----
    ------ -----
    ----------
      ---------
        ---- -
        ------- ---
      -------
        ---- -
        ------- ---

设置Burstable等级

要将Pod设置为Burstable等级,需要为每个容器指定requests字段的值,但不要指定limits字段或者将其保持与requests字段的值相同。

-----
  -----------
  - ----- -----
    ------ -----
    ----------
      ---------
        ---- ----
        ------- -----

设置BestEffort等级

要将Pod设置为BestEffort等级,需要确保每个容器都没有设置requestslimits的值。

-----
  -----------
  - ----- -----
    ------ -----

QoS等级和Pod的驱逐

当节点上没有足够的资源来满足Pod的要求时,Kubernetes将使用以下顺序进行Pod的驱逐:

  1. 驱逐QoS等级为BestEffort的Pod。
  2. 如果还没有足够的资源,请驱逐QoS等级为Burstable的Pod。
  3. 最后,如果还没有足够的资源,请驱逐QoS等级为Guaranteed的Pod。

示例代码

以下是一个基础的nginx Pod,它设置了Guaranteed等级。

----------- --
----- ---
---------
  ----- ----------------
  -------
    ----- --------
-----
  -----------
  - ----- -----
    ------ -----
    ------
    - -------------- --
    ----------
      ---------
        ------- -------
        ---- -----
      -------
        ------- -----
        ---- ---

以下是一个设置了可变的Burstable等级的基础的nginx Pod。

----------- --
----- ---
---------
  ----- ---------------
  -------
    ----- --------
-----
  -----------
  - ----- -----
    ------ -----
    ------
    - -------------- --
    ----------
      ---------
        ------- -------
        ---- ------

以下是一个设置了BestEffort等级的基础的nginx Pod。

----------- --
----- ---
---------
  ----- ----------------
  -------
    ----- --------
-----
  -----------
  - ----- -----
    ------ -----
    ------
    - -------------- --

结论

QoS等级是对Kubernetes工作负载可用性进行控制的重要组成部分。通过正确设置QoS等级,管理员可以轻松地控制Pod的优先级和资源申请,以确保最关键的工作负载能够获得资源并保持可用性。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/670f8df95f5512810265535d