k8s学习--kubernetes服务自动伸缩之水平收缩(pod副本收缩)HPA详细解释与案例应用
文章目录
- 前言
- HPA简介
- 简单理解
- 详细解释
- HPA 的工作原理
- 监控系统
- 负载模式
- HPA 的优势
- 使用 HPA 的注意事项
- 应用类型
- 应用
- 环境
- 1.metircs-server部署
- 2.HPA演示示例
- (1)部署一个服务
- (2)创建HPA对象
- (3)执行压测
前言
有任何疑问或不懂的地方均可评论或私信,欢迎交流
HPA简介
简单理解
HAP,全称 Horizontal Pod Autoscaler
简单来说就是根据指标来对pod副本数量进行自动控制
比如说cpu和内存使用率
HPA 定期检查内存和 CPU
使用率高就会自动创建多个副本(上限取决于自定义的数量)
使用率低就会关闭多个副本(下限取决于自定义的数量)
实际生产中,广泛使用这四类指标:
1、Resource metrics - CPU和内存利用率指标
2、Pod metrics - 例如网络利用率和流量
3、Object metrics - 特定对象的指标,比如Ingress, 可以按每秒使用请求数来扩展容器
4、Custom metrics - 自定义监控,比如通过定义服务响应时间,当响应时间达到一定指标时自动扩容
详细解释
在 Kubernetes (k8s) 中,HPA 指的是 Horizontal Pod Autoscaler(水平 Pod 自动伸缩)。这是 Kubernetes 中用于自动调整 Pod 副本数量的机制,以应对负载的变化,确保应用程序的高可用性和资源的有效利用。
HPA 的工作原理
监控指标
HPA 通过 Kubernetes Metrics Server 或者其他自定义的指标(如 Prometheus),定期获取当前的负载情况。常见的指标包括 CPU 使用率、内存使用率、自定义指标(例如 QPS,查询每秒)等。
调整策略
根据定义的策略,HPA 会判断是否需要增加或减少 Pod 的数量。例如,如果 CPU 使用率超过预设的阈值,HPA 会增加 Pod 的数量;如果 CPU 使用率低于预设的阈值,HPA 会减少 Pod 的数量。
监控系统
HPA 依赖于监控系统提供的指标数据,常见的监控系统包括:
Kubernetes Metrics Server
提供基础的 CPU 和内存使用率数据。
Prometheus
一个更强大的监控系统,可以自定义多种指标,并与 Kubernetes 集成。
Datadog、New Relic 等第三方监控工具
可以提供更详细的应用监控数据。
负载模式
根据应用的负载模式配置 HPA 的策略:
周期性负载
如果应用负载有明显的周期性变化(如电商网站的流量在白天和晚上波动),可以根据历史数据调整 HPA 策略。
突发负载
对于突发性负载(如新闻网站在重大事件发生时流量激增),需要配置更灵活的伸缩策略,以快速响应负载变化。
持续增长负载
对于持续增长的负载(如新产品发布后的用户增长),需要确保 HPA 能够持续扩展并保持应用性能。
HPA 的优势
自动化伸缩
根据负载自动调整 Pod 数量,确保应用在高负载下能够提供足够的计算资源,而在低负载下又不浪费资源。
高可用性
通过及时增加 Pod 数量,防止应用因为资源不足而出现性能问题。
节约成本
通过在低负载时减少 Pod 数量,节省资源和成本。
使用 HPA 的注意事项
监控数据源
确保 Metrics Server 或者其他指标数据源的稳定性和准确性,否则 HPA 的调整可能不准确。
冷启动时间
在负载激增时,新增的 Pod 可能需要一些时间启动,应用需要考虑这一点,避免在短时间内出现资源不足的情况。
阈值设置
合理设置指标阈值,避免频繁的伸缩操作,造成系统的不稳定。
应用类型
HPA 适用于以下类型的应用:
Web 应用
具有高并发请求特点的应用,可以通过 HPA 在流量高峰时增加 Pod 数量,保证响应速度。
后台处理服务
如数据处理、消息队列消费者等,根据任务队列的长度或处理速度进行伸缩。
微服务架构
每个服务可以独立伸缩,HPA 可以根据每个服务的负载情况动态调整 Pod 数量
应用
虚拟机
环境
| Ip | 主机名 | cpu | 内存 | 硬盘 |
|---|---|---|---|---|
| 192.168.10.11 | master01 | 2cpu双核 | 4G | 100G |
| 192.168.10.12 | worker01 | 2cpu双核 | 4G | 100G |
| 192.168.10.13 | worker02 | 2cpu双核 | 4G | 100G |
版本 centos7.9
已部署k8s-1.27
1.metircs-server部署
master上操作
wget https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/high-availability-1.21+.yaml
kubelet 证书需要由集群证书颁发机构签名
(或者通过向 Metrics Server 传递参数 --kubelet-insecure-tls 来禁用证书验证)。
更改文件
vim high-availability-1.21+.yaml
149行添加

