全部文档
当前文档

暂无内容

如果没有找到您期望的内容,请尝试其他搜索词

文档中心

集群弹性伸缩----原弹性伸缩功能

最近更新时间:2021-08-10 23:22:38

Cluster AutoScaler (简称CA)是一个自动扩展和收缩 Kubernetes 集群 Node 的扩展。当集群容量不足时,它会自动去 Cloud Provider 创建新的 Node,而在 Node 长时间(超过 10 分钟)资源利用率很低时(低于 50%)自动将其删除以节省开支。

创建伸缩组

  1. 登录容器服务控制台
  2. 在左侧导航栏中,选择集群,进入集群管理页面。
  3. 选择需要创建集群弹性伸缩的集群ID,进入该集群操作页面。
  4. 选择节点管理 > 伸缩组,进入伸缩组列表页。
  5. 单击新建伸缩组,进入新建伸缩组流程。
  6. 根据以下提示设置启动配置

    • 名称:用户自定义启动配置名称,伸缩组名称在地域范围内唯一。
    • 所在集群:伸缩组所属的集群。
    • 创建方式:支持自定义机型配置基于已有节点配置,用户根据自己的需求进行选择,当选择基于已有节点配置的创建方式时,启动配置将继承选择的已有节点的如下配置:机型、CPU、内存、系统盘大小、数据盘大小、磁盘类型、安全组、私有网络、子网。
    • 计费方式:目前仅支持按量付费。
    • 机型配置:用户根据实际情况配置数据中心、CPU、内存、是否支持IPV6、架构、分类、镜像、系统盘等机型信息。
    • 数据盘:自定义数据盘大小以及选择是否格式化并挂载至指定目录下。
    • 容器存储目录:按需选择是否自定义容器和镜像存储目录,建议存储到数据盘,如不设置,默认为/data/docker。
    • 登录方式:伸缩组内云服务器的登录方式,支持密钥登陆和密码登陆。
    • 所属项目:选择伸缩组中的机器所属的项目。
    • label:为伸缩组设置 Label,会在自动扩容出的节点上设置 Label,从而实现服务的灵活调度策略。
    • 高级配置(可选):按需配置以下信息: 高级配置.PNG

      • 部署前执行脚本:指定自定义数据来配置Node,即当节点部署前执行的命令脚本,需要自行保证脚本的可重入及重试逻辑, 脚本及其生成的日志文件可在节点的/usr/local/ksyun/kce/pre_userscript路径查看。
      • 部署后执行脚本:指定自定义数据来配置Node,即当节点部署后执行的命令脚本,需要自行保证脚本的可重入及重试逻辑, 脚本及其生成的日志文件可在节点的/usr/local/ksyun/kce/userscript路径查看。
      • 封锁:根据需求勾选是否封锁worker节点,封锁worker节点后,将不接受新的Pod调度到该节点,若需重新调度,则要手动取消封锁的节点。更多操作请见详情。若勾选封锁节点,则触发扩容时实际节点数量按照设置的最大伸缩数来进行扩容。
      • Label:为伸缩组设置 Label,会在自动扩容出的节点上设置 Label,从而实现服务的灵活调度策略,可根据需求进行Label自定义设置。
  7. 根据以下提示设置伸缩组配置
    • 关联VPC:默认集群所在VPC,不可更换。
    • 关联子网:选择伸缩组内机器所在子网。
    • 多子网扩展策略:有均衡分布以及优先选择两种策略,请根据实际需求进行选择:
      • 均衡分布:弹性服务器扩容时优先保证选择的子网列表中各子网下弹性服务器数量均衡,当无法在目标可用区下完成弹性服务器扩容时,按照优先选择原则选择其他子网。
      • 优先选择:弹性服务器扩容时目标子网的选择按照选择的子网列表的顺序进行优先级排序。
    • 安全组:选择伸缩组内机器的伸缩组信息。
    • 节点数量范围:伸缩组内云服务器的数量范围。
  8. 点击确认,完成伸缩组的创建。

扩容条件

Cluster AutoScaler 定期(默认间隔 10s)检测是否有充足的资源来调度新创建的 Pod,当资源不足时会调用 Cloud Provider 创建新的 Node。 每当kubernetes调度程序找不到一个运行pod的地方时,它会将pod的PodCondition设置为false,并将原因设置为“unschedulable ”。集群自动扩缩容程序正是每隔一段时间扫描一次是否有不可调度的pod来进行扩容的,如果有就尝试扩容节点来运行这些pod。

扩容策略

当集群中有多个 Node Group 时,可以通过选项配置选择 Node Group 的策略,支持如下三种方式:

  • random:随机选择伸缩组进行扩容。
  • most-pods:选择容量最大(能调度更多pod)的伸缩组进行扩容。
  • least-waste:以最小浪费原则选择,选择调度pod后可用资源剩余更少的伸缩组进行扩容。

缩容条件

Cluster AutoScaler 也会定期(默认间隔 10s)自动监测 Node 的资源使用情况,当一个 Node 长时间(超过 10 分钟其期间没有执行任何扩展操作)资源利用率都很低时(默认值低于 50%)并且这个node上的pod可以被调度到别的节点上,那么CA自动将其从集群中删除。此时,原来的 Pod 会自动调度到其他 Node 上面。

当 Node 上面的 Pods 满足下面的条件之一时,Node 不会删除:

  • Pod 配置了 PodDisruptionBudget (PDB),当Pod不满足PDB时,不会缩容。

  • Node 上运行了 kube-system命名空间下的pod。

  • Pod 不是通过 deployment, replica set, job, stateful set 等控制器创建的。

  • Pod 使用了本地存储。

  • 其他原因导致的 Pod 无法重新调度,如资源不足,其他 Node 无法满足 NodeSelector 或 Affinity 等。

注意事项

  • Cluster AutoScaler 与基于监控指标的弹性伸缩的节点扩缩容(Auto Scaling,简称AS)相冲突,请不要为容器集群的伸缩组设置基于监控指标的自动扩缩。
  • 请指定 Pod 的 request 值:自动扩容的触发条件是集群中存在由于资源不足而无法调度的 Pod,而判断资源是否充足正是基于 Pod 的 request 来进行的。
  • 不要直接修改属于伸缩组内的节点,确保伸缩组中的节点具有相同的配置。
  • 删除伸缩组会同时删除伸缩组内的服务器,请谨慎操作。
  • 在集群进行缩容的过程中,服务可能会遇到一些中断。例如,如果服务包含具有单个副本的控制器,则在删除该副本的 Pod 的当前节点时,此 Pod 可能会在其他节点上重启。在启用自动缩容之前,请确保服务可以容忍潜在的中断。建议您使用PodDisruptionBudgets 阻止 Pod 在缩容时被删除。
文档导读
纯净模式常规模式

纯净模式

点击可全屏预览文档内容
文档反馈