天天看点

阿里云容器服务发布cluster-autoscaler支持

前言

cluster-autoscaler

是Kubernetes中非常受大家关注的功能特性,可以通过

cluster-autoscaler

实现节点级别的动态添加与删除,动态调整容器资源池,应对峰值流量。在Kubernetes中共有三种不同的弹性伸缩策略,分别是

HPA

(HorizontalPodAutoscaling)、

VPA

(VerticalPodAutoscaling)与

CA

(ClusterAutoscaler)。其中HPA和VPA主要扩缩容的对象是容器,而CA的扩缩容对象是节点。

发布内容

在之前容器服务提供过一个beta版本的autoscaler弹性伸缩方案,根据客户的反馈,我们在如下方面进行了了增强:

  1. GPU

    伸缩组的支持。机器学习、深度学习、高性能运算是Kubernetes中非常重要的应用场景,

    GPU

    作为一种特殊的资源与CPU、Memory等资源有较大的差异。因为通常情况下,训练任务会独占一台机器的几块

    GPU

    卡,即便利用率较低的情况下也不可以直接驱逐调度,否则可能会造成训练任务的中断。因此阿里云容器服务的cluster-autoscaler支持了

    GPU

    的伸缩,并添加了属于

    GPU

    的缩容策略,保证训练任务的不中断。
  2. 多伸缩组的支持。在一个集群中,我们可能会调度不同的类型的工作负载,而不同的工作负载对于资源的要求是不同的,扩容出高配的机器会造成资源的浪费。因此,阿里云容器服务的cluster-autoscaler支持

    GPU

    CPU

    两种类型伸缩组的控制台可视化配置,支持更多伸缩组的手动配置。
  3. 控制台UI页面可视化配置伸缩组。使用过之前autoscaler开源方案的开发者在配置autoscaler的时候遇到了很多的问题,造成弹性伸缩组件难以正常的扩缩容。因此,这次发布我们支持了控制台配置autoscaler,可以通过可视化的配置快速开启节点弹性伸缩功能。
  4. 优化弹性伸缩的速度,支持并发伸缩。Kubernetes的cluster-autoscaler的判断扩容条件一直被部分开发者所诟病,因为必须要等待Pod有无法调度的时候才能够支持节点的扩容,有可能会因为节点接入的时间过长而导致的集群雪崩。本次发布我们优化了节点伸缩的速度,1分钟创建出新节点,4分钟完成Kubernetes基础环境准备。在5分钟之内完成从节点生成到任务调度的所有过程,而且所有的过程是并行的,如果出现大量负载无法调度的场景,可以并发伸缩,防止集群雪崩。GPU集群的时间由于需要额外的配置,时间会有所增长。
  5. 多版本兼容,目前版本兼容1.9.3、1.9.7、1.10.4,低版本的Kubernetes可升级集群开启使用。
  6. 修复部分已知问题。修复伸缩组上下限变化的问题,修复缩容阈值计算失败释放节点的问题等。

操作步骤

  1. 登录 容器服务管理控制台 。 在 Kubernetes 菜单下,单击左侧导航栏中的集群,进入Kubernetes集群列表页面。选择所需的集群并单击操作列的更多 > 自动伸缩。
    阿里云容器服务发布cluster-autoscaler支持
    初次开启或未开通ESS的开发者会要求进行授权,可参考引导文档进行授权。
  2. 根据所需要弹性伸缩的资源类型(CPU/GPU),单击操作列创建。
    阿里云容器服务发布cluster-autoscaler支持
    并根据需要开启不同的配置,点击

    确定

    即可完成配置。
    阿里云容器服务发布cluster-autoscaler支持
  3. 选择目标集群和kube-system命名空间,可以看到名称为cluster-autoscaler的组件已创建成功,表名此时弹性伸缩组件已经下发成功,集群已经做好弹性伸缩准备。
    阿里云容器服务发布cluster-autoscaler支持
  4. 验证弹性伸缩,为所有的资源设置申请值与限制值也是使用和管理Kubernetes的最佳实践,而且Kubernetes的autoscaler也是通过资源的申请值进行判断伸缩条件的,因此要想使用HPA后者cluster-autoscaler都需要设置request的资源值。例如在本例中演示的是GPU的弹性伸缩。
apiVersion: apps/v1beta1
kind: Deployment
metadata:
  name: tensorflow
  labels:
    app: tensorflow
spec:
  replicas: 1
  selector:
    matchLabels:
      app: tensorflow
  template:
    metadata:
      labels:
        app: tensorflow
    spec:
      containers:
      - name: tensorflow
        image: registry.cn-hangzhou.aliyuncs.com/tensorflow-samples/jupyter:1.5.0-devel
        resources:
          requests:
            nvidia.com/gpu: '1'
          limits:
            nvidia.com/gpu: '1'           

部署完成后,调整容器数目,因为测试集群中只有一个GPU的实例,因此将伸缩的数目设置为2即可验证。

阿里云容器服务发布cluster-autoscaler支持

通常在判断伸缩条件满足后,VM即可开始创建,在自动伸缩页面可以看到节点的状态

阿里云容器服务发布cluster-autoscaler支持

等待5-8分钟左右,即可完成节点伸缩以及为调度的Pod的正常运行。

阿里云容器服务发布cluster-autoscaler支持

当集群中申请的资源低于阈值的时候,会触发缩容,实现集群的弹性伸缩。

最后

近期cluster-autoscaler会完成开源并提交给社区,希望大家保持关注,

https://github.com/AliyunContainerService/autoscaler

继续阅读