用户指南

集群扩缩容

最近更新时间:2020-05-29 20:58:59

操作场景

本文档指导您对集群进行扩缩容。TKE 支持以下两种扩缩容方法,您可结合实际情况进行选择:

前提条件

已登录 容器服务控制台

操作步骤

手动添加/移除节点

您可通过 新建节点添加已有节点 两种方式进行手动添加节点,实现集群的手动扩容。通过 移除节点,实现集群的手动缩容。

新建节点

新建节点过程中,您可以在 “新建节点” 页面配置云服务器(CVM),对集群进行扩容。
具体操作请参考 新建节点

添加已有节点

注意:

  • 当前仅支持添加同一 VPC 下的 CVM。
  • 添加已有节点到集群,会根据您的设置重装该 CVM 的操作系统。
  • 添加已有节点到集群,会迁移 CVM 所属项目到集群所设置的项目。
  • 有且仅有一块数据盘的节点加入到集群,可以选择是否设置容器目录,若设置容器目录则会格式化该数据盘。
  • 无数据盘或多块数据盘的 CVM,设置容器目录不生效。
  • 不推荐向伸缩组中添加包年包月 CVM。由于资源弹性伸缩可销毁 CVM,从节约成本角度考虑,建议添加按量计费型 CVM。

添加过程中,您可以在 “添加已有节点” 页面选择并配置需要添加到集群的 CVM,对集群进行扩容。
具体操作请参考 添加已有节点

移除节点

请参考 移除节点 对集群进行缩容。

通过弹性伸缩自动添加/移除节点

集群自动扩缩容,又称 Cluster Autoscaler(CA),是一个独立的程序。它可以动态地调整集群的节点数量来满足需求。当集群中出现因资源不足而无法调度的 Pod(实例) 时,自动触发扩容,为您减少人力成本。当满足节点空闲等缩容条件时,自动触发缩容,为您节约资源成本。

创建伸缩组

  1. 登录容器服务控制台,单击左侧导航栏中的【集群】。
  2. 单击需创建伸缩组的集群 ID,进入集群的“工作负载”页面。如下图所示:
    管理页面
  3. 选择左侧集群导航栏中的【节点管理】>【伸缩组】,进入“伸缩组”列表页面。
  4. 单击【新建伸缩组】,并在弹出 “新建伸缩组” 窗口中根据以下信息创建伸缩组。
    • 启动配置
      • 名称:输入自定义启动配置名称。
      • 创建方式:提供【重新选择机型配置】和【选择已有节点机型】两种方式,请根据实际需求进行选择。
        创建方式选定【选择已有节点机型】时,由于资源弹性伸缩可销毁 CVM,从节约成本角度考虑,不推荐添加包年包月 CVM
      • 实例类型:提供【按量计费】和【竞价付费】两种模式,请根据实际需求进行选择。
      • 机型设置:请根据实际需求进行选择。
      • 登录方式
        • 设置密码:请根据提示设置对应密码。
        • 立即关联密钥:密钥对是通过一种算法生成的一对参数,是比常规密码更安全的登录 CVM 的方式,详情请参见 SSH 密钥
        • 自动生成密码:自动生成的密码,该密码将通过 站内信 发送给您。
      • 数据盘挂载:请根据实际需求进行选择。
      • 安全组:用于设置 CVM 的网络访问控制,请根据实际需求进行选择。
      • Label:为伸缩组设置 Label,则会在自动扩容出的节点上设置 Label,实现服务的灵活调度策略。
    • 伸缩组配置
      • 支持网络:默认为集群网络,且不可更改。
      • 支持子网:请根据实际需求进行选择。
      • 节点数量范围:限制伸缩组内节点的数量范围。
      • 重试策略:提供【快速重试】和【间隔递增重试】两种重试策略,请根据实际需求进行选择。
        • 快速重试:立即重试,在较短时间内快速重试,连续失败超过5次后不再重试。
        • 间隔递增重试:随着连续失败次数的增加,重试间隔逐渐增大,重试间隔从秒级到1天不等。
  5. 单击【提交】,完成创建。
  6. 重复执行 步骤1 - 步骤5,可创建多个伸缩组。
