kubernetes v1.29.XX版本HPA、KPA、VPA并压力测试
序言:
在大型电商、购物、直播活动期间,对于火爆流量的激增,如何保障业务稳定并且做到资源不浪费,自动回收。
场景:kubernetes 原生容器化承载业务流量(非云环境)
方案:kubernetes自带HPA、KPA、VPA板块
板块选择
一、KPA板块
KPA(Knative Pod Autoscaler)基于请求数对Pod自动扩缩容,KPA的主要限制在于它不支持基于CPU的自动扩缩容。
- 根据并发请求数实现自动扩缩容
- 设置扩缩容边界实现自动扩缩容
扩缩容边界是指应用程序提供服务的最小和最大Pod数量。通过设置应用程序服务的最小和最大Pod数量实现自动扩缩容。
二、HPA板块
国内HPA介绍地址:
https://kubernetes.p2hp.com/docs/tasks/run-application/horizontal-pod-autoscale/
水平扩缩容意味着更多的pod被创建和清理,支持平均 CPU 利用率、平均内存利用率或你指定的任何其他自定义等指标,自动伸缩Replication Controller、Deployment 或者Replica Set 中的 Pod 数量。
- 基于kube-controller-manager控制器定义的服务启动参数horizontal-pod-autoscaler-sync-period(default 15s)周期性检测CPU的使用率
- HorizontalPodAutoscaler 被实现为 Kubernetes API 资源和控制器。
- HorizontalPodAutoscaler 的常见用途是将其配置为从聚合 API
(metrics.k8s.io、custom.metrics.k8s.io 或 external.metrics.k8s.io)获取指标。
注意:metrics.k8s.io API 通常由名为 Metrics Server 的插件提供,需要单独启动,部署方案:
https://blog.csdn.net/binqian/article/details/144170031
优缺点
优点:
- 支持滚动升级时扩缩
- HPA 的任何目标资源都可以基于其中的 Pods 的资源用量来实现扩缩。
- 支持容器资源指标
- 可扩展性强,支持自定义指标
- 单独对 Metrics API 的支持
缺点:
- HPA的流程涉及到POD从0到1流程的创建,流程中的网络问题比较敏感
- 现有场景都是依赖Metric Server去动态监测
- 水平扩展需要临时或者长期有足够的空闲资源
- 现有常用的副本控制器不支持 DaemonSet
- 参与自动伸缩的副本控制器不得指定副本数量,容易导致HPA异常
核心参数
- ScaleTargetRef:指定 HPA 将要作用的资源对象,如 Deployment、Replica Set 或 RC 的名称。
- MinReplicas:最小副本数,即使在负载很低时也不会低于这个数量。
- MaxReplicas:最大副本数,即使在负载很高时也不会超过这个数量。
- Metrics:定义用于触发伸缩的度量标准和目标值。常见:targetCPUUtilizationPercentage
用例说明
---
apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:name: xxxx #自定义名称
spec:scaleTargetRef:apiVersion: apps/v1kind: Deployment #指定要自动缩放的目标对象,这里是一个Deploymentname: xxxx #指定deployment的标签nameminReplicas: 1maxReplicas: 5
#自动扩缩的副本数,最大5,最小1targetCPUUtilizationPercentage: 50 #CPU利用率的阀值50%
压力测试
本机环境如下:
业务yaml
[root@k8s-docker-master ~]# cat hpa-test.yaml
apiVersion: apps/v1
kind: Deployment
metadata:name: centos-testlabels:test: centos
spec:replicas:selector:matchLabels:test: centostemplate:metadata:labels:test: centosspec:containers:- name: centosimage: centos:7command: ["/bin/bash", "-c", "yum -y install epel-release;yum -y install stress;sleep 3600"]resources:limits:cpu: "1"memory: 512Mi---
apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:name: hpa-centos7
spec:scaleTargetRef:apiVersion: apps/v1kind: Deploymentname: centos-testminReplicas: 1maxReplicas: 3targetCPUUtilizationPercentage: 50[root@k8s-docker-master ~]# kubectl apply -f hpa-test.yaml
deployment.apps/centos-test configured
horizontalpodautoscaler.autoscaling/hpa-centos7 created
[root@k8s-docker-master ~]# kubectl get pod -A | grep centos-test
default centos-test-594d5479c8-tf44w 1/1 Running 0 4m37s
[root@k8s-docker-master ~]# kubectl get horizontalpodautoscaler -A
NAMESPACE NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
default hpa-centos7 Deployment/centos-test 0%/50% 1 3 1 66s
满足阈值的开始扩容,低于开始缩容,这里显示REPLICAS数值为2不跳动是因为扩容很快,缩容很慢导致。建议弄一个新的环境去压力测试。
三、VPA板块
VPA 全称 Vertical Pod Autoscaler,即垂直 Pod 自动扩缩容,它根据容器资源使用率自动设置 CPU 和内存的requests, 以便为每个 Pod 提供适当的资源。
既可以缩小过度请求资源的容器,也可以根据其使用情况随时提升资源不足的容量
使用 VPA 的意义:
- Pod 资源用其所需,提升集群节点使用效率;
- 不必运行基准测试任务来确定 CPU 和内存请求的合适值;
- VPA可以随时调整CPU和内存请求,无需人为操作,因此可以减少维护时间。
注意:VPA目前还没有生产就绪,在使用之前需要了解资源调节对应用的影响。
VPA架构图
VPA 主要包括两个组件:
1)VPA Controller
- Recommendr:给出 pod 资源调整建议
- Updater:对比建议值和当前值,不一致时驱逐 Pod (evicts pods)
2)VPA Admission Controller - Pod 重建时将 Pod 的资源请求量修改为推荐值
utilization and events history(获取历史使用率和事件)
utilization and events (realtime)(获取实时使用率和事件)
工作流程
VPA只监听pod和利用Updater驱除pod,推荐数值
真正执行覆写(overwrites pod spec)是VPA Admission Crotroller
流程如下:
- 若资源使用率发生变化,Recommender会对当前资源使用情况和历史资源使用情况,进行分析计算资源使用的阈值,若对比计算值和当前值不一致会给出资源调整建议(set
recommendation过程) - Updater根据建议调用API去除pod
- pod被驱除后就会触发副本控制器进行重建,在这重建过程中VPA Admission
Crotroller会监听拦截,根据Recommended resources来调整资源 - VPA Admission Crotroller执行overwrites pod spec更改pod资源信息对pod进行重建
VPA优缺点
优点:
- VPA自动对集群内资源进行计算调度,降低运维成本
- VPA垂直扩展便于pod资源管理
- VPA类似于资源动态分配,能准确的使用掉分配的资源,不造成浪费
缺点:
- VPA成熟度不足,涉及到重建pod,容易调度到其他node节点
- VPA 不会驱除无副本控制器管理下的pod
- 不能和前者监控CPU、内存为度量的HPA同时运行(若HPA有定制化或者外部资源可以)
- 强依赖admission webhook准入控制器,不能跟其他admission webhook冲突
- VPA会处理绝大多数的OOM事件,但无法做到100%
- VPA未应用在大型集群的经验,生态范围太小
- VPA 通过Remmonder计算的阈值可能会超过当前node的资源上线,导致pod重建后pending,无法正常调度
- 多个VPA同时调度同一个pod 会造成未定义的行为
总体上来说,弊端偏大,特别是对pod重建具有对业务很大的冲击性,容易导致业务崩溃,据说在v1.26版本后有新功能实现可以缓解破坏性重建pod带来的风险
用例说明(待更新)
相关文章:

