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

【一起来学kubernetes】33、Hpa使用详解

Kubernetes HPA(Horizontal Pod Autoscaler)使用详解

HPA(Horizontal Pod Autoscaler)是 Kubernetes 中用于实现 Pod 水平自动扩缩容的核心组件,通过动态调整副本数以应对负载变化


一、HPA 工作原理
  1. 基础流程
    HPA 控制器周期性地(默认 15 秒)通过 Metrics API 获取目标资源(如 Deployment)的监控指标,对比实际值与目标阈值,按算法计算期望副本数并调整。

    • 指标来源:支持资源指标(CPU/内存)、自定义指标(如 QPS)、外部指标(如 Kafka 队列长度)。
    • 算法公式期望副本数 = ceil[当前副本数 × (当前指标值 / 目标值)]
  2. 版本演进

    • HPA v1(autoscaling/v1):仅支持 CPU 利用率。
    • HPA v2(autoscaling/v2):扩展支持多指标组合(CPU、内存、自定义/外部指标),提供更灵活的扩缩策略。

二、HPA 配置步骤
1. 前置条件
  • 安装 Metrics Server:提供资源指标(CPU/内存):
    kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml
    
  • 自定义指标支持:需部署 Prometheus Adapter,将 Prometheus 数据转换为 HPA 可识别的指标。
2. 定义 HPA 资源

示例 YAML(基于 CPU 和自定义指标)

apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  name: my-app-hpa
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: my-app  # 目标 Deployment
  minReplicas: 2  # 最小副本数
  maxReplicas: 10 # 最大副本数
  metrics:
  - type: Resource  # 资源指标
    resource:
      name: cpu
      target:
        type: Utilization  # 利用率类型
        averageUtilization: 50  # 目标 CPU 使用率 50%
  - type: Pods      # 自定义指标(如 QPS)
    pods:
      metric:
        name: requests_per_second
      target:
        type: AverageValue
        averageValue: 100  # 每个 Pod 平均处理 100 请求/秒

关键字段解析

  • scaleTargetRef:指定目标资源(支持 Deployment/ReplicaSet/StatefulSet)。
  • metrics:可定义多个指标,HPA 将按最激进的结果扩缩容。

三、支持的指标类型
指标类型数据来源适用场景示例配置
ResourceMetrics ServerCPU/内存利用率type: Utilization
Pods自定义指标(如 Prometheus)业务指标(QPS、队列长度)name: requests_per_second
ObjectKubernetes 对象(如 Ingress)关联对象的指标(如请求延迟)describedObject: Ingress
External外部系统(如云监控)跨集群或混合云指标metric: queue_messages_ready

四、最佳实践与注意事项
  1. 参数调优

    • 目标值设置:避免过于激进(如 CPU 目标 70%~80%),防止频繁扩缩。
    • 副本数边界:合理设置 minReplicasmaxReplicas,避免资源耗尽或服务不可用。
    • 冷却/预热时间:调整 --horizontal-pod-autoscaler-downscale-stabilization 避免抖动(默认缩容冷却 5 分钟)。
  2. 监控与排查
    状态查看kubectl describe hpa <name> 检查事件和指标状态。
    常见问题
    指标不可用:检查 Metrics Server/Prometheus Adapter 是否正常运行。
    副本数不变化:确认资源未达到限制或 HPA 计算未触发阈值。

  3. 进阶场景
    缩容至零副本:需启用 HPAScaleToZero 特性门控。
    多指标组合:结合 CPU 和 QPS 指标,更精准反映负载。


五、典型应用场景
  1. 流量高峰应对:电商大促时自动扩容 Pod,避免服务过载。
  2. 成本优化:夜间低峰期自动缩容,减少资源浪费。
  3. 混合云管理:通过外部指标跨集群统一扩缩容策略。

拓展

【一起来学kubernetes】32、kubectl使用详解

【一起来学kubernetes】30、k8s的java sdk怎么用

【一起来学kubernetes】4、kubernetes基本组件的了解

http://www.dtcms.com/a/107559.html

相关文章:

  • 常见操作系统特点及区别对比
  • 双翌闪耀2025上海机器视觉展,以创新技术赋能产业未来
  • C++中的继承
  • P2782 友好城市
  • 私有云(三)双节点部署openstack
  • 自学-C语言-基础-数组、函数、指针、结构体和共同体、文件
  • 111.在 Vue 3 中使用 OpenLayers 实现动态曲线流动图(类似 ECharts 迁徙状态)
  • 从代码学习深度学习 - 残差网络(ResNet)PyTorch版
  • MSVC编译遇到C2059、C2143、C2059、C2365、C2059等错误的解决方案
  • 打开pycharm显示编制索引后卡死
  • C++软件开发架构
  • llm-universe 踩坑记录
  • 数值与字典解决方案第二十五讲:数组的合并拆分及筛选
  • GNSS信号模拟器、导航信号模拟器、导航模拟信号源介绍
  • 如何解决 PyQt5 中的 `xcb` 插件加载错误
  • vue修饰符
  • ns-3使用animation出现文件小、无时间、打开后只有拓扑没有内容
  • 《静默与轰鸣的对决》
  • 什么是向量搜索Vector Search?
  • work03_1 实现一个简单的计算器,能够处理加法、减法、乘法和除法
  • 四、Bug篇+用例篇
  • Docker学习--容器操作相关命令--docker inspect 命令
  • C/C++指针核心难点全解析:从内存模型到实战避坑指南
  • AttributeError: module ‘smtplib‘ has no attribute ‘SMTP_SSL‘ 解决方法
  • AI小白的第十天:影响模型泛化能力的因素以及对策
  • spring boot 集成redis 中RedisTemplate 、SessionCallback和RedisCallback使用对比详解,最后表格总结
  • 系统思考与时间管理
  • 在MFC中使用Qt(五):MFC和Qt的共存和交互
  • 经典算法 最长公共子序列问题
  • GPU与CUDA对应