Kubernetes HPA 使用详解

在 Kubernetes 中,水平自动伸缩 (Horizontal Pod Autoscaling,简称 HPA) 是一种自动扩展 Pod 的方式。HPA 可以根据集群的负载自动缩放部署的 Pod 数量,以确保资源利用率最大化,并提高应用程序的可用性。本文将介绍如何在 Kubernetes 中使用 HPA。

前置条件

  • 安装 Kubernetes 集群
  • 已部署一个可以扩展 Pod 的应用程序

HPA 的工作原理

HPA 使用 Kubernetes Metrics Server 提供的资源使用率指标自动调整应用程序的 Pod 数量。Metrics Server 独立于 Kubernetes 控制平面运行,可以收集并存储集群组件和自定义指标。它可以收集 CPU 和内存使用率指标,还可以收集应用程序暴露的自定义指标。

HPA 监测资源使用率,并根据预设的规则自动扩展或缩小应用程序的 Pod 数量。当资源使用率高于阈值时,HPA 创建新的 Pod。当资源使用率低于阈值时,HPA 删除多余的 Pod。

配置 HPA

要创建 HPA,需要以下配置:

  1. measurements - HPA 要监测的指标,如 CPU 或内存使用率。
  2. metrics API - 应用程序必须实现 metrics API,以使 Metrics Server 能够采集指标。
  3. HPA 配置 - 指定 Pod 的最大和最小数量,以及扩容和缩容的策略。

以下是样例 HPA 配置文件:

----------- -------------------
----- -----------------------
---------
  ----- -------
  ---------- -------
-----
  ---------------
    ----------- -------
    ----- ----------
    ----- -------
  ------------ -
  ------------ -
  --------
  - ----- --------
    ---------
      ----- ---
      ------------------------- --
  • 声明 HPA 资源为 HorizontalPodAutoscaler,指定自动扩缩容的目标为 Deployment 下名为 example 的资源
  • 指定 Pod 的最小和最大数量为 1 和 5
  • 指定 HPA 监测的指标为 CPU 使用率,设定资源使用率阈值为 80%

使用示例

1. 部署一个可以扩缩容的应用程序

----------- -------
----- ----------
---------
  ----- -------
-----
  --------- -
  ---------
    ------------
      ---- -------
  ---------
    ---------
      -------
        ---- -------
    -----
      -----------
      - ----- -------
        ------ -----
        ------
        - -------------- --
        ----------
          ---------
            ---- ------
  • 声明 Deployment 资源为 example,指定初始化 Pod 数量为 2
  • 指定 Pod 标签为 app=example
  • 定义 Pod 模板,指定容器镜像为 nginx,开放 80 端口并设置资源请求为 100m CPU

2. 部署 metrics-server 组件

运行以下命令安装 Metrics Server:

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

3. 部署 HPA

运行以下命令部署 HPA 配置文件:

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

结论

本文介绍了如何在 Kubernetes 中使用 HPA 来自动缩放部署的应用程序。HPA 可以根据集群负载自动扩展和缩小 Pod 的数量,从而更好地利用资源,提高应用程序的可用性。

文中提供了示例代码和配置,帮助读者更好地理解和实践 HPA。

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