注意:

  • 需要配置服务下容器的 request 值。当集群中因存在由于资源不足而无法调度的 Pod 时,自动扩容被触发。而 Pod 的 request 值是用于判断资源是否充足的标准。
  • 请勿直接修改属于伸缩组内的节点。
  • 同一伸缩组内的所有节点需具有相同的配置(机型和 Label 等)。
  • 可以使用 PodDisruptionBudget 防止 Pod 在缩容时被删除。
  • 在指定伸缩组的最小/最大值节点数量设置之前,请检查所在可用区的 CVM 配额是否足够大。
  • 建议不要启用基于监控指标的节点弹性伸缩。
  • 删除伸缩组会同时销毁伸缩组内的 CVM,请谨慎操作。

调整全局配置

  1. 登录容器服务控制台,单击左侧导航栏中的【集群】。
  2. 单击需调整伸缩组配置的集群 ID,进入集群的“工作负载”页面。
  3. 在左侧导航栏中,选择【节点管理】>【伸缩组】,进入 “伸缩组列表” 页面。
  4. 单击“全局配置”模块右上角的【编辑】,进入“设置集群伸缩全局配置”。如下图所示:
  5. 在“设置集群伸缩全局配置”页面,根据以下信息调整全局配置。如下图所示:
    • 自动缩容:请根据实际情况进行勾选。
    • 缩容配置:在开启自动缩容后,根据实际需求进行设置。
    • 扩容算法:集群扩容时所依赖的算法准则,为您提供以下三种选择。
      • 随机:当您有多个伸缩组时,随机选择一个伸缩组进行扩容。
      • most-pods:当您有多个伸缩组时,选择能调度更多 Pod 的伸缩组进行扩容。
      • least-waste:当您有多个伸缩组时,选择 Pod 调度后资源剩余更少的伸缩组进行扩容。
  6. 单击【确定】,即可设置成功。

调整伸缩组配置

  1. 在“伸缩组列表”页面,选择需要调整配置的伸缩组所在行右侧的【更多】>【调整配置】,进入“调整伸缩组配置”页面。
  2. 在“调整伸缩组配置”页面,根据实际需求进行实例范围调整。如下图所示:
  3. 单击【确定】即可设置成功,伸缩组节点实例数将会在该范围内自动调节。

扩容缩容触发条件

扩容条件

集群中出现因为缺少可用资源而无法调度的容器实例时,将触发已设置的自动扩容策略,并尝试扩容节点来运行这些实例。
每当 Kubernetes 调度程 找不到任何运行 Pod 的地方,它会将 Pod 的 PodCondition 设置为 false,并将原因设置为不可调度的。集群自动扩缩容程序会每隔一段时间扫描一次,查看是否有不可调度的 Pod 需进行扩容,并尝试扩容节点来运行这些 Pod。

缩容条件

集群中节点空闲资源较多时,将触发缩容。通常是指,当节点上所有 Pod 的 CPU 或者内存占用资源/可分配资源的比值小于您所设定的百分值时,该节点就会尝试缩容。同时,只有该节点上所有 Pod 都能够成功调度到其他节点上时, Pod 才会被驱逐从而缩容成功。

当节点上存在符合以下情形的 Pod 时,该节点将不会缩容:

  • 已设置严格的 PodDisruptionBudget(PDB) 的 Pod 不满足 PDB。
  • 有 Kube-system 下的 Pod。
  • 有非 deployment、replica set、job、stateful set 等控制器创建的 Pod。
  • Pod 有本地存储。
  • Pod 不能被调度到其他节点上。

常见问题

扩容缩容的相关问题可参见 扩容缩容相关

目录