配置集群的弹性伸缩

ACK Serverless集群基于阿里云弹性容器实例服务提供了强大的弹性伸缩能力。依照制定的策略,ACK Serverless集群的算力可以在短时间内增长到原先的数倍,或在算力需求回落时快速缩容以节省成本。本文向您介绍如何直接控制集群中的Pod数量或配置基于负载的自动伸缩策略。

重要

完成本教程预计产生3元左右的费用(假设您的资源运行0.5 小时)。请在完成教程后及时释放资源。

前提条件

已参见快速部署基于NginxWeb应用完成Web应用的部署。

步骤一:安装metrics-server组件

  1. 登录容器服务管理控制台,在左侧导航栏选择集群列表

  2. 集群列表页面,单击目标集群名称,然后在左侧导航栏,单击组件管理

  3. 单击上方的日志与监控页签,找到名为metrics-server的卡片,单击右下方的安装,并等待安装完成。

步骤二:实现应用扩缩容

控制台

  1. 登录容器服务管理控制台,在左侧导航栏选择集群列表

  2. 集群列表页面,单击目标集群名称,然后在左侧导航栏,选择工作负载 > 无状态

  3. 单击名称为“nginx-deploy”的无状态应用,进入应用详细信息页面。

  4. 单击右上方的伸缩,在伸缩面板中将所需容器组数量修改为10,然后单击确定

    刷新页面后,可以观察到9个新的Pod被创建,表示扩容成功。

  5. 重复步骤4,将Pod数量修改为1。

    刷新页面后,可以观察到Pod数量回落至1个,表示缩容成功。

kubectl

  1. 执行以下命令,查看应用的详细信息。

    kubectl get deploy

    预期输出:

    NAME           READY   UP-TO-DATE   AVAILABLE   AGE
    nginx-deploy   1/1     1            1           9m32s
  2. 执行以下命令,将应用内的Pod扩容到10个。

    kubectl scale deploy nginx-deploy --replicas=10

    预期输出:

    deployment.extensions/nginx-deploy scaled
  3. 执行以下命令,查看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
  4. 执行以下命令,将应用内的Pod缩容到1个。

    kubectl scale deploy nginx-deploy --replicas=1

    预期输出:

    deployment.extensions/nginx-deploy scaled
  5. 执行以下命令,查看Pod。

    kubectl get pod

    预期输出:

    NAME                            READY   STATUS    RESTARTS   AGE
    nginx-deploy-55d8dcf755-bqhcz   1/1     Running   0          1m

步骤三:配置基于负载的自动伸缩

控制台

  1. 在应用详情页面,单击容器伸缩页签。

  2. 单击指标伸缩(HPA)处对应的创建

  3. 创建面板中填入以下示例值,然后单击确定

    配置项

    示例值

    名称

    nginx-deploy

    指标

    单击添加,然后填入以下指标:

    • 监控项:CPU使用量

    • 阈值:20%

    最大容器数量

    10

    最小容器数量

    1

kubectl

  1. 执行以下命令,创建一个新的指标伸缩策略。

    执行此策略时,应用中至少有1Pod,至多有10Pod,而应用会通过伸缩的方式尽可能将容器的平均CPU占用保持在50%左右。

    kubectl autoscale deployment nginx-deploy --cpu-percent=20 --min=1 --max=10

    预期输出:

    horizontalpodautoscaler.autoscaling/nginx-deploy autoscaled
  2. 执行以下命令,查看指标伸缩策略的信息。

    kubectl get hpa

    预期输出:

    NAME           REFERENCE                 TARGETS   MINPODS   MAXPODS   REPLICAS   AGE
    nginx-deploy   Deployment/nginx-deploy   0%/20%    1         10        1          35s

步骤四(可选):测试自动伸缩策略

您可以通过向集群内的容器增加负载以观察自动伸缩策略的表现。请参照以下步骤为容器增加负载。

  1. 登录容器服务管理控制台,在左侧导航栏选择集群列表

  2. 集群列表页面,单击目标集群名称,然后在左侧导航栏,选择集群信息

  3. 容器组页签下,在第一个容器组的操作列,单击终端 > test连接容器。

  4. 在新页面执行以下命令,此命令会使容器运行一个无限循环,使CPU负载提升到最大。

    while : ; do : ; done
  5. 返回控制台,在第一个容器组的监控列,单击监控图标,观察容器的CPU负载。

  6. 等待几分钟,刷新页面,可以看到已创建4个新的Pod。

    此时,一个PodCPU负载达到100%,而其余4PodCPU负载约为0%。此时,本应用中所有Pod的平均CPU负载达到了约20%,集群扩容完成,进入稳定状态。

  7. 回到步骤3中打开的容器终端页面,输入Ctrl+C结束循环,使得容器CPU负载回到约0%。

    说明

    如果您关闭了之前打开的容器终端页面,您可以使用top命令查看进程,并使用kill -9 <PID>命令结束CPU负载达到100%的进程。

  8. 再次返回控制台,等待5-10分钟后刷新页面,观察Pod数量回落至1个。

步骤五:释放资源

如果无需继续使用集群,请按照以下操作释放资源:

删除已创建的应用和服务

  1. 容器服务管理控制台集群列表页面,单击目标集群名称。

  2. 在左侧导航栏选择工作负载 > 无状态,然后选中已创建的Nginx应用,单击批量删除,并按界面提示完成后续确认操作。

删除集群

ACK Serverless集群目前不收取集群管理费用,但在使用ACK Serverless集群过程中用到的其他阿里云云产品资源(如ECI),您需要按照各云产品规定的计费规则,为您使用的资源付费,费用由各云产品收取。完成教程后,请参考以下场景处理集群:

  • 如果不再继续使用集群,请在容器服务管理控制台集群列表页面,找到目标集群并单击对应的更多 > 删除,在弹出面板阅读提示信息,选中要同时删除的相关云产品资源,然后单击删除,并按页面提示完成后续操作。更多信息,请参见删除集群

  • 如果需要继续使用集群,请及时为阿里云账号充值,确保余额充足。如需了解使用ACK Serverless集群Pro过程中用到的其他阿里云云产品资源的计费信息,请参见云产品资源计费