ACK Serverless集群基于阿里云弹性容器实例服务提供了强大的弹性伸缩能力。依照制定的策略,ACK Serverless集群的算力可以在短时间内增长到原先的数倍,或在算力需求回落时快速缩容以节省成本。本文向您介绍如何直接控制集群中的Pod数量或配置基于负载的自动伸缩策略。
完成本教程预计产生3元左右的费用(假设您的资源运行0.5 小时)。请在完成教程后及时释放资源。
前提条件
已参见快速部署基于Nginx的Web应用完成Web应用的部署。
步骤一:安装metrics-server组件
登录容器服务管理控制台,在左侧导航栏选择集群列表。
在集群列表页面,单击目标集群名称,然后在左侧导航栏,单击组件管理。
单击上方的日志与监控页签,找到名为metrics-server的卡片,单击右下方的安装,并等待安装完成。
步骤二:实现应用扩缩容
控制台
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%,而其余4个Pod的CPU负载约为0%。此时,本应用中所有Pod的平均CPU负载达到了约20%,集群扩容完成,进入稳定状态。
回到步骤3中打开的容器终端页面,输入Ctrl+C结束循环,使得容器CPU负载回到约0%。
说明如果您关闭了之前打开的容器终端页面,您可以使用
top
命令查看进程,并使用kill -9 <PID>
命令结束CPU负载达到100%的进程。再次返回控制台,等待5-10分钟后刷新页面,观察Pod数量回落至1个。
步骤五:释放资源
如果无需继续使用集群,请按照以下操作释放资源:
删除已创建的应用和服务
在容器服务管理控制台的集群列表页面,单击目标集群名称。
在左侧导航栏选择工作负载 > 无状态,然后选中已创建的Nginx应用,单击批量删除,并按界面提示完成后续确认操作。
删除集群
ACK Serverless集群目前不收取集群管理费用,但在使用ACK Serverless集群过程中用到的其他阿里云云产品资源(如ECI),您需要按照各云产品规定的计费规则,为您使用的资源付费,费用由各云产品收取。完成教程后,请参考以下场景处理集群: