kubernetes中HPA(pod水平自动伸缩)

一、介绍

HPA的全称为(Horizontal Pod Autoscaling)它可以根据当前pod资源的使用率(如CPU、磁盘、内存等),进行副本数的动态的扩容与缩容,以便减轻各个pod的压力。

当pod负载达到一定的阈值后,会根据扩缩容的策略生成更多新的pod来分担压力,当pod的使用比较空闲时,在稳定空闲一段时间后,还会自动减少pod的副本数量。

二、扩缩容策略

1. 通过伸缩系数判断是否要进行扩容或缩容
HPA会根据获得的指标数值,应用相应的算法算出一个伸缩系数,此系数是指标的期望值与目前值的比值,如果大于1表示扩容,小于1表示缩容。
–horizontal-pod-autoscaler-tolerance:全局配置的容忍值,默认为0.1,如果计算出的缩放比例接近1±容忍值,将会放弃本次缩放。

期望副本数 = ceil[当前副本数 * ( 当前指标 / 期望指标 )]

检查最终的Pod数量是否在HPA设定的数量范围的区间,如果超过最大值或不足最小值都会修改为最大值或最小值。
然后向k8s发出请求,修改伸缩对象的子对象scale的Pod数量

HPA控制器执行缩放操作之前,会记录缩放建议(scale recommendation)。 控制器会在设定时间内考虑所有的建议信息,并从中选择得分最高的建议。
时间可通过kube-controller-manager的启动参数进行配置,常用参数如下:

–horizontal-pod-autoscaler-downscale-stabilization 此选项的值是一个持续时间,用于指定自动缩放器必须等待多长时间才能完成当前操作后再执行另一次缩放操作。默认值为5分钟(5m0s)。

–horizontal-pod-autoscaler-upscale-stabilization
此选项的值是一个持续时间,用于指定自动扩容器必须等待多长时间才能完成当前操作后再执行另一次扩容操作。默认值为3分钟(3m0s)。

–horizontal-pod-autoscaler-initial-readiness-delay 参数(默认为30s),用于设置Pod准备时间, 在此时间内的Pod被认为未就绪。

–horizontal-pod-autoscaler-cpu-initialization-period 参数(默认为5分钟),用于设置Pod的初始化时间,在此时间内的资源指标不会被采纳。 一个HPA支持多个指标的监控,HPA会循环获取所有的指标,计算每一个指标所提议的副本数量。扩容时算最小值,缩容时算最大值一个伸缩对象在k8s中允许对应多个HPA而不会报错,但HPA彼此不知道自己监控的是同一个伸缩对象,会互相冲突。

2. 扩容是倍增的,缩容是1/2递减的
3. 扩缩容依赖的指标主要分为三种:

  • 默认指标,主要通过metrics-server采集相关指标
  • 自定义指标,主要通过promethues采集相关指标
  • 第三方扩展工具,如云扩展采集工具

三、配置hpa主要有两种方式:

1.直接命令行方式,如:
kubectl autoscale --max=10 --min=1 --cpu-percent=5 deployment hpa-test

2.另外一种就是集成到服务的资源清单文件内,以nginx为例:

kind: Deployment
metadata:name: hpa-testlabels:app: hpa
spec:selector:matchLabels:app: nginxtemplate:metadata:labels:app: nginxspec:containers:- name: nginx-cimage: nginx:1.14.2ports:- containerPort: 80resources:requests:cpu: 0.01memory: 100Milimits:cpu: 0.01memory: 100Mi---
apiVersion: autoscaling/v2beta1
kind: HorizontalPodAutoscaler
metadata:name: pod-hpa
spec:scaleTargetRef:apiVersion: apps/v1kind: Deploymentname: hpa-testminReplicas: 1maxReplicas: 4metrics:- type: Resourceresource:name: cputargetAverageUtilization: 50- type: Resourceresource:name: memorytargetAverageUtilization: 50

测试验证,可以使用如下命令,其中ip是hpa pod的IP

[root@local-k8s-ms01 test-hpa]# kubectl get pods -A -owide|grep hpa-test

default                hpa-test-6d87fdd849-ttmd4                    1/1     Running   0          6d22h   10.244.2.20     local-k8s-nd02   <none>           <none>

while true;do curl -I 10.244.2.20;done

采用自定义监控指标进行扩缩容,请参考文档:https://blog.csdn.net/lo085213/article/details/111567974