解释
因为是虚拟机环境,这条命令是允许 kubelet 使用不安全的 TLS 连接,生产环境不建议使用,这里是便于快速部署和测试已看到效果。
kubectl apply -f high-availability-1.21+.yaml
watch kubectl get pods -n kube-system
耐心等待,如果一直起不来就先删除pod再重启个节点docker。

kubectl top nodes

kubectl top pods -n kube-system

这里就部署好了,让我们来演示一下
2.HPA演示示例
(1)部署一个服务
mkdir hpa
cd hpa/
vim 01-nginx.yaml
apiVersion: apps/v1
kind: Deployment
metadata:labels:app: nginxname: nginxnamespace: default
spec:replicas: 2selector:matchLabels:app: nginxtemplate:metadata:labels:app: nginxspec:containers:- name: nginximage: nginx:latestimagePullPolicy: IfNotPresentresources:requests:cpu: 200mmemory: 100Mi
---
apiVersion: v1
kind: Service
metadata:name: nginxnamespace: default
spec:type: NodePortports:- port: 80targetPort: 80selector:app: nginx
kubectl apply -f 01-nginx.yaml
kubectl get pods
如果没有镜像可能会慢点,耐心等待即可

这是不是报错,是再重新拉取镜像,再耐心等待一下即可
好了

(2)创建HPA对象
这是一个 HorizontalPodAutoscaler (HPA) 对象的配置,它将控制 Deployment “nginx” 的副本数量。当 CPU 使用率超过 50% 时,HPA 将自动增加 Pod 的副本数量,最高不超过 10 个。
vim 02-nginx-hpa.yaml
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:name: nginx-hpanamespace: default
spec:scaleTargetRef:apiVersion: apps/v1kind: Deploymentname: nginxminReplicas: 1maxReplicas: 10metrics:- type: Resourceresource:name: cputarget:type: UtilizationaverageUtilization: 50
kubectl apply -f 02-nginx-hpa.yaml
kubectl get hpa

(3)执行压测
下载工具,查看服务ip
yum -y install httpd-toolskubectl get svc

ab -c 1000 -n 100000000000 http://192.168.10.11:32435/
打开另一个终端查看
可以看到正在增加
kubectl get hpa


可以看到再不断变多
kubectl get hpa
指标会越来越小


10个是因为最高设置的10个
压力测试停止一段时间后查看
kubectl get pods
pod会越来越少
直到设置的最小数量

kubectl get hpa

大约5分钟以后
kubectl get hpa
kubectl get pods


