本文将为您介绍如何使用注册集群的自动弹性伸缩能力。
前提条件
创建自动弹性伸缩配置时,cluster-autoscaler组件将以Deployment形式自动部署在注册集群中。由于云上节点会在自动缩容后销毁,不利于Deployment类型部署的系统组件提供稳定的服务,所以这种提供云上服务的组件需要避免被调度到自动扩容出来的云上节点,同时也要避免被调度到云下节点。需要满足以下条件:
已创建和扩容普通节点池。具体操作,请参见创建节点池并扩容。
已为节点池中的节点配置节点标签
alibabacloud.com/cloud-worker-nodes=true
。具体操作,请参见添加节点标签。cluster-autoscaler组件将会自动调度到拥有节点标签的云上节点上。
已通过kubectl连接注册集群。具体操作,请参见通过kubectl连接集群。
步骤一:开启自动弹性伸缩配置
登录容器服务管理控制台,在左侧导航栏选择集群。
在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择 。
在节点池页面,单击集群自动弹性伸缩配置右侧的去配置,然后在集群自动弹性伸缩配置面板,完成弹性伸缩配置并单击确定。
配置cluster-autoscaler组件。
在成功完成自动弹性伸缩配置后,集群中将会自动部署一个Deployment。
执行以下命令查看Deployment。
kubectl -n kube-system get deploy |grep cluster-autoscaler
预期输出:
cluster-autoscaler 1/1 1 1 5s
配置cluster-autoscaler组件相关云资源的RAM Policy,代码示例如下所示。
{ "Version": "1", "Statement": [ { "Action": [ "ess:DescribeScalingGroups", "ess:DescribeScalingInstances", "ess:DescribeScalingActivities", "ess:DescribeScalingConfigurations", "ess:DescribeScalingRules", "ess:DescribeScheduledTasks", "ess:DescribeLifecycleHooks", "ess:DescribeNotificationConfigurations", "ess:DescribeNotificationTypes", "ess:DescribeRegions", "ess:CreateScalingRule", "ess:ModifyScalingGroup", "ess:RemoveInstances", "ess:ExecuteScalingRule", "ess:ModifyScalingRule", "ess:DeleteScalingRule", "ecs:DescribeInstanceTypes", "ess:DetachInstances", "ess:ScaleWithAdjustment", "vpc:DescribeVSwitches" ], "Resource": [ "*" ], "Effect": "Allow" } ] }
执行以下命令授权RAM Policy的AccessKey信息。
export ACCESS_KEY_ID=<ACCESS KEY ID> export ACCESS_KEY_SECRET=<ACCESS KEY SECRET>
执行以下命令创建一个名为alibaba-addon-secret的Secret资源。
kubectl -n kube-system create secret generic alibaba-addon-secret --from-literal='access-key-id=${ACCESS_KEY_ID}' --from-literal='access-key-secret=${ACCESS_KEY_SECRET}'
步骤二:创建自动弹性伸缩节点池
登录容器服务管理控制台,在左侧导航栏选择集群。
在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择 。
在节点池页面右上角,单击创建节点池。
在创建节点池对话框,设置创建节点池的配置项。然后单击确认配置。
执行以下命令,根据设置的节点标签
workload=auto
验证节点池是否可以正确弹出节点。kubectl run nginx --image nginx -l workload=auto