Kubernetes 中 HPA 自动伸缩策略实现方法

阅读时长 5 分钟读完

自动伸缩(Automatic Scaling)是 Kubernetes 中的一个很重要的概念,透过 HPA(Horizontal Pod Autoscaling)机制让集群在依照负载需求做伸缩的过程中,可以最大化利用该集群资源。

本文中,我们将带你了解如何使用 Kubernetes 的 HPA 自动伸缩策略实现自动调整 Pod 副本数量的过程。除了提供实例代码,我们也会详细阐述背后的学习意义。

Kubernetes HPA 原理介绍

Kubernetes 的自动伸缩(Automatic Scaling)功能是通过 HPA(Horizontal Pod Autoscaler)机制实现的。

HPA 将由一个 Controller 和一个 Pod Template 组成。其中 Controller 中的 AutoScaler 将会基于资源使用率、自定义规则等指标来驱动自动化伸缩过程。

当 AutoScaler 发现目标 Pod 处于过载负载(overload)状态时,即超过了用户配置的限制, 便会自动地拉起一些新的 Pod 实例。而当资源或者负载需求下降的时候,HPA 自动化机制会关闭一些 Pod 实例,保证资源的最优使用。

具体实现细节如下:

  1. 当 Pod 被部署后,控制器开始工作,并执行类似于以下过程的操作:

    • 监视意外终止的 Pod;

    • 根据 Pod Template 参数部署新 Pod;

  2. AutoScaler 将定期执行度量(metrics)。它可以使用不同类型的指标,其中可用的度量取决于 Kubernetes 安装和已部署的组件。常见的度量包括 CPU 利用率和内存使用率等;

  3. 如果 CPU 利用率超过某个阈值,则将 Pod 副本数增加 N。同样的,如果 CPU 利用率低于一个预定义的阈值,则将 Pod 副本数减少 N。

以上便是 Kubernetes HPA 所依靠的机制,接下来,我们将看到其如何具体实现。

HPA 实现方法

在开始之前,我们需要准备一个 Kubernetes 集群和一个 Pod 因为本文重点在于 HPA 实现,所以该 Pod 应该具有可观察的 CPU 需求模式。

我们接下来将阐述 HPA 的具体实现方法。

1. 部署一个 Pod

我们先用下面的 YAML 文件部署一个 Pod:

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

上述 YAML 文件定义了一个 Pod 名称为 cpu-demo,该 Pod 中有一个容器,命名为 cpu-demo-ctr。容器将使用镜像 vish/stress,该镜像具有 CPU 负载以进行相关的压测。

2. 部署一个 Deployment

接下来,我们使用下面的 YAML 文件创建一个 Deployment,该 Deployment 会部署上述 Pod:

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

上述 YAML 文件定义了一个名称为 cpu-demo-deployment 的 Deployment,并描述了如何部署 cpu-demo 应用程序的实例。我们指定了一个 Pod 副本,使用了与之前定义的 CPU 镜像相同的镜像资源。在 spec.containers.command 部分,我们在容器中运行了 stress 命令以创建 CPU 负载。

3. 部署 HPA

启用 HPA 单元之前,确保以下组件已在 K8s 控制平面中成功安装和运行。

  1. metrics-server;
  2. kubectl;

使用以下命令可以部署 HPA:

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

上述 YAML 文件定义了一个名称为 cpu-demo-hpa 的 HPA 并提供了如下信息:

  1. 实例的最小 Pod 数量为 1,最大为 10;
  2. 目标 CPU 利用率百分比为 50;
  3. 使用的资源对象是在前面定义的 Deployment 中定义的 cpu-demo-deployment

HPA YAML 被部署后,HPA 总是监听 Pod 的 CPU 使用率。如果使用率高于目标 CPU 利用率的百分比,则 HPA 将会增加 Pod 副本数以减轻负载;同样的,如果 CPU 利用率低于目标 CPU 利用率的百分比,则 HPA 将会降低 Pod 副本以节省资源。

总结

在本文中,我们了解了 Kubernetes 的 HPA 自动伸缩策略及其实现方法,同时我们提供了实例代码,该代码可以直接使用。更重要的是,我们还讨论了如何使用 HPA 以最大化利用资源并提高负载均衡。

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

纠错
反馈