当前位置: 首页 > news >正文

容器服务kubernetes弹性伸缩高级用法

前言

近期,阿里云容器服务kubernetes发布了cluster-autoscaler的支持,开发者可以通过页面简单快捷的配置节点的弹性伸缩,支持普通实例、GPU实例以及竞价实例帮助开发者实现架构弹性和运营成本之间的博弈。阿里云容器服务kubernetes的cluster-autoscaler的能力还有很多会陆续通过控制台开放出来,对于cluster-autoscaler高级功能有强需求的开发者,也提供手动配置的方式进行实现,那么接下来我们一起来看一下cluster-autoscaler支持的高级功能。

高级功能解析

在解析高级特性之前,我们首先要了解的是弹性伸缩的主要原理,在阿里云容器服务kubernetes中,通过页面配置的伸缩规则会转换为ESS(弹性伸缩服务)中的伸缩组,主动下发组件cluster-autoscaler,并将组ID作为参数传递给cluster-autoscaler,然后cluster-autoscaler会根据相应的配置实现伸缩组的选择以及具体弹出的实例规格。下发的cluster-autoscaler在命名空间kube-system下面,模板内容如下:

clipboard.png

可以看到在cluster-autoscaler的启动参数中包含了--node的参数,里面配置了伸缩组的ID,cluster-autoscaler就是通过这个组ID来识别伸缩组信息并实现伸缩的。在了解了这些原理后,我们来看下怎么使用阿里云容器服务kubernetes提供的高级特性。阿里云容器服务kubernetes的cluster-autoscaler支持如下高级特性:

clipboard.png

接下来我们针对上述的高级特性进行一一解析:

单可用区、多可用区支持

阿里云容器服务kubernetes集群支持单可用区与多可用区两种形式,多可用区的kubernetes集群可以具备更好的集群鲁棒性,不会因为单一可用区机房的宕机造成整个集群的不可用。那么多可用区的cluster-autoscaler有什么好处呢?多可用区的cluster-autoscaler可以提高实例弹性伸缩的成功率。因为云资源是动态调整的,每个地域每个可用区的库存都会根据不同的时间不同的资源状态进行调整,同样规格的实例可能在可用区A中可以生产,但是在可用区B中无法生产。如果配置多个可用区,那么就拥有了在多个可用区中弹出实例的可能,提高了弹性伸缩的成功率。

目前在控制台上只支持单可用区的伸缩组配置,那么怎么创建一个具有多可用区的弹性伸缩组并使用呢,从上文我们了解到cluster-autoscaler只需要识别伸缩组ID即可,那么只需要创建一个新的伸缩组,并配置给cluster-autoscaler即可。

clipboard.png

伸缩组中的其他配置,建议拷贝一个已有的伸缩做来设置,降低配置的难度。最后将这个伸缩组的ID配置到yaml中即可

clipboard.png

多实例规格的支持

多实例规格可以获得更好的伸缩成功率,而且结合竞价实例可以获得更优的运营成本节约,对于竞价实例不了解的开发者,可以先参考下这篇文档。多实例规格的支持方式非常简单,我们可以无需新建伸缩组,只需修改已有的配置即可。通过容器服务弹性伸缩的页面点击进入ESS的伸缩组配置。

clipboard.png

点击左侧菜单的伸缩配置以及右侧配置的修改按钮,并添加希望加入的其他配置,此处需要特别注意的是容器的配置一定要保证规格一致,比如CPU和内存的大小必须保持一致

clipboard.png

clipboard.png

配置完成点击确认配置即可生效。

定时伸缩与报警伸缩

定时伸缩是一个非常常见的伸缩场景,但是定时伸缩与cluster-autoscaler的伸缩策略是不完全相同的,那么如何实现呢。此处我们只需要依赖ESS(弹性伸缩服务)即可,首先参考多可用的配置,先创建一个伸缩组。然后在这个伸缩组中设置弹出的伸缩规则。

clipboard.png

在定时任务中设置任务配置,选择伸缩组与伸缩规则,并设置执行时间

clipboard.png

