ACK Serverless集群基于阿里云弹性容器实例服务提供了强大的弹性伸缩能力。依照制定的策略,ACK Serverless集群的算力可以在短时间内增长到原先的数倍,或在算力需求回落时快速缩容以节省成本。本文向您介绍如何直接控制集群中的Pod数量或配置基于负载的自动伸缩策略。
完成本教程预计产生3元左右的费用(假设您的资源运行0.5 小时)。请在完成教程后及时释放资源。
前提条件
已参见快速部署基于Nginx的Web应用完成Web应用的部署。
步骤一:安装metrics-server组件
登录容器服务管理控制台,在左侧导航栏选择集群列表。
在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择 。
单击上方的日志与监控页签,找到名为metrics-server的卡片,单击右下方的安装,并等待安装完成。
步骤二:实现Pod扩缩容
使用控制台
通过kubectl控制
执行以下命令,查看应用的详细信息。
kubectl get deploy
预期输出:
NAME READY UP-TO-DATE AVAILABLE AGE nginx-deploy 1/1 1 1 9m32s
执行以下命令,将应用内的Pod扩容到10个。
kubectl scale deploy nginx-deploy --replicas=10
预期输出:
deployment.extensions/nginx-deploy scaled
执行以下命令,查看Pod。
kubectl get pod
预期输出:
NAME READY STATUS RESTARTS AGE nginx-deploy-55d8dcf755-8jlz2 1/1 Running 0 39s nginx-deploy-55d8dcf755-9jbzk 1/1 Running 0 39s nginx-deploy-55d8dcf755-bqhcz 1/1 Running 0 38s nginx-deploy-55d8dcf755-bxk8n 1/1 Running 0 38s nginx-deploy-55d8dcf755-cn6x9 1/1 Running 0 38s nginx-deploy-55d8dcf755-jsqjn 1/1 Running 0 38s nginx-deploy-55d8dcf755-lhp8l 1/1 Running 0 38s nginx-deploy-55d8dcf755-r2clb 1/1 Running 0 38s nginx-deploy-55d8dcf755-rchhq 1/1 Running 0 10m nginx-deploy-55d8dcf755-xspnt 1/1 Running 0 38s
执行以下命令,将应用内的Pod缩容到1个。
kubectl scale deploy nginx-deploy --replicas=1
预期输出:
deployment.extensions/nginx-deploy scaled
执行以下命令,查看Pod。
kubectl get pod
预期输出:
NAME READY STATUS RESTARTS AGE nginx-deploy-55d8dcf755-bqhcz 1/1 Running 0 1m
步骤三:配置基于负载的自动伸缩
使用控制台
在容器伸缩页签中,单击指标伸缩(HPA)后的创建按钮。
在创建面板中填入以下示例值,然后单击创建。
配置项
示例值
名称
nginx-deploy
指标
监控项:CPU使用量
阈值:20%
最大容器数量
10
最小容器数量
1
通过kubectl控制
执行以下命令,创建一个新的指标伸缩策略。
执行此策略时,应用中至少有1个Pod,至多有10个Pod,而应用会通过伸缩的方式尽可能将容器的平均CPU占用保持在50%左右。
kubectl autoscale deployment nginx-deploy --cpu-percent=20 --min=1 --max=10
预期输出:
horizontalpodautoscaler.autoscaling/nginx-deploy autoscaled
执行以下命令,查看指标伸缩策略的信息。
kubectl get hpa
预期输出:
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE nginx-deploy Deployment/nginx-deploy 0%/20% 1 10 1 35s
步骤四(可选):测试自动伸缩策略
您可以通过向集群内的容器增加负载以观察自动伸缩策略的表现。请参照以下步骤为容器增加负载。
登录容器服务管理控制台,在左侧导航栏选择集群列表。
在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择集群信息。
在容器组页签下,在第一个容器组的右方,单击
连接容器。在新页面执行以下命令,此命令会使容器运行一个无限循环,使CPU负载提升到最大。
while : ; do : ; done
回到控制台,单击容器组页签,然后单击监控列下的图标,观察容器的CPU负载。等待约一分钟后,再次单击该图标并观察情况。
单击右上方的按钮刷新应用信息,页面显示已新创建4个Pod。
此时,一个Pod的CPU负载达到100%,而其余四个Pod的CPU负载约为0%。而本应用中所有Pod的平均CPU负载达到了约20%,集群扩容完成,进入稳定状态。
回到步骤3中打开的容器终端页面,输入Ctrl+C结束循环,使得容器CPU负载回到约0%。
说明如果您关闭了之前打开的容器终端页面,您可以使用
top
命令查看进程,并使用kill -9 <PID>
命令结束CPU负载达到100%的进程。再次回到控制台,等待5-10分钟后,再次点击按钮,观察Pod数量回落至1个。
步骤五:释放资源
如果无需继续使用集群,请按照以下操作释放资源:
登录容器服务管理控制台,在左侧导航栏选择集群列表。
在集群列表页面,单击目标集群右方的
。在删除集群面板中,选中以下复选框:同时删除集群下的ALB资源,同时删除集群下的PrivateZone资源,我已知晓以上信息并确认删除集群,然后单击确定。