K8s HPA的常用功能介绍

Kubernetes 的 Horizontal Pod Autoscaler (HPA) 是一种自动扩展功能,用于根据资源使用情况(如 CPU、内存等)或自定义指标,动态调整 Pod 的副本数量,从而保证应用的性能和资源利用率。

以下是 HPA 的常用功能介绍:


1. 自动伸缩 (Auto Scaling)

HPA 的核心功能是根据指标动态调整应用的 Pod 副本数。其伸缩规则基于设定的目标指标,自动增加或减少 Pod 数量,从而满足应用负载的变化需求。

  • 扩容:当资源使用量超出设定的目标时,HPA 增加 Pod 副本数。
  • 缩容:当资源使用量低于目标时,HPA 减少 Pod 副本数,节省资源。

2. 基于 CPU/内存的扩缩容

HPA 最常见的应用场景是基于 CPU 或内存的使用率:

  • CPU 使用率:例如,将目标 CPU 使用率设为 50%,当实际使用率超过 50% 时,HPA 会扩容,直到使用率恢复到目标值以下。
  • 内存使用率:类似的,基于内存使用率调整 Pod 的副本数。

配置示例:

apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:name: my-app-hpa
spec:scaleTargetRef:apiVersion: apps/v1kind: Deploymentname: my-appminReplicas: 2maxReplicas: 10metrics:- type: Resourceresource:name: cputarget:type: UtilizationaverageUtilization: 50

3. 基于自定义指标 (Custom Metrics)

除了 CPU 和内存,HPA 还可以使用自定义指标(Custom Metrics)作为扩缩容的依据。例如:

  • 请求速率(如 QPS 或 RPS)。
  • 消息队列长度(如 Kafka、RabbitMQ 中的未处理消息数)。
  • 业务指标(如订单数量、活跃用户数)。

配置示例:

apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:name: custom-metrics-hpa
spec:scaleTargetRef:apiVersion: apps/v1kind: Deploymentname: custom-appminReplicas: 3maxReplicas: 15metrics:- type: Podspods:metric:name: custom_metric_requeststarget:type: AverageValueaverageValue: 100

要实现自定义指标,需要使用 Kubernetes 的 Custom Metrics API,并配置监控工具(如 Prometheus + Adapter)。


4. 多指标扩缩容 (Multiple Metrics)

HPA 支持使用多个指标进行扩缩容决策。例如,基于 CPU 和自定义业务指标同时监控,满足任何一个条件都会触发扩缩容。

配置示例:

apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:name: multi-metrics-hpa
spec:scaleTargetRef:apiVersion: apps/v1kind: Deploymentname: multi-appminReplicas: 1maxReplicas: 20metrics:- type: Resourceresource:name: cputarget:type: UtilizationaverageUtilization: 60- type: Podspods:metric:name: custom_metric_latencytarget:type: AverageValueaverageValue: 200

5. 动态最小/最大副本数

HPA 支持根据负载动态调整副本数,但需要明确设定:

  • 最小副本数 (minReplicas):保证服务在负载低时不会缩容到 0,确保高可用。
  • 最大副本数 (maxReplicas):防止因负载异常导致的过度扩容,保护集群资源。

6. 支持 VPA 与 HPA 的组合使用

虽然 HPA 负责横向扩展(调整 Pod 数量),但 Kubernetes 还提供 Vertical Pod Autoscaler (VPA),用于纵向扩展(调整单个 Pod 的资源限制)。两者可以结合使用:

  • HPA 动态调整 Pod 数量。
  • VPA 动态调整 Pod 的资源分配(如 CPU 和内存限制)。

7. 适配不同的工作负载

HPA 可以应用于多种工作负载类型,包括:

  • Deployment(常见应用工作负载)。
  • ReplicaSet(控制特定版本的副本数)。
  • StatefulSet(有状态应用)。
  • Job 和 CronJob(扩缩容运行的任务)。

8. 冷却时间 (Cooldown Time)

HPA 通过 --horizontal-pod-autoscaler-downscale-stabilization 和其他参数,设置扩容和缩容的稳定时间,避免频繁扩缩容导致的不稳定。


9. 与监控工具集成