kubernetes v1.29.XX版本HPA、KPA、VPA并压力测试
序言: 在大型电商、购物、直播活动期间,对于火爆流量的激增,如何保障业务稳定并且做到资源不浪费,自动回收。 场景:kubernetes 原生容器化承载业务流量(非云环境) 方案:kubernetes自…...

flutter 常用UI组件
文章目录 1. Toast 文本提示框oktoastbot_toast2. loading 加载窗flutter_easyloading3. 对话框gex dialog4.下拉刷新pull_to_refresh5. pop 窗custom_pop_up_menu6. pin code 密码框pinput7. 二维码qr_flutter8. swiper 滚动组件carousel_sliderflutter_swiper_view9. Badge 角…...

HarmonyOS NEXT应用开发边学边玩系列:从零实现一影视APP (五、电影详情页的设计实现)
在上一篇文章中,完成了电影列表页的开发。接下来,将进入电影详情页的设计实现阶段。这个页面将展示电影的详细信息,包括电影海报、评分、简介以及相关影人等。将使用 HarmonyOS 提供的常用组件,并结合第三方库 nutpi/axios 来实现…...
hive表修改字段类型没有级连导致历史分区报错
一:问题背景 修改hive的分区表时有级连概念,指字段的最新状态,默认只对往后的分区数据生效,而之前的分区保留历史元数据状态。好处就是修改语句的效率很快,坏处就是如果历史分区的数据还有用,那就回发生分…...

