本文将为您介绍如何使用混合集群的自动弹性伸缩能力。
关于弹性伸缩的详细描述,请参见ACK弹性伸缩概述。
创建自动弹性伸缩配置
前置要求
创建自动弹性伸缩配置将自动在您的混合集群中部署cluster-autoscaler组件(Deployment部署),这种提供云上服务的组件需要避免被调度到云下节点的同时,也要避免被调度到自动扩容出来的云上节点上(这类节点会在自动缩容后销毁,不利于Deployment类型部署的系统组件提供稳定的服务)。所以我们推荐您首先创建和扩容普通节点池并为节点池中的节点配置节点标签alibabacloud.com/cloud-worker-nodes=true。cluster-autoscaler组件将会自动调度到拥有节点标签alibabacloud.com/cloud-worker-nodes=true的云上节点上。
操作步骤
- 登录容器服务管理控制台。
- 在控制台左侧导航栏中,单击集群。
- 在集群列表页面中,单击目标集群名称或者目标集群右侧操作列下的详情。
- 在集群管理页左侧导航栏中,单击节点池。
- 在节点池页面右上角,单击自动弹性伸缩配置。
- 在自动弹性伸缩配置页面,完成弹性伸缩配置并提交。如下所示。
配置cluster-autoscaler组件
在成功完成自动弹性伸缩配置后,您的集群中就会自动部署一个Deployment部署如下所示:
kubectl -nkube-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", "vpc:DescribeVSwitches" ], "Resource": [ "*" ], "Effect": "Allow" } ] }
您需要使用授权了以上RAM Policy的Access Key信息创建一个名为alibaba-addon-secret的Secret资源,如下所示:
$ export ACCESS_KEY_ID=xxxx $ export ACCESS_KEY_SECRET=xxxx $ 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}'
创建自动弹性伸缩节点池
操作步骤
- 在自动弹性伸缩配置页面,继续点击创建节点池。
- 在创建节点池页面,设置创建节点池的配置项。关于配置项的详细说明,部分配置项说明如下:
参数 |
说明 |
数量 |
您可以为节点池设置初始节点数量。如果不需要创建节点,可以填写为0。 |
操作系统 |
您可以为节点选择操作系统,包括CentOS、Alibaba Cloud Linux 2.1903 。 |
节点标签 |
您可以为集群节点添加标签。 |
ECS示例标签 |
您可以为ECS实例添加标签。 |
污点 |
可以为集群节点添加污点。 |
安全组 |
选择节点所在阿安全组。 |
测试自动弹性伸缩
在创建自动弹性伸缩节点池时,我们可以为节点池中的节点设置自动以节点标签例如workload=auto,那么我们就可以使用以下命令测试节点池是否可以正确弹出节点:
kubectl run nginx --image nginx -l workload=auto