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

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.11master012cpu双核4G100G
192.168.10.12worker012cpu双核4G100G
192.168.10.13worker022cpu双核4G100G

版本 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)执行压测 前言…...

Mock数据

Mock 数据 引入依赖 <dependency><groupId>com.github.jsonzou</groupId><artifactId>jmockdata</artifactId><version>4.3.0</version></dependency>mock 数据 MockConfig mockConfig new MockConfig().sizeRange(1, 1);A.…...

【MySQL】性能分析

https://www.bilibili.com/video/BV1Kr4y1i7ru/?p78 查看执行频次 查看当前数据库的 INSERT, UPDATE, DELETE, SELECT 访问频次&#xff1a; SHOW GLOBAL STATUS LIKE Com_______; 或者 SHOW SESSION STATUS LIKE Com_______; 慢查询日志 慢查询日志记录了所有执行时间超过指…...

MyBatis插件机制

MyBatis插件机制是该框架提供的一种灵活扩展方式&#xff0c;允许开发者在不修改框架源代码的情况下对MyBatis的功能进行定制和增强。这种机制主要通过拦截器&#xff08;Interceptor&#xff09;实现&#xff0c;使得开发者可以拦截和修改MyBatis在执行SQL语句过程中的行为。 …...

NVIDIA Jetson Linux 35.3.1-开发指南-导言

原文地址&#xff1a;Welcome — Jetson Linux Developer Guide documentation (nvidia.com) 欢迎 本开发人员指南适用于 NVIDIA Jetson Linux版本 35.3.1 GA 。 最后更新: 2023年5月19日 NVIDIA Jetson是世界领先的边缘AI平台。其高性能、低功耗计算 深度学习 &#xff0c;…...

14. fastLED调色板

Color Palettes Functions and class definitions for color palettes.调色板的函数和类定义。 RGB palettes map an 8-bit value (0-255) to an RGB color. You can create any color palette you wish; a couple of starters are provided: ForestColors_p, CloudColors_p…...

bugku---misc---赛博朋克

1、下载附件解压之后是一个txt文本&#xff0c;查看文本的时候看到头部有NG的字样 2、把txt改为png后缀得到一张图片 3、binwalk没发现奇怪的地方&#xff0c;分离出来还是图片 4、stegslove分析&#xff0c;切换图片没有发现奇怪地方 5、将通道rgb置为0。出现了flag但是flag不…...

vue+elementplus模拟“山野愚人居”简单实现个人博客

目录 一、项目介绍 二、项目截图 1.项目结构图 2.项目首页 3.文章详情 4.留言 5.读者 三、源码实现 1.项目依赖package.json 2.项目启动 3.读者页面源码 四、总结 一、项目介绍 模仿原博客&#xff1a;山野愚人居 - 记录我的生活、所见、所闻、所想…… 本项目参考以…...

ComfyUI 完全入门:Refiner精炼器

在 SDXL基础模型1.0版本发布时&#xff0c;Stability AI 公司同时发布了一个名为SDXL Refiner的模型。这个Refiner模型是专门设计用来对基础模型生成的图像进行进一步优化和细化的&#xff0c;所以大家也经常称之为精炼器或者精修器。 Refiner模型的主要目的是提升图像的质量&…...

FastAPI操作关系型数据库

FastAPI可以和任何数据库和任意样式的库配合使用&#xff0c;这里看一下使用SQLAlchemy的示例。下面的示例很容易的调整为PostgreSQL&#xff0c;MySQL&#xff0c;SQLite&#xff0c;Oracle等。当前示例中我们使用SQLite ORM对象关系映射 FastAPI可以与任何数据库在任何样式…...

数字化那点事:一文读懂智慧城市

一、智慧城市的定义 一个城市信息化发展历程主要包括数字城市、信息城市、智慧城市、互联城市等阶段&#xff0c;现就我们当前所处的智慧城市阶段做个简要介绍。 智慧城市是利用先进的信息和通信技术&#xff08;ICT&#xff09;、物联网&#xff08;IoT&#xff09;、大数据分…...