云上贵州多彩宝荣获仓颉社区先锋应用奖 | 助力数字政务新突破
在信息技术应用创新的浪潮中,仓颉社区吸引了众多企业和开发者的积极参与,已有多个应用成功落地,展现出蓬勃的创新活力。仓颉编程语言精心遴选了在社区建设、应用创新、开源共建、技术布道等方面做出突出贡献的优秀项目应用,并颁发…...

JS宏进阶:JS宏中的文件系统FileSystem
FileSystem对象中包含文件和文件夹的一些基本和常见的操作接口。比如:判断路径是否存在、创建文件夹、创建文件、读取文件等等。他的出现可以取代文件流对txt或csv等文件的操作。官方文档网址:https://open.wps.cn/previous/docs/client/wpsLoad…...

XML序列化和反序列化的学习
1、基本介绍 在工作中,经常为了调通上游接口,从而对请求第三方的参数进行XML序列化,这里常使用的方式就是使用JAVA扩展包中的相关注解和类来实现xml的序列化和反序列化。 2、自定义工具类 import javax.xml.bind.JAXBContext; import javax.x…...
npm ERR! code CERT_HAS_EXPIRED
很不幸看到这个提示。 查了很多网上的解决方案,都提到一个解决方案: npm install -g npmlatest 靠就是执行install报的错,你要我通过install来解决这个问题。可见大多数人都是转发,从不自己试试。 第二个是看系统时间。这个基…...

30分钟内搭建一个全能轻量级springboot 3.4 + 脚手架 <5> 5分钟集成好caffeine并使用注解操作缓存
快速导航 <1> 5分钟快速创建一个springboot web项目 <2> 5分钟集成好最新版本的开源swagger ui,并使用ui操作调用接口 <3> 5分钟集成好druid并使用druid自带监控工具监控sql请求 <4> 5分钟集成好mybatisplus并使用mybatisplus generator自…...
【设计模式-结构型】装饰器模式
一、什么是装饰器模式 装饰器模式(Decorator Pattern)是一种结构型设计模式,它的核心思想是在不改变原有对象结构的情况下,动态地给对象增加一些功能,从而达到扩展功能的目的。举个例子,今天在家妈妈给蒸馒…...

分布式数据存储基础与HDFS操作实践(副本)
以下为作者本人撰写的报告,步骤略有繁琐,不建议作为参考内容,可以适当浏览,进一步理解。 一、实验目的 1、理解分布式文件系统的基本概念和工作原理。 2、掌握Hadoop分布式文件系统(HDFS)的基本操作。 …...

Linux 进程前篇(冯诺依曼体系结构和操作系统)
目录 一.冯诺依曼体系结构 1.概念 2.硬件层面的数据流 3.总结加补充 二.操作系统 (Operating System) 1.概念 2.设计OS的目的 3.定位 4.操作系统的管理 5.计算机体系的层状结构 在我们认识进程之前,我们先了解什么是冯诺依曼体系结构 一.冯诺依曼体系结构…...
Springboot Redisson 分布式锁、缓存、消息队列、布隆过滤器
redisson-spring-boot-starter 是 Redisson 提供的 Spring Boot 集成包,旨在简化与 Redis 的交互,包括分布式锁、缓存、消息队列、布隆过滤器等功能的实现。 Maven 依赖 在 Spring Boot 项目中添加 redisson-spring-boot-starter 依赖: <…...