HPA 通常依赖监控系统提供指标数据,例如:

  • Kubernetes Metrics Server(默认支持 CPU 和内存)。
  • Prometheus(结合 Prometheus Adapter 支持自定义指标)。
  • Datadog、New Relic 等云监控工具

10. HPA 限制和注意事项

  • 指标延迟:采集和响应指标存在一定延迟。
  • 最低副本数:HPA 不支持将 minReplicas 设置为 0,需结合 Kubernetes 的 CronJob 或 Knative 实现零实例。
  • 资源预留:确保节点有足够的资源分配新 Pod,避免扩容失败。

总结

HPA 是 Kubernetes 集群中高效、灵活的扩展机制,通过动态调整 Pod 副本数来应对负载变化,保障应用性能。结合自定义指标、监控工具和资源管理,HPA 能帮助开发团队实现更高效的资源利用和服务稳定性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/64506.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

电子系统中用于降噪的接地

当接地系统中存在EMI、RFI 或由焊机、变速驱动器、电器等引起的电脉冲等干扰时,它们会在中性线和接地之间产生共模噪声,可能会影响电子设备。 国家电气规范 (NEC) 允许安装隔离接地插座 (IG),即磁轭和接地端子之间没有连接。轭是插座后面的金…

SmartX分享:SMTX ZBS 中 RDMA 技术简介

目录 背景如何实现存储网络是什么TCP/IPRDMARDMA 工作原理RDMA 的实现方案 ZBS 支持 RDMA 的要求 参考 背景 我们清楚,分布式存储将利用网络作不同设备的互联。最基础的如TCP/IP的IP SAN,进阶的有FC SAN、IB等等。 SmartX 支持 10G以上的TCP/IP网络作为…

【人工智能数学基础】——深入详解贝叶斯理论:掌握贝叶斯定理及其在分类和预测中的应用

深入详解贝叶斯理论:掌握贝叶斯定理及其在分类和预测中的应用 贝叶斯理论(Bayesian Theory)是概率论和统计学中的一个重要分支,它以托马斯贝叶斯(Thomas Bayes)命名,主要关注如何根据新的证据更…

使用JustAuth实现gittee登录

使用JustAuth实现gittee登录 登录流程&#xff1a; 点击 Github 图标时&#xff0c;调用 handleGiteeLogin获取 Gitee 登录地址并跳转Gitee 授权后&#xff0c;后端进行相关的验证登录等成功后回调到gitee填的回调地址 1.添加依赖 <dependency><groupId>me.zhy…

矩阵的基本知识

例题1&#xff1a;求矩阵最小值&#xff0c;和其所在的行和列 #include<stdio.h> int main() { int arr[10][10]; int g; scanf("%d",&g); int m,n,i,r c; for(i0;i<g;i) { scanf("%d %d",&m,&…

《Vue3实战教程》5:响应式基础

如果您有疑问&#xff0c;请观看视频教程《Vue3实战教程》 响应式基础​ API 参考 本页和后面很多页面中都分别包含了选项式 API 和组合式 API 的示例代码。现在你选择的是 组合式 API。你可以使用左侧侧边栏顶部的“API 风格偏好”开关在 API 风格之间切换。 声明响应式状态…

【后端面试总结】深入解析进程和线程的区别

在操作系统和并发编程中&#xff0c;进程和线程是两个核心概念。它们各自承担着不同的职责&#xff0c;并在多任务处理中发挥着关键作用。本文将从定义、特性、应用场景以及优缺点等多个方面对进程和线程进行详细对比&#xff0c;帮助读者深入理解它们之间的区别。 一、进程和…

QT网络(二):TCP通信

传输层概念 传输控制协议&#xff08;transmission control protocol&#xff0c;TCP&#xff09;是一种被大多数 Internet 网络协议用于数据传输的底层网络协议&#xff0c;它是可靠的、面向流和连接的传输协议&#xff0c;特别适合用于连续数据传输。 应用层在网络模型中的…

【记录50】uniapp安装uview插件,样式引入失败分析及解决

SassError: Undefined variable: "$u-border-color". 表示样式变量$u-border-color没定义&#xff0c;实际是定义的 首先确保安装了scss/sass 其次&#xff0c;根目录下 app.vue中是否全局引入 <style lang"scss">import /uni_modules/uview-ui/in…

