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

深入剖析 Kubernetes 弹性伸缩:HPA 与 Metrics Server

引言

在 Kubernetes (K8s) 集群中,如何根据应用的实际负载自动调整 Pod 数量,实现资源的弹性利用,是保障服务稳定性和成本效益的关键。Horizontal Pod Autoscaler (HPA) 和 Metrics Server 正是实现这一目标的核心组件。本文将深入探讨 HPA 和 Metrics Server 的工作原理、配置方法、最佳实践以及常见问题,帮助大家全面掌握 Kubernetes 的弹性伸缩机制。
在这里插入图片描述

Metrics Server:资源指标的采集器

Metrics Server 是一个集群范围内的资源使用情况数据聚合器。它从每个节点上的 Kubelet 公开的 Summary API 中采集指标数据,例如 CPU 和内存使用率。这些指标数据是 HPA 实现自动扩缩容的基础。

Metrics Server 的工作原理:

  1. 数据采集: Metrics Server 定期(默认每分钟)从每个 Node 上的 Kubelet 的 /metrics/resource/v1beta1 接口获取资源指标数据。这些数据包括 Pod 和 Node 的 CPU 和内存使用情况。
  2. 数据聚合: Metrics Server 将采集到的数据缓存在内存中,并通过 Kubernetes API Server 的聚合层(Aggregation Layer)暴露给其他组件,如 HPA。
  3. API 暴露: Metrics Server 通过 metrics.k8s.io API 组提供资源指标数据。HPA 可以通过该 API 查询 Pod 的资源使用情况。

Metrics Server 的部署:

通常,Metrics Server 会作为集群的插件部署。可以使用官方提供的 YAML 文件进行部署:

kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml

注意:

  • Metrics Server 需要 Kubernetes 集群启用 API 聚合层。
  • 在一些云平台上,Metrics Server 可能已经默认安装。

Horizontal Pod Autoscaler (HPA):自动扩缩容的引擎

HPA 是 Kubernetes 的一个控制器,它根据观察到的指标数据(如 CPU 使用率、内存使用率或自定义指标)自动调整 Deployment、ReplicaSet 或 StatefulSet 中的 Pod 副本数量。

HPA 的工作原理:

  1. 指标查询: HPA 定期(默认每 15 秒)从 Metrics Server(或其他指标源)查询指定 Pod 的资源使用情况。
  2. 计算期望副本数: HPA 根据当前指标值、目标值以及用户定义的算法计算出期望的 Pod 副本数。
  3. 调整副本数: 如果计算出的期望副本数与当前副本数不同,HPA 会通过 Kubernetes API 更新 Deployment、ReplicaSet 或 StatefulSet 的副本数,触发 Pod 的创建或销毁。

HPA 的版本:

HPA 有两个主要版本:

  • autoscaling/v1:支持基于 CPU 使用率的自动扩缩容。
  • autoscaling/v2:支持基于 CPU 使用率、内存使用率以及自定义指标的自动扩缩容。

HPA 的配置(autoscaling/v2):

以下是一个 HPA 的 YAML 配置示例:

apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  name: my-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 #目标CPU使用率为50%
  - type: Pods
    pods:
      metric:
        name: http_requests_per_second
      target:
          type: AverageValue
          averageValue: 100 #目标每个pod的平均请求为100/s

配置解读:

  • scaleTargetRef:指定 HPA 要控制的目标资源(Deployment、ReplicaSet 或 StatefulSet)。
  • minReplicasmaxReplicas:指定 Pod 副本数的最小值和最大值。
  • metrics:定义用于扩缩容的指标。可以定义多个指标。
    • type:指标类型,可以是 Resource(资源指标,如 CPU、内存)、Pods(Pod 指标)、Object(对象指标)或 External(外部指标)。
    • resource:当 typeResource 时,指定资源名称(cpumemory)和目标值。
    • pods:当typePods时,指定自定义的pod指标名称和目标值。
    • target:定义目标值的类型和数值。
      • type: Utilization:表示目标值为平均利用率。
      • type: AverageValue:目标值为所有副本平均值。
      • type: Value: 目标值为原始数值。

