Kubernetes 中使用 Horizontal Pod Autoscaling 进行自动扩容

什么是 Horizontal Pod Autoscaling

Kubernetes 中的 Horizontal Pod Autoscaling (HPA) 是一种自动扩容机制,它会根据 CPU 使用率或者自定义的指标自动扩缩容 Pod 的数量,以确保集群中的运行状态稳定。HPA 通常用于处理持续的负载波动或者快速增长的流量,这些情况下手动扩容是不可行的。

如何使用 Horizontal Pod Autoscaling

使用 HPA 之前,需要确保以下条件:

  • Kubernetes 集群部署完成;
  • 安装了 Metrics Server;
  • Deployment 或者 ReplicaSet 在创建时定义了需要自动扩容的 CPU 使用率或自定义指标。

下面以 CPU 使用率为例,演示如何使用 Horizontal Pod Autoscaling。

  1. 定义 Deployment 首先,我们需要定义一个 Deployment 并设置 resources.requests.cpu 为默认值。以下是一个示例 YAML 文件。
----------- -------
----- ----------
---------
  ----- ----------------
  -------
    ---- -----
-----
  --------- -
  ---------
    ------------
      ---- -----
  ---------
    ---------
      -------
        ---- -----
    -----
      -----------
      - ----- -----
        ------ -----
        ----------
          ---------
            ---- ------
          -------
            ---- ------

在此示例中,requests.cpu 设置为 100 毫核(m),表示该 Deployment 中每个 Pod 最小需要 0.1 个核心 CPU(假设您的宿主机有至少 1 个核心)。

  1. 创建 HPA 然后,我们需要为 Deployment 创建 HPA。以下是一个示例 YAML 文件。
----------- -------------------
----- -----------------------
---------
  ----- ---------
-----
  ---------------
    ----------- -------
    ----- ----------
    ----- ----------------
  ------------ -
  ------------ --
  --------
  - ----- --------
    ---------
      ----- ---
      -------
        ----- -----------
        ------------------- --

在此示例中,我们定义了:

  • scaleTargetRef: 用于指定哪个 Deployment 需要自动扩容;
  • minReplicasmaxReplicas: 分别指定 Pod 最少和最多需要创建的数量;
  • metrics: 指定使用哪种指标来自动扩缩容,这里我们选择 CPU 使用率。

在 metrics 的定义中,我们使用了 Resource 类型的指标。averageUtilization 定义了 CPU 使用率达到多少时需要进行自动扩容。

  1. 部署应用

完成以上两步后,我们可以部署应用并进行测试了。在测试期间,我们可以使用 kubectl top pod 命令来查看应用程序中 Pod 的 CPU 使用率。

  1. 自动扩容

当应用程序的 CPU 使用率高于 averageUtilization 时,HPA 会自动扩容 Pod 的数量,以满足应用程序的需求。当使用率下降时,HPA 会自动缩减 Pod 的数量。

示例代码

如果您想要更详细的步骤和示例代码,您可以访问以下链接,获取我们编写的 Horizontal Pod Autoscaling 的完整代码。

https://github.com/kubernetes/examples/tree/master/staging/cpu-autoscaler

总结

在 Kubernetes 中使用 HPA 能够帮助我们应对持续负载波动和流量增长等问题,实现自动化管理。将资源利用率最大化,提供更高效的服务以及更好的用户体验。希望通过此文,您可以更好地理解 HPA,并能够应用于您的项目中。

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