【C语言】_字符串拷贝函数strcpy
目录 1. 函数声明及功能 2. 使用示例 3. 注意事项 4. 模拟实现 4.1 第一版:基本功能判空const修饰 4.2 第二版:优化对于\0的单独拷贝 4.3 第三版:仿strcpy的char*返回值 1. 函数声明及功能 char * strcpy ( char * destination, cons…...

基于 Vue 的拖拽缩放卡片组件:实现思路、方法及使用指南
引言 在前端开发中,实现可交互的组件能够极大地提升用户体验。本文将介绍一个基于 Vue 封装的可缩放卡片组件,从实现思路、代码具体实现以及使用方法等方面进行详细阐述,帮助开发者更好地理解和运用这一组件。项目源码地址:https…...

nginx 实现 正向代理、反向代理 、SSL(证书配置)、负载均衡 、虚拟域名 ,使用其他中间件监控
我们可以详细地配置 Nginx 来实现正向代理、反向代理、SSL、负载均衡和虚拟域名。同时,我会介绍如何使用一些中间件来监控 Nginx 的状态和性能。 1. 安装 Nginx 如果你还没有安装 Nginx,可以通过以下命令进行安装(以 Ubuntu 为例࿰…...

Kafka客户端-“远程主机强迫关闭了一个现有的连接”故障排查及解决
Kafka客户端-“远程主机强迫关闭了一个现有的连接”故障排查及解决 1. 故障现象 Kafka客户端发送数据时,出现“远程主机强迫关闭了一个现有的连接”错误,导致数据发送失败。错误信息如下: 2. 故障排查 【1】. 查看服务网络状态 出现故障…...

Node.js - Express框架
1. 介绍 Express 是一个基于 Node.js 的 Web 应用程序框架,主要用于快速、简便地构建 Web 应用程序 和 API。它是目前最流行的 Node.js Web 框架之一,具有轻量级、灵活和功能丰富的特点。 核心概念包括路由,中间件,请求与响应&a…...

AWS Lambda
AWS Lambda 是 Amazon Web Services(AWS)提供的无服务器计算服务,它让开发者能够运行代码而不需要管理服务器或基础设施。AWS Lambda 会自动处理代码的执行、扩展和计费,开发者只需关注编写和部署代码,而无需担心底层硬…...
mysql 如何快速删除表数据
在数据库管理中, 经常会遇到需要删除大量数据的情况. 对于 MySQL 数据库而言, 如何高效快速地删除数据是一个值得深入探讨的问题. 本文将详细介绍几种在 MySQL 中快速删除数据的方法及相关注意事项. delete 语句 delete 语句可以删除符合条件的指定数据, 但是在删除大量数据…...

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析
1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具,该工具基于TUN接口实现其功能,利用反向TCP/TLS连接建立一条隐蔽的通信信道,支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式,适应复杂网…...

python打卡day49
知识点回顾: 通道注意力模块复习空间注意力模块CBAM的定义 作业:尝试对今天的模型检查参数数目,并用tensorboard查看训练过程 import torch import torch.nn as nn# 定义通道注意力 class ChannelAttention(nn.Module):def __init__(self,…...
java 实现excel文件转pdf | 无水印 | 无限制
文章目录 目录 文章目录 前言 1.项目远程仓库配置 2.pom文件引入相关依赖 3.代码破解 二、Excel转PDF 1.代码实现 2.Aspose.License.xml 授权文件 总结 前言 java处理excel转pdf一直没找到什么好用的免费jar包工具,自己手写的难度,恐怕高级程序员花费一年的事件,也…...
质量体系的重要
质量体系是为确保产品、服务或过程质量满足规定要求,由相互关联的要素构成的有机整体。其核心内容可归纳为以下五个方面: 🏛️ 一、组织架构与职责 质量体系明确组织内各部门、岗位的职责与权限,形成层级清晰的管理网络…...

ESP32 I2S音频总线学习笔记(四): INMP441采集音频并实时播放
简介 前面两期文章我们介绍了I2S的读取和写入,一个是通过INMP441麦克风模块采集音频,一个是通过PCM5102A模块播放音频,那如果我们将两者结合起来,将麦克风采集到的音频通过PCM5102A播放,是不是就可以做一个扩音器了呢…...

OPenCV CUDA模块图像处理-----对图像执行 均值漂移滤波(Mean Shift Filtering)函数meanShiftFiltering()
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 在 GPU 上对图像执行 均值漂移滤波(Mean Shift Filtering),用于图像分割或平滑处理。 该函数将输入图像中的…...

算法岗面试经验分享-大模型篇
文章目录 A 基础语言模型A.1 TransformerA.2 Bert B 大语言模型结构B.1 GPTB.2 LLamaB.3 ChatGLMB.4 Qwen C 大语言模型微调C.1 Fine-tuningC.2 Adapter-tuningC.3 Prefix-tuningC.4 P-tuningC.5 LoRA A 基础语言模型 A.1 Transformer (1)资源 论文&a…...

安宝特案例丨Vuzix AR智能眼镜集成专业软件,助力卢森堡医院药房转型,赢得辉瑞创新奖
在Vuzix M400 AR智能眼镜的助力下,卢森堡罗伯特舒曼医院(the Robert Schuman Hospitals, HRS)凭借在无菌制剂生产流程中引入增强现实技术(AR)创新项目,荣获了2024年6月7日由卢森堡医院药剂师协会࿰…...
动态 Web 开发技术入门篇
一、HTTP 协议核心 1.1 HTTP 基础 协议全称 :HyperText Transfer Protocol(超文本传输协议) 默认端口 :HTTP 使用 80 端口,HTTPS 使用 443 端口。 请求方法 : GET :用于获取资源,…...
tomcat入门
1 tomcat 是什么 apache开发的web服务器可以为java web程序提供运行环境tomcat是一款高效,稳定,易于使用的web服务器tomcathttp服务器Servlet服务器 2 tomcat 目录介绍 -bin #存放tomcat的脚本 -conf #存放tomcat的配置文件 ---catalina.policy #to…...