此时,就设置完成了一个定时的伸缩,如果需要周期性设置,那么可以勾选下放的重复周期设置。同理,可以设置缩容的规则,以及缩容的时间。对于报警伸缩而言,和定时伸缩配置方法是一致的,他们都无需依赖cluster-autoscaler来实现。

自定义安装脚本

在讲解如何定义安装脚本之前,需要额外讲解下一个ECS的机器是如何加入到集群中的,在伸缩配置的高级选项中有一个base64的自定义数据,我们通过base64的解码工具进行解析,可以看到里面内容如下:

clipboard.png

上述的脚本的作用就是将一个ECS的节点加入到集群中的,我们自定义的安装脚本可以添加到上述脚本后面,然后通过base64工具进行加密,并贴回原来的自定义数据框内即可。

最后

在本文中,给大家讲解了如何使用cluster-autoscaler的高级特性来支持不同维度和场景的弹性伸缩,cluster-autoscaler也会在近期开源并提交给社区,有需求或者问题可以提交issues到github(https://github.com/AliyunCont...)

本文作者:莫源

阅读原文

本文为云栖社区原创内容,未经允许不得转载。

相关文章:

  • TERMIOS详解【转】
  • 求连续数字的和------------------------------用while的算法思想
  • Zabbix3.0基础教程之二:item、trigger、action、graph配置
  • BZOJ2216: [Poi2011]Lightning Conductor(DP 决策单调性)
  • 递增链表的插入
  • (转) SpringBoot:使用spring-boot-devtools进行热部署以及不生效的问题解决
  • Linux 环境变量的配置解决(-bash: jps: command not found)问题
  • Tomcat学习—Tomcat的简介和目录以及配置文件介绍(Windows环境)
  • Kafka简介
  • Jvm(49),指令集----异常处理指令
  • centos7设置开机启动
  • RedHat已更改其开源许可规则
  • C/C++——二维数组与指针、指针数组、数组指针(行指针)、二级指针的用法...
  • 程序员的迷茫期
  • Java集合源码学习(1)接口
  • [译]Python中的类属性与实例属性的区别
  • 【5+】跨webview多页面 触发事件(二)
  • 【编码】-360实习笔试编程题(二)-2016.03.29
  • go append函数以及写入
  • JavaScript DOM 10 - 滚动
  • Java多线程(4):使用线程池执行定时任务
  • Java教程_软件开发基础
  • JS 面试题总结
  • js面向对象
  • Laravel核心解读--Facades
  • npx命令介绍
  • Redis字符串类型内部编码剖析
  • SOFAMosn配置模型
  • ucore操作系统实验笔记 - 重新理解中断
  • vue-cli在webpack的配置文件探究
  • 闭包--闭包作用之保存(一)
  • 对话:中国为什么有前途/ 写给中国的经济学
  • 关键词挖掘技术哪家强(一)基于node.js技术开发一个关键字查询工具
  • 可能是历史上最全的CC0版权可以免费商用的图片网站
  • 微信公众号开发小记——5.python微信红包
  • 一个6年java程序员的工作感悟,写给还在迷茫的你
  • 终端用户监控:真实用户监控还是模拟监控?
  • JavaScript 新语法详解:Class 的私有属性与私有方法 ...
  • ​2020 年大前端技术趋势解读
  • ​如何在iOS手机上查看应用日志
  • (3)llvm ir转换过程
  • (Spark3.2.0)Spark SQL 初探: 使用大数据分析2000万KF数据
  • (SpringBoot)第七章:SpringBoot日志文件
  • (超详细)语音信号处理之特征提取
  • (附源码)springboot教学评价 毕业设计 641310
  • (力扣)循环队列的实现与详解(C语言)
  • (全注解开发)学习Spring-MVC的第三天
  • (四) Graphivz 颜色选择
  • (转)程序员技术练级攻略
  • (转)原始图像数据和PDF中的图像数据
  • .【机器学习】隐马尔可夫模型(Hidden Markov Model,HMM)
  • .NET Core 和 .NET Framework 中的 MEF2
  • .net企业级架构实战之7——Spring.net整合Asp.net mvc
  • .vue文件怎么使用_vue调试工具vue-devtools的安装
  • ??myeclipse+tomcat