使用 Horizontal Pod Autoscaler 扩展容器组(pod)部署
Kubernetes 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 演练
-
您拥有现有 Amazon EKS 集群。如果没有,请参阅开始使用 Amazon EKS。
-
您已安装 Kubernetes Metrics Server。有关更多信息,请参阅 使用 Kubernetes Metrics Server 查看资源使用情况。
-
您使用的是配置为与 Amazon EKS 集群通信的
kubectl
客户端。
运行 Horizontal Pod Autoscaler 测试应用程序
在此部分中,您部署示例应用程序以验证 Horizontal Pod Autoscaler 在正常运行。
注意
本示例基于 Kubernetes 文档中的 Horizontal Pod Autoscaler 演练
-
使用以下命令部署一个简单的 Apache Web 服务器应用程序。
kubectl apply -f https://k8s.io/examples/application/php-apache.yaml
向此 Apache Web 服务器 Pod 提供 500 millicpu 的 CPU 限制,并在端口 80 上提供服务。
-
为
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 的工作原理
。 -
使用以下命令描述 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 个),因此无法横向缩减。 -
通过运行容器为 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"
-
要监视部署的向外扩展情况,请在与执行上一步骤的终端不同的终端上定期运行以下命令。
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 个副本。
-
停止负载。在正在生成负载的终端窗口中,按住
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
。 -
完成示例应用程序的试验之后,删除
php-apache
资源。kubectl delete deployment.apps/php-apache service/php-apache horizontalpodautoscaler.autoscaling/php-apache