可以看到pod数量已经到设置最小数量
至此
完成
相关文章:
k8s学习--kubernetes服务自动伸缩之水平收缩(pod副本收缩)HPA详细解释与案例应用
文章目录 前言HPA简介简单理解详细解释HPA 的工作原理监控系统负载模式HPA 的优势使用 HPA 的注意事项应用类型 应用环境1.metircs-server部署2.HPA演示示例(1)部署一个服务(2)创建HPA对象(3)执行压测 前言…...
台式机ubuntu22.04安装nvidia驱动
总结一个极简易的安装方法 正常安装ubuntu 22.04正常更新软件 sudo apt update sudo apt upgrade -y参考ubuntu官方网站的说明https://ubuntu.com/server/docs/nvidia-drivers-installation#/ # 首先检查系统支持驱动的版本号 sudo ubuntu-drivers list我显示的内容如下&…...
C++ 11 【线程库】【包装器】
💓博主CSDN主页:麻辣韭菜💓 ⏩专栏分类:C修炼之路⏪ 🚚代码仓库:C高阶🚚 🌹关注我🫵带你学习更多C知识 🔝🔝 目录 前言 一、thread类的简单介绍 get_id…...
可视化数据科学平台在信贷领域应用系列四:决策树策略挖掘
信贷行业的风控策略挖掘是一个综合过程,需要综合考虑风控规则分析结果、效果评估、线上实时监测和业务管理需求等多个方面,以发现和制定有效的信贷风险管理策略。这些策略可能涉及贷款审批标准的调整、贷款利率的制定、贷款额度的设定等,在贷…...
数据查询深分页优化方案
大家好,我是冰河~~ 最近不少小伙伴在实际工作过程中,遇到了单表大数据量分页的问题,问我怎么优化分页查询。其实,这就是典型的深分页问题。今天趁着周末,给大家整理一些在深分页场景的简单处理方案。 一、普通分页查…...
Redis的主从复制
Redis主从复制是 Redis 内置的⼀种数据冗余和备份⽅式,同时也是分发读查询负载的⼀种⽅法。通过主从复制,可以有多个从服务器(Slave )复制⼀个主服务器(Master )的数据。在这个系统中,数据的复制…...
网络安全实战基础——实战工具与攻防环境介绍
一、实战集成工具 1. 虚拟机 VMware Workstation:大家熟知的虚拟机 Virtual Box:开源免费、轻量级 2. Kali Linux 工具集 信息收集 Nmap:免费开放的网络扫描和嗅探包,可探测主机是否在线,扫描主机端口和嗅探网络…...
vue2组件封装实战系列之tag组件
作为本系列的第一篇文章,不会过于的繁杂,并且前期的组件都会是比较简单的基础组件!但是不要忽视这些基础组件,因为纵观elementui、elementplus还是其他的流行组件库,组件库的封装都是套娃式的,很多复杂组件…...
VBA实战(Excel)(4):实用功能整理
1.后台打开Excel 用于查数据,工作中要打开多个表获取数据再关闭的场景,利用此函数可以将excel表格作为后台数据库查询,快速实现客户要求,缺点是运行效率不够高。 Sub openexcel(exl_name As String)If Dir(addr, 16) Empty Then…...
nginx mirror流量镜像详细介绍以及实战示例
nginx mirror流量镜像详细介绍以及实战示例 1.nginx mirror作用2.nginx安装3.修改配置3.1.nginx.conf3.2.conf.d目录下添加default.conf配置文件3.3.nginx配置注意事项3.3.nginx重启 4.测试 1.nginx mirror作用 为了便于排查问题,可能希望线上的请求能够同步到测试…...
Android14 WMS-窗口添加流程(二)-Server端
Android14 WMS-窗口添加流程(一)-Client端-CSDN博客 本文接着上文"Android14 WMS-窗口添加流程(一)-Client端"往下讲。也就是WindowManagerService#addWindow流程。 目录 一. WindowManagerService#addWindow 标志1:mPolicy.checkAddPermission 标志…...
【传知代码】DETR[端到端目标检测](论文复现)
前言:想象一下,当自动驾驶汽车行驶在繁忙的街道上,DETR能够实时识别出道路上的行人、车辆、交通标志等目标,并准确预测出它们的位置和轨迹。这对于提高自动驾驶的安全性、减少交通事故具有重要意义。同样,在安防监控、…...
Edge浏览器十大常见问题,一次性解决!
Edge曾被称为最好用的浏览器,拳打Chrome脚踢firefox, 可如今却隐藏着像是播放卡顿、下载缓慢、广告繁多等诸多问题,不知道各位还在用吗? 今天小编收集整理了Edge浏览器十大烦人问题,并提供简单有效的解决办法,让你的E…...
lubuntu / ubuntu 配置静态ip
一、查看原始网络配置信息 1、获取网卡名称 ifconfig 2、查询网关IP route -n 二、编辑配置文件 去/etc/netplan目录找到配置文件,配置文件名一般为01-network-manager-all.yaml sudo vim /etc/netplan/01-network-manager-all.yaml文件打开后内容如下 # This …...
15、matlab绘图汇总(图例、标题、坐标轴、线条格式、颜色和散点格式设置)
1、plot()函数默认格式画图 代码: x0:0.1:20;%绘图默认格式 ysin(x); plot(x,y) 2、X轴和Y轴显示范围/axis()函数 代码: x0:0.1:20;%绘图默认格式 ysin(x); plot(x,y) axis([0 21 -1.1 1.1])%设置范围 3、网格显示/grid on函数 代码: …...
调试环境搭建(Redis 6.X 版本)
今儿,我们来搭建一个 Redis 调试环境,目标是: 启动 Redis Server ,成功断点调试 Server 的启动过程。使用 redis-cli 启动一个 Client 连接上 Server,并使用 get key 指令,发起一次 key 的读取。 视频可见…...
postgres数据库报错无法写入文件 “base/pgsql_tmp/pgsql_tmp215574.97“: 设备上没有空间
解决思路: base/pgsql_tmp下临时表空间不够 需要新建一个临时表空间指定到根目录之外的其他目录 并且修改默认临时表空间参数 解决方法: select * from pg_settings where name temp_tablespaces;mkdir /home/postgres/tbs_tmp CREATE TABLESPACE tbs_t…...
力扣2762. 不间断子数组
力扣2762. 不间断子数组 multiset法 multiset:元素从小到大排序 begin()返回头指针 (最小)rbegin()返回尾指针 (最大) class Solution {public:long long continuousSubarrays(vector<int>& nums) {int n nums.size();long long res 0;multiset<…...
OpenCV学习(4.8) 图像金字塔
1.目的 在这一章当中, 我们将了解图像金字塔。我们将使用图像金字塔创建一个新的水果,“Orapple”我们将看到这些功能: cv.pyrUp() , cv.pyrDown() 在通常情况下我们使用大小恒定…...
【TB作品】msp430f5529单片机,dht22,温湿度传感器,OLED显示屏
使用DHT22温湿度传感器和OLED显示屏的单片机项目 博客名称 利用MSP430单片机读取DHT22并显示温湿度 作品功能 本项目利用MSP430单片机读取DHT22温湿度传感器的数据,并将温湿度信息显示在OLED显示屏上。通过这个项目,您可以学习如何使用单片机与传感器…...
前端倒计时误差!
提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...
ffmpeg(四):滤镜命令
FFmpeg 的滤镜命令是用于音视频处理中的强大工具,可以完成剪裁、缩放、加水印、调色、合成、旋转、模糊、叠加字幕等复杂的操作。其核心语法格式一般如下: ffmpeg -i input.mp4 -vf "滤镜参数" output.mp4或者带音频滤镜: ffmpeg…...
Java入门学习详细版(一)
大家好,Java 学习是一个系统学习的过程,核心原则就是“理论 实践 坚持”,并且需循序渐进,不可过于着急,本篇文章推出的这份详细入门学习资料将带大家从零基础开始,逐步掌握 Java 的核心概念和编程技能。 …...
消息队列系统设计与实践全解析
文章目录 🚀 消息队列系统设计与实践全解析🔍 一、消息队列选型1.1 业务场景匹配矩阵1.2 吞吐量/延迟/可靠性权衡💡 权衡决策框架 1.3 运维复杂度评估🔧 运维成本降低策略 🏗️ 二、典型架构设计2.1 分布式事务最终一致…...
Sklearn 机器学习 缺失值处理 获取填充失值的统计值
💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 使用 Scikit-learn 处理缺失值并提取填充统计信息的完整指南 在机器学习项目中,数据清…...
FFmpeg avformat_open_input函数分析
函数内部的总体流程如下: avformat_open_input 精简后的代码如下: int avformat_open_input(AVFormatContext **ps, const char *filename,ff_const59 AVInputFormat *fmt, AVDictionary **options) {AVFormatContext *s *ps;int i, ret 0;AVDictio…...
如何配置一个sql server使得其它用户可以通过excel odbc获取数据
要让其他用户通过 Excel 使用 ODBC 连接到 SQL Server 获取数据,你需要完成以下配置步骤: ✅ 一、在 SQL Server 端配置(服务器设置) 1. 启用 TCP/IP 协议 打开 “SQL Server 配置管理器”。导航到:SQL Server 网络配…...
【深度学习新浪潮】什么是credit assignment problem?
Credit Assignment Problem(信用分配问题) 是机器学习,尤其是强化学习(RL)中的核心挑战之一,指的是如何将最终的奖励或惩罚准确地分配给导致该结果的各个中间动作或决策。在序列决策任务中,智能体执行一系列动作后获得一个最终奖励,但每个动作对最终结果的贡献程度往往…...
前端调试HTTP状态码
1xx(信息类状态码) 这类状态码表示临时响应,需要客户端继续处理请求。 100 Continue 服务器已收到请求的初始部分,客户端应继续发送剩余部分。 2xx(成功类状态码) 表示请求已成功被服务器接收、理解并处…...
DAY 45 超大力王爱学Python
来自超大力王的友情提示:在用tensordoard的时候一定一定要用绝对位置,例如:tensorboard --logdir"D:\代码\archive (1)\runs\cifar10_mlp_experiment_2" 不然读取不了数据 知识点回顾: tensorboard的发展历史和原理tens…...