kubernetes自动伸缩相关推荐

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

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

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

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

  3. kubernetes要实现的目标——随机关掉一台机器,看你的服务能否正常;减少的应用实例能否自动迁移并恢复到其他节点;服务能否随着流量进行自动伸缩...

    Kubernetes 是来自 Google 云平台的开源容器集群管理系统.基于 Docker 构建一个容器的调度服务.该系统可以自动在一个容器集群中选择一个工作容器供使用.其核心概念是 Contain ...

  4. Kubernetes Pod 水平自动伸缩(HPA)

    Pod 自动扩缩容 之前提到过通过手工执行kubectl scale命令和在Dashboard上操作可以实现Pod的扩缩容,但是这样毕竟需要每次去手工操作一次,而且指不定什么时候业务请求量就很大了,所 ...

  5. Kubernetes HPA 很好用吧,那是你还没遇上更强的 KEDA (基于事件驱动的自动伸缩)...

    公众号关注 「奇妙的 Linux 世界」 设为「星标」,每天带你玩转 Linux ! Kubernetes 彻底火了,这把开源之火烧到了所有互联网大厂.许多分析机构认为,以 Kubernetes 为基 ...

  6. 【kubernetes】公有云上的kubernetes集群自动伸缩方案

    kubernetes集群自动伸缩 这里的集群自动伸缩指的是根据集群的资源使用状况,自动的调整集群节点的数目,目的是充分利用集群资源,节省成本.主要应用下面两个场景: 集群资源不足,导致pod部署失败, ...

  7. 运维实操——kubernetes(十九)k8s中部署Prometheus、监控nginx、HPA自动伸缩

    k8s中部署Prometheus.监控nginx.HPA自动伸缩 1.什么是Prometheus? 2.k8s中部署Prometheus监控 3.prometheus监控nginx 4.基于prome ...

  8. 译:Spring Boot 自动伸缩

    原文链接:https://dzone.com/articles/spring-boot-autoscaler 作者:Piotr Mińkowski 译者:helloworldtang 自动伸缩是每个人 ...

  9. Kubernetes 弹性伸缩全场景解读(二)- HPA 的原理与演进

    前言 在上一篇文章 Kubernetes 弹性伸缩全场景解析 (一):概念延伸与组件布局中,我们介绍了在 Kubernetes 在处理弹性伸缩时的设计理念以及相关组件的布局,在今天这篇文章中,会为大家 ...

最新文章

  1. 利用Oracle GoldenGate记录源系统所有表的操作
  2. Android Studio 使用入门及问题汇总
  3. Vue003_class 与style 绑定
  4. 飞蚊症手术失败与Photostress Recovery
  5. LwIP Application Developers Manual9---LwIP and multithreading
  6. 【JVM】Java虚拟机
  7. 自定义关键字_Java中的自定义异常
  8. 解决service iptables save出错please try to use systemctl.
  9. [PyTorch] PyTorch版本不兼容问题+更新日志链接
  10. java中普通变量、静态变量、静态代码块初始化的顺序辨析
  11. 宝藏又小众的海边场景 海底 海岛unity3d模型素材网站分享
  12. 英特尔为RRP物联网平台项目预留1亿美元开发资金
  13. daniel powter
  14. 访问者(vistor)模式
  15. 饥荒高脚鸟蛋孵化教程
  16. 企业微信(h5页面嵌入企业微信)的分享总结
  17. 58 张图,手把手教会你 Simscape Multibody 物理建模与刚体变换!
  18. 如何看待996的工作模式
  19. WPS如何让表格里的文字上下居中
  20. android判断是否安装应用程序,android如何判断一个软件是否安装以及打开手机应用商店...

热门文章

  1. 数字电路要点总结-数模模数转换电路
  2. [DDCTF2018]流量分析
  3. kvm切换器在机场控制中心及实训模拟控制室应用
  4. splinterlands链游开发 链游开发app 链游开发公司
  5. 虚拟物品交易平台PlaySpan融资1800万美元,8uTC8S
  6. android直播视频教程
  7. [非技术] 分享一次国庆期间被火车票戳了的惊险经历
  8. r语言中mpg数据_零基础生信入门第一课——R语言数据清洗,超详细讲解,建议收藏!...
  9. 如何免费下载音频素材
  10. 阿里云ECS流量计算