RabbitMQ-topic exchange使用方法

RabbitMQ-默认读、写方式介绍 RabbitMQ-发布/订阅模式 RabbitMQ-直连交换机(direct)使用方法 目录 1、概述 2、topic交换机使用方法 2.1 适用场景 2.2 解决方案 3、代码实现 3.1 源代码实现 3.2 运行记录 4、小结 1、概述 topic 交换机是比直连交换机功能更加强大的…...

6-11 函数题:某范围中的最小值

6-11 函数题&#xff1a;某范围中的最小值 分数 5 全屏浏览 作者 雷丽兰 单位 宜春学院 有n(n<1000)个整数&#xff0c;从这n个整数中找到值落在&#xff08;60至100之间&#xff09;的最小整数。 函数接口定义&#xff1a; int min ( int arr[], int n); 说明&#xf…...

Flask基础2-Jinja2模板

目录 1.介绍 2.模板传参 1.变量传参 2.表达式 3.控制语句 4.过滤器 5.自定义过滤器 6.测试器 7.块和继承 flask基础1 1.介绍 Jinja2:是Python的Web项目中被广泛应用的模板引擎,是由Python实现的模板语言,Jinja2 的作者也是 Flask 的作 者。他的设计思想来源于Django的模…...

Serverless 使用OOS将http文件转存到对象存储

目录 背景介绍 系统运维管理OOS 文件转存场景 前提条件 实践步骤 附录 示例模板 背景介绍 系统运维管理OOS 系统运维管理OOS&#xff08;CloudOps Orchestration Service&#xff09;提供了一个高度灵活和强大的解决方案&#xff0c;通过精巧地编排阿里云提供的OpenAPI…...

AcWing 477:神经网络 ← 拓扑排序+链式前向星

【题目来源】https://www.acwing.com/problem/content/479/【题目描述】 人工神经网络&#xff08;Artificial Neural Network&#xff09;是一种新兴的具有自我学习能力的计算系统&#xff0c;在模式识别、函数逼近及贷款风险评估等诸多领域有广泛的应用。 对神经网络的研究…...

鲁教版八年级数学下册-笔记

文章目录 第六章 特殊平行四边形1 菱形的性质与判定2 矩形的性质与判定3 正方形的性质与判定 第七章 二次根式1 二次根式2 二次根式的性质3 二次根式的加减二次根式的乘除 第八章 一元二次方程1 一元二次方程2 用配方法解一元二次方程3 用公式法解一元二次方程4 用因式分解法解…...

Web前端栅格:深入解析与实战应用

Web前端栅格&#xff1a;深入解析与实战应用 在Web前端开发中&#xff0c;栅格系统是一种重要的布局工具&#xff0c;它能够帮助我们快速构建响应式、灵活且美观的页面布局。然而&#xff0c;对于许多初学者和从业者来说&#xff0c;栅格系统的概念、原理以及实际应用却常常令…...

mysql Innodb引擎常见问题

问题 1&#xff1a;InnoDB 引擎的主要特点有哪些&#xff1f; 答&#xff1a;支持事务、行级锁、外键约束&#xff0c;具有较好的数据完整性和并发性。 问题 2&#xff1a;InnoDB 如何实现事务的 ACID 特性&#xff1f; 答&#xff1a;通过原子性&#xff08;事务要么全部成功要…...

创建 MFC DLL-使用关键字_declspec(dllexport)

本文仅供学习交流&#xff0c;严禁用于商业用途&#xff0c;如本文涉及侵权请及时联系本人将于及时删除 从MFC DLL中导出函数的另一种方法是在定义函数时使用关键字_declspec(dllexport)。这种情况下&#xff0c;不需要DEF文件。 导出函数的形式为&#xff1a; declspec(dll…...

ubuntu搭建nfs服务centos挂载访问

