ACP云原生容器工程师 - ACK自动伸缩

概述

弹性伸缩是ACK特点功能之一,典型的场景包括:

  • 在线业务弹性

  • 大规模计算训练

  • 定时周期性负载变化等

弹性伸缩分为两个维度:

  • 弹性调度层:主要负责修改负载的调度容量变化,在已有资源条件下进行pod调度

  • 资源弹性层:主要负责扩充资源的方式调度容量的补充,对资源本社进行调度

资源层阶段弹性提供

  • 阿里云Kubernetes集群的一个重要特性,是集群的节点可以动态的增加或减少

  • 有了这个特性,集群才能在计算资源不足的情况下扩充新的节点

  • 同时,也可以在资源利用率降低的时候,释放节点以节省费用

  • 资源层扩缩容可以分为:手动扩缩容、自动扩缩容

资源层弹性插件

  • Cluster-autoscaler: Kubernetes社区开源组件,节点水平伸缩软件,阿里云提供了独有的调度、弹性优化、成本优化的功能。

  • Virtual-node: ACK开源插件,提供无服务器运行时环境,开发者无需挂心节点资源,只需针对Pod按量付费即可。

  • Virtual-kubelet-autoscaler: ACK服务组件,提供无服务弹性伸缩能力

节点自动伸缩

节点自动伸缩机制

定期检测集群中应用pod的状态,如果处于pending状态且日志中出现调度原因不足时,会触发cluster-autoscaler的模拟调度,会在各node中查询哪台机可以负载新的pod,如果有就分配;如果没有就触发资源调度,实现资源级别的自动伸缩。

节点自动伸缩实现原理

  • 阿里云容器服务ACK的自动伸缩能力,是通过节点自动伸缩组件(cluster-autoscaler)实现的。

  • 可以按需弹出普通实例、GPU实例、竞价付费实例、支持多可用区、多实例规格、多种伸缩模式、满足不同的节点伸缩场景。

    • 伸缩配置:通过控制台配置伸缩节点的规格属性

    • 自动伸缩组件监听:自动伸缩组件cluster-autoscaler,它以Pod的形式运行在K8S集群中、监听Pod状态,在Pod因为节点资源不足而不能被调度的状态时,启动自动伸缩规则

    • 伸缩规则启动:根据伸缩配置的内容,启动ESS弹性伸缩服务

    • ESS弹性伸缩服务创建实例:通过ESS他行设所服务按照配置创建实例后,继续进行集群监听

节点自动伸缩操作

可分为3个步骤:

  • 执行自动伸缩

  • 弹性伸缩服务ESS授权

  • 配置自动伸缩

  • 查看结果

调度层弹性伸缩

调度层弹性介绍

  • 调度层弹性组件是指所有的弹性动作都是和pod相关的,并不关心具体的资源情况。

  • 调度层弹性组件包括:容器水平伸缩(HPA),容器垂直伸缩(VPA),容器定时伸缩(CronHPA)

调度层弹性组件

  • HPA: Pod水平伸缩的组件

    • 除了社区支持的Resource Metrics和CustomMetrics,阿里云容器服务Kuberenetes还提供了external-metrics-adapter

    • 支持云服务的指标作为弹性伸缩的判断条件

    • 目前已经支持例如Ingress的QPS、RT等监控指标

  • VPA:Pod的纵向伸缩的最贱,主要面向有状态服务的扩容和升级场景,用于大型单体应用

  • CronHPA:定时伸缩组件,主要面向的是周期性负载,通过资源画像可以预测有规律的负载周期,并通过周期性伸缩,实现资源成本的节约

调度层弹性组件使用场景及限制

通常使用HPA+AutoScaler进行两层扩容,HPA负载容量管理,AutoScaler负责资源池的所扩容

ACK开启HPA

小结

  • 阿里云容器服务ACK弹性伸缩分为两个维度:

    • 调度层弹性:主要负责修改负载的调度容量变化

    • 资源层调度:主要是集群的容量规划不能满足集群调度容量时,会通过扩充资源的方式进行调度容量的补充

  • 阿里云容器服务Kubernetes弹性调度资源:

    通过调度与资源解耦的两层弹性模型来解决的,当集群的调度水位达到设置的阈值时会触发资源蹭的弹性扩容,当资源弹出后,无法调度的单元会自动调度到新弹出的节点上,从而降低整个应用的负载情况

  • 阿里云容器服务ACK集群调度层弹性组件:

    • 容器水平伸缩(HPA)

    • 容器垂直伸缩(VPA)

    • 容器定时伸缩(CronHPA)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章