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

前提条件

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

  • 创建和扩容普通节点池。具体操作,请参见创建节点池并扩容
  • 为节点池中的节点配置节点标签alibabacloud.com/cloud-worker-nodes=true。具体操作,请参见添加节点标签

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

步骤一:创建自动弹性伸缩配置

  1. 登录容器服务管理控制台
  2. 在控制台左侧导航栏中,单击集群
  3. 集群列表页面,执行以下操作进入自动弹性伸缩配置页面。
    您可以通过以下两种路径配置自动弹性伸缩。
    • 路径一:在目标集群右侧的操作列下,选择更多 > 自动伸缩
    • 路径二:
      1. 选择目标集群,然后单击操作列的详情
      2. 在目标集群的左侧导航栏,选择节点管理 > 节点池
      3. 节点池页面右上方,单击自动弹性伸缩配置
  4. 自动弹性伸缩配置页面,完成弹性伸缩配置并提交。
    弹性伸缩配置
  5. 配置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",
                      "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. 集群列表页面,执行以下操作进入自动弹性伸缩配置页面。
    您可以通过以下两种路径配置自动弹性伸缩。
    • 路径一:在目标集群右侧的操作列下,选择更多 > 自动伸缩
    • 路径二:
      1. 选择目标集群,然后单击操作列的详情
      2. 在目标集群的左侧导航栏,选择节点管理 > 节点池
      3. 节点池页面右上方,单击自动弹性伸缩配置
  4. 自动弹性伸缩配置页面,单击创建节点池
  5. 创建节点池对话框,设置创建节点池的配置项。
    部分配置项说明如下所示。
    参数 说明
    数量 设置节点池初始节点数量。如不需要创建节点,可以填写为0。
    操作系统 选择节点的操作系统,包括CentOS、Alibaba Cloud Linux 2.1903。
    节点标签 您可以为集群节点添加标签。例如,workload=auto
    ECS标签 您可以为ECS实例添加标签。
    污点 您可以为集群节点添加污点。
    安全组 选择节点所在安全组。

    关于更多配置项说明,请参见创建Kubernetes专有版集群

  6. 单击确认配置

执行结果

执行以下命令根据设置的节点标签workload=auto验证节点池是否可以正确弹出节点。
kubectl run nginx --image nginx -l workload=auto