HPA 的算法:

HPA 使用以下公式计算期望的副本数:

期望副本数 = ceil[当前副本数 * (当前指标值 / 目标指标值)]

例如:

如果当前副本数为 2,当前 CPU 使用率为 80%,目标 CPU 使用率为 50%,则:

期望副本数 = ceil[2 * (80 / 50)] = ceil[3.2] = 4

HPA 的最佳实践:

  • 合理设置目标值: 目标值应根据应用的性能特征和业务需求进行设置。过低的目标值可能导致频繁扩容,过高的目标值可能导致资源利用率不足。
  • 设置最小和最大副本数: 设置合理的 minReplicasmaxReplicas 可以防止 Pod 数量过少或过多。
  • 使用多种指标: 结合 CPU 使用率、内存使用率以及自定义指标可以更准确地反映应用的负载情况。
  • 监控 HPA 状态: 使用 kubectl describe hpa <hpa-name> 命令可以查看 HPA 的状态、事件和决策过程。
  • 预热期和冷却期: HPA 有一个默认的预热期(5 分钟)和冷却期(3 分钟),用于避免频繁的扩缩容操作。可以根据需要调整这些参数。
  • 避免与 Vertical Pod Autoscaler (VPA) 冲突: HPA 和 VPA 不应同时作用于同一个 Pod 的 CPU 或内存资源。

常见问题:

  • HPA 无法获取指标数据: 确保 Metrics Server 已正确部署并运行,并且 HPA 的配置中指标名称正确。
  • HPA 频繁扩缩容: 检查目标值是否设置合理,是否需要调整预热期和冷却期。
  • HPA 未达到期望的副本数: 检查 Pod 是否存在资源限制,是否达到了集群的资源上限。

总结

HPA 和 Metrics Server 是 Kubernetes 实现弹性伸缩的关键组件。Metrics Server 负责采集资源指标数据,HPA 则根据这些指标数据自动调整 Pod 副本数。通过合理配置 HPA 和 Metrics Server,可以实现应用的自动扩缩容,提高资源利用率,降低成本,并保障服务的稳定性。

相关文章:

  • 文件解析:doc、docx、pdf
  • 开发环境搭建-06.后端环境搭建-前后端联调-Nginx反向代理和负载均衡概念
  • RAG了解与实践
  • QEMU源码全解析 —— 块设备虚拟化(1)
  • MySQL root用户密码忘记怎么办(Reset root account password)
  • Java面经
  • 字节跳动AI原生编程工具Trae和百度“三大开发神器”AgentBuilder、AppBuilder、ModelBuilder的区别是?
  • 蓝桥试题:传球游戏(二维dp)
  • 基于海思soc的智能产品开发(芯片sdk和linux开发关系)
  • unity console日志双击响应事件扩展
  • C#核心(21)万物之父Object中的方法
  • Lambda表达式使用介绍
  • 【Bootstrap5】Bootstrap5学习笔记
  • 数据库复习(第五版)- 第七章 数据库设计
  • 3.6c语言
  • 【算法系列】基数排序
  • 维度建模事实表技术基础解析(以电商场景为例)
  • 洛谷 P1480 A/B Problem(高精度详解)c++
  • 相机几何与标定:从三维世界到二维图像的映射
  • 【LeetCode101】对称二叉树
  • 世卫大会连续九年拒绝涉台提案
  • 探月工程鹊桥二号中继星取得阶段性进展
  • 1至4月国家铁路发送货物12.99亿吨,同比增长3.6%
  • “大国重器”、新型反隐身雷达……世界雷达展全面展示尖端装备
  • 无人机企业从科技园区搬到乡村后,村子里变得不一样了
  • 19国入境团抵沪并游玩,老外震惊:“怎么能有这么多人?”