本文将为您介绍如何使用混合集群的自动弹性伸缩能力。
前提条件
创建自动弹性伸缩配置时,cluster-autoscaler组件将以Deployment形式自动部署在混合集群中。由于云上节点会在自动缩容后销毁,不利于Deployment类型部署的系统组件提供稳定的服务,所以这种提供云上服务的组件需要避免被调度到自动扩容出来的云上节点,同时也要避免被调度到云下节点。需要满足以下条件:
步骤一:创建自动弹性伸缩配置
- 登录容器服务管理控制台,在左侧导航栏中选择集群。
- 在集群列表页面中,单击目标集群名称,然后在左侧导航栏中,选择。
- 在节点池页面右上方,单击集群自动弹性伸缩配置,然后在集群自动弹性伸缩配置页面,完成弹性伸缩配置并提交。
- 配置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",
"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}'
步骤二:创建自动弹性伸缩节点池
- 登录容器服务管理控制台,在左侧导航栏中选择集群。
- 在集群列表页面中,单击目标集群名称,然后在左侧导航栏中,选择。
- 在节点池页面右上方,单击集群自动弹性伸缩配置,然后在集群自动弹性伸缩配置页面,单击创建节点池。
- 在创建节点池对话框,设置创建节点池的配置项。然后单击确认配置。
部分配置项说明如下所示。
参数 |
说明 |
数量 |
设置节点池初始节点数量。如不需要创建节点,可以填写为0。 |
操作系统 |
选择节点的操作系统,包括CentOS和Alibaba Cloud Linux。 |
节点标签 |
为集群节点添加标签。例如,workload=auto 。
|
ECS标签 |
为ECS实例添加标签。 |
污点 |
为集群节点添加污点。 |
安全组 |
选择节点所在安全组。 |
关于更多配置项说明,请参见创建Kubernetes专有版集群。
- 执行以下命令根据设置的节点标签
workload=auto
验证节点池是否可以正确弹出节点。kubectl run nginx --image nginx -l workload=auto