Kubernetes 中的 Vertical Pod Autoscaler

阅读时长 6 分钟读完

概述

Kubernetes 是一个流行的容器编排平台,为开发者提供了一种便捷的方式来管理和扩展他们的应用程序。在 Kubernetes 中,Pod 是最小的基本单位,而在 Pod 内,容器是真正运行应用程序的地方。在大多数情况下,Pod 中只运行一个容器,但有时需要在一个 Pod 中运行多个容器。这样做有很多好处,例如容器间通信更容易、共享网络和存储等。

在 Kubernetes 中,Pod 的大小是由开发者手动指定的。但是,这个指定的大小可能不是最优的,尤其是在应用程序的负载变化的情况下。由于应用程序负载的变化,可能会导致 Pod 中容器的资源利用率不够高,或者容器中运行的应用程序会持续不断地申请更多的资源。这些问题都可以通过 Kubernetes 中的 Vertical Pod Autoscaler(VPA)来解决。

VPA 的使用和工作原理

VPA 是 Kubernetes 的一个插件,可以自动调整 Pod 中容器的资源限制。它可以根据容器内的度量(例如 CPU 和内存利用率)自动调整 Pod 中容器的内存、CPU 请求和限制。它可以让 Pod 更加智能,与应用程序的负载自适应,实现自动化调整。

在 Kubernetes 中,VPA 可以与 HPA(Horizontal Pod Autoscaler)一起使用来满足不同的负载要求。负载变化时,HPA 会增加或减少 Pod 的数量,而 VPA 会调整 Pod 中每个容器的资源需求。这样一来,Kubernetes 中的应用程序可以更加适应负载。

VPA 可以基于容器的每个度量指标进行调整。在 Kubernetes 中,有两种不同的 VPA 模式。

  • Recommended: 这种模式中,VPA 推荐应用程序使用的资源请求和限制。这意味着容器进程可以超过其请求的资源,但不能超过容器的限制。这样可以确保在负载变化的情况下,应用程序将具有足够的资源来保持其稳定性。
  • Exact: 这种模式中,VPA 将确切的资源限制作为每个容器的请求。这意味着在负载变化时,容器进程不会超过其请求的资源限制。这可以确保在所有情况下,容器(即应用程序)都具有可靠的资源。

使用实例

下面,我们来看一个使用 Vertical Pod Autoscaler 的实例。首先,我们需要创建一个 Deployment,并进行初始化设置:

-- -------------------- ---- -------
----------- -------
----- ----------
---------
  ----- -------------
-----
  ---------
    ------------
      ---- ------
  --------- -
  ---------
    ---------
      -------
        ---- ------
    -----
      -----------
      - ----- ------------
        ------ --------
        ----------
          ---------
            ------- ------
            ---- ------
          -------
            ---- ------
            ------- -------
展开代码

上述代码创建了一个 Deployment,其中包含一个名为 my-container 的应用程序容器。该容器需要 0.25 vCPU 和 64 MB 内存的请求,并且允许最多使用 0.5 vCPU 和 128 MB 内存的限制。接下来,让我们使用 VPA 来调整容器的资源要求。

首先,我们需要创建一个 VPA 对象,它定义了我们需要使用的模式,以及所需的度量。在这个例子中,我们将使用 Recommended 模式,并度量 CPU 利用率:

-- -------------------- ---- -------
----------- --------------------------
----- ---------------------
---------
  ----- ------
-----
  ----------
    ----------- ---------
    -----       ----------
    -----       -------------
  -------------
    ----------- ------
  ---------------
    ------------------
    - -------------- ------------
      -----------
        ---- ----
        ------- ----
      -----------
        ---- ----
        ------- -----
      --------------------
      - ---
      - ------
  ----- -------------
  -------------
    ----------- ------
展开代码

这个 VPA 对象将与名为 my-deployment 的 Deployment 关联,控制其内的容器。它还指定了使用 Recommended 模式和 CPU 利用率作为度量。在 resourcePolicy 字段中,我们指定了 my-container 对于 CPU 和内存的最小和最大值,以及以这些资源作为需要调整的指标。最后,我们将 updateMode 设置为 Auto。

要应用此 VPA 对象,请使用以下命令:

然后,我们可以使用以下命令来监视 Pod 和容器的资源使用情况:

接下来,模拟 Pod 中容器的负载变化。该负载变化可以通过创建新的 Deployment 对象,并将其扩展到多个 Pod。在这个例子中,我们将使用名为 my-load-test 的新 Deployment:

-- -------------------- ---- -------
----------- -------
----- ----------
---------
  ----- ------------
-----
  ---------
    ------------
      ---- ------
  --------- -
  ---------
    ---------
      -------
        ---- ------
    -----
      -----------
      - ----- ------------
        ------ --------
展开代码

这个 Deployment 将创建 4 个 Pod,同时运行 my-app 容器。

现在,使用以下命令来监视 VPA 的工作,并确定是否自动调整容器内的资源请求:

如果 VPA 正常工作,它应该在负载变化时自动调整容器的资源需求,以确保应用程序的可靠性和性能。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67ca76a0e46428fe9e2a8f26

纠错
反馈

纠错反馈