如何在 Kubernetes 中使用 Autoscaling

Autoscaling 是一种可以自动调整 Kubernetes 集群资源的机制,它根据当前负载动态地增加或减少所需的节点。这样可以确保系统能够遇到负载高峰时仍然维持可用性,同时在负载较低时也不会浪费资源。

本篇文章将介绍 Kubernetes Autoscaling 机制的工作原理以及如何使用它。

Kubernetes Autoscaling 的工作原理

在 Kubernetes 中,可以使用两种类型的 Autoscaling:

  • 横向 Pod Autoscaling(Horizontal Pod Autoscaler,HPA):它可以根据 Pod 中的 CPU 使用率或自定义指标来动态地增加或减少 Pod 的数量,以确保能够满足工作负载的需要。
  • 节点横向 Autoscaling(Node Horizontal Autoscaling,NPA):它可以根据节点的资源利用率来动态地增加或减少节点的数量,从而提高系统的可用性。

现在,我们将看到如何使用这两种类型的 Kubernetes Autoscaling。

横向 Pod Autoscaling(HPA)

在 Kubernetes 中,可以使用 Horizontal Pod Autoscaler (简称 HPA)来为 Pod 的动态伸缩设置自动化规则。下面是如何在 Kubernetes 中使用 HPA:

步骤 1:创建 Deployment

首先,需要创建 Deployment,为 Pod 提供动态伸缩。下面是一个包含一个 nginx 容器的 Deployment 示例:

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

步骤 2:创建 HPA

接下来,您可以创建 HPA 对象。下面是创建 HPA 的示例文件,该文件定义了 HPA 应该如何执行:

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

说明

  • spec.scaleTargetRef 告诉 Kubernetes 需要对哪个 Deployment 进行 Autoscaling
  • spec.minReplicas 代表最小副本数量。
  • spec.maxReplicas 代表最大副本数量。
  • spec.targetCPUUtilizationPercentage 代表需要维护的 CPU 利用率。

步骤 3:测试 HPA

现在可以开始测试 HPA。在本示例中,可以模拟负载来测试,如下所示:

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

之后,可以发出一些类似于下面的命令:

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

这会开始模拟负载,并随着时间的推移调整 Pod 的数量,从而维护资源利用率。

节点横向 Autoscaling(NPA)

在 Kubernetes 中,还有一种叫做节点横向 Autoscaling(NPA)的特性。您可以使用它来根据节点的资源利用率来动态调整集群中的节点数,从而提高集群的可用性。下面是使用 NPA 的步骤:

步骤 1:启用 Autoscaling

首先,需要启用 NPA 特性。可以通过在 kube-controller-manager 的启动参数中添加 --horizontal-pod-autoscaler-use-rest-clients=true 开启 Autoscaling 特性。例如:

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

步骤 2:创建 Deployment

接下来,创建一个带有可扩展性更高的 nginx Deployment:

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

步骤 3:创建 NPA

现在可以创建一个 NPA 对象,以便根据节点资源利用率自动增加或减少节点数量。下面是一个 NPA 的示例文件:

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

说明

  • spec.nodeThresholds.type 是资源利用率的类型
  • spec.nodeThresholds.targetUtilizationPercentage 是资源利用率的百分比
  • spec.nodeThresholds.targetNodeCount 是目标节点数量

步骤 4:测试 NPA

在完成上述步骤之后,NPA 将开始监控节点的资源使用情况,以确定是否需要增加或减少节点。

例如,可以使用以下命令获取节点状态并检查是否自动缩放:

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

这会显示当前节点的状态,当节点进行缩放操作时会自动更新。

结论

在本文中,我介绍了 Kubernetes Autoscaling 的工作原理,并介绍了如何使用 HPA 和 NPA。通过使用 Kubernetes Autoscaling,您可以确保任何时候都能够满足负载需求,同时避免浪费资源。希望这篇文章能够对您进行指导并提供帮助。

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