一、Pod自动扩容
    Kubernetes从1.1 版本新增名为Horizontal Pod Atuosacler(HPA)的控制器,用于实现基于CPU使用率进行自动Pod扩缩容功能。HPA控制器是基于Master的kube-controller-manager服务启动参数--horizontal-pod-autoscaler-sync-period定义的探测周期(默认是15s),周期性检测目标Pod的资源性能指标,并与HPA资源对象中扩缩容条件对比,在满足条件时对Pod副本数量进行调整。
    Kubernetes早期版本只能基于Pod的CPU使用率进行自动扩缩容。从1.11版本开始,起用Heapster并转向基于Metrics Server完成数据采集。Metrics Server将采集到的Pod性能指标数据通过API提供给HAP控制器进行查询。
二、HPA的工作原理
   Kubernetes中的某个Metrics Server持续采集所有Pod副本的指标数据。HAP控制器通过 Metrics Server的API获取这些数据,基于用户定义的扩容规则进行计算,得到目标Pod的副本数量。当目标Pod副本数量与当前副本数量不同时,HPA控制器就向Pod的副本数量控制器(Deployment、RC或ReplicaSet)发起scale操作,调整Pod的副本数量完成扩缩容操作。

三、指标类型

Master的kube-controller-manager服务持续监测目标Pod的某种性能指标,以计算是否需要调整副本数量,目前kubernetes监测的性能指标

  • Pod资源使用率:Pod级别的性能指标,通常一个比率值,例如CPU使用率
  • Pod自定义指标:Pod级别的性能指标,通常是一个数值,例如接收请求数量
  • Object自定义指标或外部自定义指标:通常是一个数值,需要容器以某种方式提供,例如通过HTTP URL“/metrics”提供,或者使用外部服务提供性能指标采集URL

四、扩缩容算法

1. 设置期望值

Autoscaler控制器从聚合API获取到Pod性能指标数据后,基本下面的算法计算出目标Pod副本数量,与当前运行Pod副本数量进行比对,决定是否需要进行扩缩容操作。

desiredReplicas = ceil[currentReplicas * (currentMetricValue/desiredMetricValue)]
# 期望Pod副本数 = 当前Pod副本数 X ( 当前指标值 / 期望指标值 ),将结果向上取整
#例如(CPU请求数量为例),如果用户设置的期望指标值为100m,当前实际使用指标值为200m,计算得到期望的Pod副本数量应该为两个(200/100 = 2)。如果当前实际使用为50m,计算结果为0.5,向上取值为1,得到
#目标Pod副本数量应该为 1

当计算结果与1非常接近时,可以设置一个容忍度让系统不做扩容操作。容忍度通过kube-controller-manager服务启动参数,--horizontal-pod-autoscaler-tolerance进行设置,默认值为0.1(10%),表示基于上述算法得到的结果在[-10%, +10%]区间内,即[0.9, 1.1]区间,控制器不会进行扩缩容操作。

2. 设置期望值指标为平均值

可以将期望指标值设置为指标的平均值类型,例如targetAverageValue或targetAverageUtilization,此时当前指标值(currentMetricsValue)的算法为所有Pod副本当前指标值的总和除以Pod副本数量得到的平均值。

  • Pod正在被删除(设置了删除时间戳):将不计入目标Pod副本数量
  • Pod的当前指标值无法获取:本次探测不会讲这个Pod纳入目标Pod副本数量,后续探测会重新纳入计算范围
  • 如果指标类型是CPU使用率,则对于正在启动但还没有达到Ready状态的Pod,也暂时不会纳入目标副本Pod数量范围

使用HPA特性时,可能因为指标的动态变化造成Pod副本数量频繁变动,这也被称为“抖动”。抖动会影响业务稳定性,在Kubernetes 1.12版本增加了参数来解决这个问题,HPA扩缩容冷却时间,即从上次扩缩容执行结束之后,需要经过最少多长时间进行扩缩容操作,从而消除短时间内指标值快速波动产生的影响。对该参数调整需要根据当前生产环境的时间调整。时间过短还是会存在都用,时间过长,导致HPA失效。

