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

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/v1
    kind: Deployment
    name: my-app
  minReplicas: 2
  maxReplicas: 10
  metrics:
    - type: Resource
      resource:
        name: cpu
        target:
          type: Utilization
          averageUtilization: 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/v1
    kind: Deployment
    name: custom-app
  minReplicas: 3
  maxReplicas: 15
  metrics:
    - type: Pods
      pods:
        metric:
          name: custom_metric_requests
        target:
          type: AverageValue
          averageValue: 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/v1
    kind: Deployment
    name: multi-app
  minReplicas: 1
  maxReplicas: 20
  metrics:
    - type: Resource
      resource:
        name: cpu
        target:
          type: Utilization
          averageUtilization: 60
    - type: Pods
      pods:
        metric:
          name: custom_metric_latency
        target:
          type: AverageValue
          averageValue: 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.kler.cn/a/444347.html

相关文章:

  • 基于java web在线商城购物系统源码+论文
  • ubuntu18.04升级到ubuntu20.04
  • 苹果手机怎么清理空间:拯救你的拥挤手机
  • 【HarmonyOS之旅】DevEco Studio的安装与环境配置
  • 解决小程序中ios可以正常滚动,而Android失效问题
  • Android详解——ConstraintLayout约束布局
  • 利用系统自带的存储感知功能清理系统中的升级补丁
  • Linux 定时任务操作详解及python简单的任务管理器
  • 设计模式-读书笔记2
  • Docker+Redis单机和集群部署【非常详细】
  • Android 获取屏幕物理尺寸
  • 建站技术 | HUGO + GitHub 创建博客页面
  • 若依前端挂Nginx、打包部署运行!!!!
  • C# 项目无法加载 DLL“SQLite.Interop.DLL”: 找不到指定的模块
  • Leetcode 409. Longest Palindrome
  • BERT模型入门(1)BERT的基本概念
  • 条件随机场(CRF)详解:原理、算法与实现(深入浅出)
  • 【软件工程】简答题系列(山东大学·软院考试专属)
  • pytest接口关联框架封装
  • 将三个list往一个excel表的三个sheet中写入,能用多线程提高写入速度
  • Stream的并行方法parallelStream使用和常见问题
  • python飞机大战游戏.py
  • 详细指南:在Ubuntu 20.04上安装和配置Orbbec SDK及USB设备权限
  • 太速科技-428-基于XC7Z100+ADRV9009的双收双发无线电射频板卡
  • 《Django 5 By Example》读后感
  • 【uniapp】实战一人员交接班