阿里云容器服务发布cluster-autoscaler支持-阿里云开发者社区

开发者社区> 阿里云容器服务 ACK> 正文

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

简介: 前言 cluster-autoscaler是Kubernetes中非常受大家关注的功能特性,可以通过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支持GPUCPU两种类型伸缩组的控制台可视化配置,支持更多伸缩组的手动配置。
  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集群列表页面。选择所需的集群并单击操作列的更多 > 自动伸缩
    初次开启或未开通ESS的开发者会要求进行授权,可参考引导文档进行授权。
  2. 根据所需要弹性伸缩的资源类型(CPU/GPU),单击操作列创建
    并根据需要开启不同的配置,点击确定即可完成配置。lALPBY0V49NSEerNBCHNBaA_1440_1057_png_620x10000q90g
  3. 选择目标集群和kube-system命名空间,可以看到名称为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即可验证。image通常在判断伸缩条件满足后,VM即可开始创建,在自动伸缩页面可以看到节点的状态image等待5-8分钟左右,即可完成节点伸缩以及为调度的Pod的正常运行。image当集群中申请的资源低于阈值的时候,会触发缩容,实现集群的弹性伸缩。

最后

近期cluster-autoscaler会完成开源并提交给社区,希望大家保持关注,https://github.com/AliyunContainerService/autoscaler

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
阿里云容器服务 ACK
使用钉钉扫一扫加入圈子
+ 订阅

云端最佳容器应用运行环境,安全、稳定、极致弹性

官方博客
官网链接