配置自动弹性伸缩

本文将为您介绍如何使用注册集群的自动弹性伸缩能力。

前提条件

创建自动弹性伸缩配置时,cluster-autoscaler组件将以Deployment形式自动部署在注册集群中。由于云上节点会在自动缩容后销毁,不利于Deployment类型部署的系统组件提供稳定的服务,所以这种提供云上服务的组件需要避免被调度到自动扩容出来的云上节点,同时也要避免被调度到云下节点。需要满足以下条件:

  • 已创建和扩容普通节点池。具体操作,请参见创建节点池并扩容

  • 已为节点池中的节点配置节点标签alibabacloud.com/cloud-worker-nodes=true。具体操作,请参见添加节点标签

    cluster-autoscaler组件将会自动调度到拥有节点标签的云上节点上。

  • 已通过kubectl连接注册集群。具体操作,请参见通过kubectl连接集群

步骤一:开启自动弹性伸缩配置

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

  2. 集群列表页面,单击目标集群名称,然后在左侧导航栏,选择节点管理 > 节点池

  3. 节点池页面,单击集群自动弹性伸缩配置右侧的去配置,然后在集群自动弹性伸缩配置面板,完成弹性伸缩配置并单击确定

  4. 配置cluster-autoscaler组件。

    在成功完成自动弹性伸缩配置后,集群中将会自动部署一个Deployment。

    1. 执行以下命令查看Deployment。

      kubectl -n kube-system get deploy |grep cluster-autoscaler

      预期输出:

      cluster-autoscaler            1/1     1            1           5s
    2. 配置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"
              }
          ]
      }
    3. 执行以下命令授权RAM Policy的AccessKey信息。

      export ACCESS_KEY_ID=<ACCESS KEY ID>
      export ACCESS_KEY_SECRET=<ACCESS KEY SECRET>
    4. 执行以下命令创建一个名为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}'

步骤二:创建自动弹性伸缩节点池

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

  2. 集群列表页面,单击目标集群名称,然后在左侧导航栏,选择节点管理 > 节点池

  3. 节点池页面右上角,单击创建节点池

  4. 创建节点池对话框,设置创建节点池的配置项。然后单击确认配置

    部分配置项说明如下所示。关于更多配置项说明,请参见创建节点池

    参数

    说明

    期望节点数

    节点池应该维持的节点数量。您可以通过调整期望节点数,达到扩容或缩容节点池的目的。如无需创建节点,可以填写为0。更多信息,请参见扩缩容节点池

    操作系统

    节点的操作系统,包括CentOS和Alibaba Cloud Linux。

    ECS标签

    为ECS实例添加标签。

    污点(Taints)

    为集群节点添加污点。

    节点标签

    为集群节点添加标签。例如,workload=auto

    自定义安全组

    选择节点所在安全组。

  5. 执行以下命令,根据设置的节点标签workload=auto验证节点池是否可以正确弹出节点。

    kubectl run nginx --image nginx -l workload=auto