Horizontal Pod Autoscaler - Amazon EKS

Horizontal Pod Autoscaler

Kubernetes Horizontal Pod Autoscaler 根据资源的 CPU 利用率,自动缩放部署、复制控制器或副本集中的 pods 数量。这有助于您的应用程序进行扩展以满足增长的需求,或在不需要资源时进行缩减,从而释放出节点用于其他应用程序。当您设置目标 CPU 利用率百分比时,Horizontal Pod Autoscaler 扩展或缩减应用程序来尝试满足该目标。

Horizontal Pod Autoscaler 是 Kubernetes 中的标准 API 资源,只需在 Amazon EKS 集群上安装一个指标源(如 Kubernetes Metrics Server)即可正常运行。您不需要在集群上部署或安装 Horizontal Pod Autoscaler 以开始扩展您的应用程序。有关更多信息,请参阅 Kubernetes文档中的 Horizontal Pod Autoscaler。

使用本主题为您的 Amazon EKS 集群准备 Horizontal Pod Autoscaler 并验证它可用于示例应用程序。

注意

本主题基于 Kubernetes 文档中的 Horizontal pod autoscaler 演练

先决条件

运行 Horizontal Pod Autoscaler 测试应用程序

在此部分中,您部署示例应用程序以验证 Horizontal Pod Autoscaler 在正常运行。

注意

本示例基于 Kubernetes 文档中的 Horizontal pod autoscaler 演练

测试 Horizontal Pod Autoscaler 安装

  1. 使用以下命令部署一个简单的 Apache Web 服务器应用程序。

    kubectl apply -f https://k8s.io/examples/application/php-apache.yaml

    向此 Apache Web 服务器 pod 提供 500 millicpu 的 CPU 限制,并在端口 80 上提供服务。

  2. php-apache 部署创建 Horizontal Pod Autoscaler 资源。

    kubectl autoscale deployment php-apache --cpu-percent=50 --min=1 --max=10

    此命令创建为部署定位 50% CPU 利用率的自动缩放器,最少一个 pod,最多十个 pods。当平均 CPU 负载低于 50% 时,Autoscaler 尝试减少部署中的 pods 数量,最低一个。当负载大于 50% 时,自动缩放器尝试增加部署中的 pods 数量,最高十个。有关更多信息,请参阅 Kubernetes 文档中的 HorizontalPodAutoscaler 的工作原理

  3. 使用以下命令描述 Autoscaler 以查看其详细信息。

    kubectl get hpa

    输出示例如下。

    NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE php-apache Deployment/php-apache 0%/50% 1 10 1 51s

    如您所见,当前 CPU 负载是 0%,因为服务器上尚没有负载。pod 计数已处于其最低边界(1 个),因此无法横向缩减。

  4. 通过运行容器为 Web 服务器创建负载。

    kubectl run -i \ --tty load-generator \ --rm --image=busybox \ --restart=Never \ -- /bin/sh -c "while sleep 0.01; do wget -q -O- http://php-apache; done"
  5. 要监视部署的向外扩展情况,请在与执行上一步骤的终端不同的终端上定期运行以下命令。

    kubectl get hpa php-apache

    输出示例如下。

    NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE php-apache Deployment/php-apache 250%/50% 1 10 5 4m44s

    可能需要一分钟以上的时间才能增加副本计数。只要实际 CPU 百分比高于目标百分比,副本计数就会增加(最大值为 10)。在此情况下,此百分比为 250%,因此 REPLICAS 数会继续增加。

    注意

    可能需要在几分钟后,您才能看到副本计数达到其最大值。例如,如果只需 6 个副本即可让 CPU 负载小于或等于 50%,则负载将不会超过 6 个副本。

  6. 停止负载。在正在生成负载的终端窗口中,按住 Ctrl+C 键停止负载。在观察扩缩的终端中再次运行以下命令,您会看到副本数缩减回 1。

    kubectl get hpa

    输出示例如下。

    NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE php-apache Deployment/php-apache 0%/50% 1 10 1 25m
    注意

    默认缩减时间范围为 5 分钟,因此,在您看到副本计数再次达到 1 之前也需要一段时间,甚至在当前 CPU 百分比为 0% 时也是如此。时间范围可以修改。有关更多信息,请参阅 Kubernetes 文档中的 Horizontal Pod Autoscaler

  7. 完成示例应用程序的试验之后,删除 php-apache 资源。

    kubectl delete deployment.apps/php-apache service/php-apache horizontalpodautoscaler.autoscaling/php-apache