std::async 和 std::packaged_task

0、背景 在现代 C 中&#xff0c;std::async 和 std::packaged_task 是两个非常重要的工具&#xff0c;能够帮助我们更好地处理并发和异步操作。它们分别代表了异步执行任务的两种不同的方式&#xff0c;但都可以有效地将任务的执行从主线程或调用线程中分离出来&#xff0c;以…

windows上安装Redis

下载&#xff1a;https://github.com/tporadowski/redis&#xff08;官方不提供windows版&#xff09; 配置文件里设置密码&#xff1a;requirepass 123456 添加服务的命令&#xff1a; redis-server --service-install redis.windows-service.conf --loglevel verbose (--serv…

TypeScript 与 JavaScript

文章目录 一、为 JavaScript 库添加类型定义(一)什么是类型定义文件(.d.ts 文件)(二)手动编写类型定义和使用现有类型定义(如 DefinitelyTyped)手动编写类型定义使用现有类型定义(如 DefinitelyTyped)二、在 TypeScript 项目中使用流行的 JavaScript 库(如 jQuery、…

从源码构建安装Landoop kafka-connect-ui

背景 部署Landoop kafka-connect-ui最简单的办法还是通过docker来部署&#xff0c;我们之前的kafka-connect-ui就是通过docker部署的&#xff0c;但是&#xff0c;最近发现个问题&#xff1a;当使用docker部署且防火墙使用的是firewalld的情况下&#xff0c;就会出现端口冲突。…

算法—动态规划

一、简介 动态规划&#xff08;Dynamic Programming&#xff0c;简称 DP&#xff09;是一种通过将原问题分解为若干个子问题来求解最优化问题的算法思想。动态规划常常用于解决那些可以被分解为更小的重叠子问题的场景。 与分治法的区别在于&#xff0c;分治法会将问题分解成独…

Android GO 版本锁屏声音无效问题

问题描述 Android go版本 在设置中打开锁屏音开关&#xff0c;息屏灭屏还是无声音 排查 vendor\mediatek\proprietary\packages\apps\SystemUI\src\com\android\systemui\keyguard\KeyguardViewMediator.java private void setupLocked() {...String soundPath Settings.G…

使用 NVIDIA DALI 计算视频的光流

引言 光流&#xff08;Optical Flow&#xff09;是计算机视觉中的一种技术&#xff0c;主要用于估计视频中连续帧之间的运动信息。它通过分析像素在时间维度上的移动来预测运动场&#xff0c;广泛应用于目标跟踪、动作识别、视频稳定等领域。 光流的计算传统上依赖 CPU 或 GP…

Tomcat的安装即使用

Tomcat的概念 Tomcat服务器是Java语言开发的&#xff0c;免费的开放源代码的Web应用服务器。 Tomcat处理静态HTML的能力远不及Apache或者Nginx&#xff0c;通常是作为一个Servlet和JSP容器&#xff0c;单独运行在后端。 Tomcat是由三个功能组合而成&#xff1a; java servlet&…

Linux:进程(环境变量、程序地址空间)

目录 冯诺依曼体系结构 操作系统 设计操作系统的目的 操作系统的管理 进程 PCB fork 进程状态 进程状态查看 僵尸进程 孤儿进程 进程优先级 查看、修改进程优先级命令 竞争、独立、并行、并发 进程切换 活动队列和运行队列 活动队列 过期队列 active指针…

对于使用exe4j打包,出现“NoClassDefFoundError: BOOT-INF/classes”的解决方案

jar使用exe4j打包exe&#xff0c;出现NoClassDefFoundError: BOOT-INF/classes 注意选取的jar包是使用build&#xff0c;而不是maven中的install 本文介绍解决这个方法的方案 点击Project Structure 按照如图所示选择 选择main class&#xff0c;选择你要打的main 如果遇到/M…

SpringBoot 编程式事务使用

目录 1. 简介2. TransactionTemplate 方式3. TransactionManager 方式4. 事务传播行为5. 事务隔离级别6. 最佳实践7. 常见问题与解决方案 1. 简介 编程式事务管理是通过编写代码来管理事务&#xff0c;相对于声明式事务&#xff08;Transactional注解&#xff09;&#xff0…