Kubernetes--自动缩扩容相关推荐

  1. k8s学习笔记:缩扩容更新

    1. 前言 自动缩扩容是现代化的容器调度平台带给我们的最激动人心的一项能力.在上规模的业务系统中我们无时无刻不面临着这样的难题:用户的流量往往随着时间波动,甚至偶尔出现不可预测的峰值(毛刺流量),每当 ...

  2. vim下php文件中自动缩排html代码

    问题:vim下怎样在php文件中通过 = 命令自动缩排html代码?解决:1.先说下html自动缩排 我的vim是7.4版本,已经包含了html.vim之类的缩排插件,但是缩排的时候<body& ...

  3. 动手Lab|利用CSI和Kubernetes实现动态扩容

    简介 随着我们对客户的关注,尤其是对金融领域的客户,我们可以发现容器编排技术具有很大的发展空间.开发者们希望能通过开源解决方案来重新设计运行在虚拟化基础设施和裸金属上的独立应用程序. 对于可扩展性和技 ...

  4. 大咖实战|Kubernetes自动伸缩实现指南分享

    报名链接:大咖实战|Kubernetes自动伸缩实现指南分享 随着云计算技术的不断发展,基于虚拟机的传统云计算显示出了资源利用率低.调度分发缓慢等弊端.为了解决上述问题,作为容器技术代表性产品的Doc ...

  5. 大咖说|Kubernetes自动伸缩实现方式深度讲解

    本篇文章将从三个方面探讨如何利用 K8S 实现自定义指标的自动伸缩.第一方面主要了解自动伸缩的原理以及其重要性.第二方面主要会介绍如何通过 K8S 实现自动化伸缩能力.第三方面实战演示如何使用自定义指 ...

  6. kubernetes自动伸缩

    kubernetes中HPA(pod水平自动伸缩) 一.介绍 HPA的全称为(Horizontal Pod Autoscaling)它可以根据当前pod资源的使用率(如CPU.磁盘.内存等),进行副本 ...

  7. Kubernetes——自动扩展容器!假设你突然需要增加你的应用;你只需要告诉deployment一个新的 pod 副本总数即可...

    参考:http://kubernetes.kansea.com/docs/hellonode/ 现在你应该可以通过这个地址来访问这个service: http://EXTERNAL_IP:8080 或 ...

  8. [转贴]使用jQuery自动缩图片 - [jQuery]

    具体思路: 通过具体容器取得容器内所有图片 循环检查所有图片长宽 对超过的图重新定高度. 直接写成一个扩展好了,以后可以直接用. jquery.fn.ImageAutoSize = function( ...

  9. 游戏日志分析2:全方位数据采集

    系列文章: 游戏日志分析(1):概览 游戏日志分析(2):全方位数据采集 游戏日志分析(3):程序日志规范与埋点 游戏日志分析(4):线上问题定位与排查 游戏日志分析(5):数据库与日志关联分析 游戏 ...

最新文章

  1. 【Flutter】底部导航栏页面框架 ( BottomNavigationBar 底部导航栏 | PageView 滑动页面 | 底部导航与滑动页面关联操作 )
  2. php __tostring 与 tostring
  3. 1289 大鱼吃小鱼
  4. 刷新DNS解析缓存+追踪+域名解析命令
  5. windows 终端查看python位置
  6. 图相处理自学(二):图像处理基本算法Black level / sensor offset/ Shading/ Color Matrix/ AWB(QP值)
  7. Date对象中的方法
  8. webpack 打包第三方库_webpack提取第三方库的正确姿势
  9. 俄亥俄大学计算机科学系,俄亥俄大学课程及专业设置
  10. Navicat-在创建函数时提示Access violation at address ... in module ‘navicat.exe‘
  11. 【接口技术】实验四:8254定时器与计数器
  12. 为什么android手机内存不够,安卓手机内存不足怎么办?安卓手机内存越来越小解决方法汇总...
  13. 1-23 Socket编程
  14. 72、公安网络视频监控系统解决方案
  15. laravel框架图片无法显示问题
  16. OpenStack Kolla-Ansible部署Trove数据库服务Daas,部署Ceilometer数据收集服务,Gnocchi对接Ceph
  17. C语言直接输出一句话(或英文字符)
  18. c 语言memmove,memmove - [ C语言中文开发手册 ] - 在线原生手册 - php中文网
  19. 商派oneX新零售系统上架华为云云商店,首次参与“828企业节”
  20. 纯CSS实现炫酷旋转小风车

热门文章

  1. 全球各国黑客网络犯罪形式概览
  2. Win10修改msconfig后无法开机怎么办?
  3. Russian Dolls on the Christmas Tree
  4. 会计 金融管理 计算机网络技术,天津海运职业学院专业排名,招生专业目录(10篇)...
  5. Github Page绑定至个人域名
  6. mac忘记root密码
  7. 用AI技术防止幼儿园虐待儿童,中国研究员研发视频流分析模型
  8. cocos2d-x 3.0游戏实例学习笔记《卡牌塔防》第三步---编辑器(2)---更方便很多其它操作更像编辑器...
  9. 创新,有时是不经意间开放的花朵——访2013 CCF青年科学家奖获得者朱军
  10. 测试意外:DevOps测试中的右移