在Ubuntu上设置NFS服务器 在Ubuntu上&#xff0c;你可以使用apt包管理器来安装NFS服务器。打开终端并运行&#xff1a; sudo apt update sudo apt install nfs-kernel-server创建共享目录 创建一个目录用于共享&#xff0c;例如/shared&#xff1a; sudo mkdir /shared sud…...

MFC内存泄露

1、泄露代码示例 void X::SetApplicationBtn() {CMFCRibbonApplicationButton* pBtn GetApplicationButton();// 获取 Ribbon Bar 指针// 创建自定义按钮CCustomRibbonAppButton* pCustomButton new CCustomRibbonAppButton();pCustomButton->SetImage(IDB_BITMAP_Jdp26)…...

在 Nginx Stream 层“改写”MQTT ngx_stream_mqtt_filter_module

1、为什么要修改 CONNECT 报文&#xff1f; 多租户隔离&#xff1a;自动为接入设备追加租户前缀&#xff0c;后端按 ClientID 拆分队列。零代码鉴权&#xff1a;将入站用户名替换为 OAuth Access-Token&#xff0c;后端 Broker 统一校验。灰度发布&#xff1a;根据 IP/地理位写…...

根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:

根据万维钢精英日课6的内容&#xff0c;使用AI&#xff08;2025&#xff09;可以参考以下方法&#xff1a; 四个洞见 模型已经比人聪明&#xff1a;以ChatGPT o3为代表的AI非常强大&#xff0c;能运用高级理论解释道理、引用最新学术论文&#xff0c;生成对顶尖科学家都有用的…...

C# 求圆面积的程序(Program to find area of a circle)

给定半径r&#xff0c;求圆的面积。圆的面积应精确到小数点后5位。 例子&#xff1a; 输入&#xff1a;r 5 输出&#xff1a;78.53982 解释&#xff1a;由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982&#xff0c;因为我们只保留小数点后 5 位数字。 输…...

手机平板能效生态设计指令EU 2023/1670标准解读

手机平板能效生态设计指令EU 2023/1670标准解读 以下是针对欧盟《手机和平板电脑生态设计法规》(EU) 2023/1670 的核心解读&#xff0c;综合法规核心要求、最新修正及企业合规要点&#xff1a; 一、法规背景与目标 生效与强制时间 发布于2023年8月31日&#xff08;OJ公报&…...

uniapp 集成腾讯云 IM 富媒体消息(地理位置/文件)

UniApp 集成腾讯云 IM 富媒体消息全攻略&#xff08;地理位置/文件&#xff09; 一、功能实现原理 腾讯云 IM 通过 消息扩展机制 支持富媒体类型&#xff0c;核心实现方式&#xff1a; 标准消息类型&#xff1a;直接使用 SDK 内置类型&#xff08;文件、图片等&#xff09;自…...

aardio 自动识别验证码输入

技术尝试 上周在发学习日志时有网友提议“在网页上识别验证码”&#xff0c;于是尝试整合图像识别与网页自动化技术&#xff0c;完成了这套模拟登录流程。核心思路是&#xff1a;截图验证码→OCR识别→自动填充表单→提交并验证结果。 代码在这里 import soImage; import we…...

CSS3相关知识点

CSS3相关知识点 CSS3私有前缀私有前缀私有前缀存在的意义常见浏览器的私有前缀 CSS3基本语法CSS3 新增长度单位CSS3 新增颜色设置方式CSS3 新增选择器CSS3 新增盒模型相关属性box-sizing 怪异盒模型resize调整盒子大小box-shadow 盒子阴影opacity 不透明度 CSS3 新增背景属性ba…...

rm视觉学习1-自瞄部分

首先先感谢中南大学的开源&#xff0c;提供了很全面的思路&#xff0c;减少了很多基础性的开发研究 我看的阅读的是中南大学FYT战队开源视觉代码 链接&#xff1a;https://github.com/CSU-FYT-Vision/FYT2024_vision.git 1.框架&#xff1a; 代码框架结构&#xff1a;readme有…...