【实战ES】实战 Elasticsearch:快速上手与深度实践-7.2.2自动扩缩容策略(基于HPA)

news2025/3/11 17:35:06

👉 点击关注不迷路
👉 点击关注不迷路
👉 点击关注不迷路


文章大纲

  • 7.2.2 基于HPA的Elasticsearch自动扩缩容深度实践
    • 1. 云原生时代弹性伸缩的核心价值
      • 1.1 业务负载特征分析
      • 1.2 传统扩缩容方式的局限性
    • 2. HPA核心机制深度解析
      • 2.1 HPA工作原理流程图
      • 2.2 核心算法解析
    • 3. Elasticsearch HPA集成方案
      • 3.1 监控指标体系构建
      • 3.2 典型配置模板
    • 4. 高级扩缩容策略
      • 4.1 多指标联合决策机制
      • 4.2 分片再平衡优化
    • 5. 性能基准测试
      • 5.1 测试环境配置
      • 5.2 测试结果对比
    • 6. 生产环境最佳实践
      • 6.1 阈值设定经验公式
      • 6.2 防抖动策略配置
    • 7. 故障诊断手册
      • 7.1 常见异常场景处理
      • 7.2 关键日志分析

7.2.2 基于HPA的Elasticsearch自动扩缩容深度实践

  • HPA(Horizontal Pod Autoscaling,水平 Pod 自动伸缩)
自动扩缩容决策
监控指标采集
Kubernetes集群
指标是否超过阈值?
增加Elasticsearch Pod
指标是否低于阈值?
减少Elasticsearch Pod
保持现状
节点指标采集
索引指标采集
CPU利用率计算
内存利用率计算
文档数量计算
索引写入速率计算
指标数据汇总
Metrics Server
Kubernetes集群
Elasticsearch集群
HPA控制器

1. 云原生时代弹性伸缩的核心价值

  • 云原生是一种适应云计算时代的应用开发和运行模式,是一种构建和运行应用程序的方法,旨在充分利用云计算的优势,使应用程序能够更好地适应云环境的特点和需求。
  • **关键概念和技术:**容器化、微服务架构、服务网格、自动化编排、持续集成 / 持续交付(CI/CD)、声明式 API(例如,在 Kubernetes 中,用户可以通过 YAML 文件声明应用程序的部署、配置等信息,Kubernetes 会自动将系统调整到期望的状态,这种方式使得系统管理更加简单和直观。)

1.1 业务负载特征分析

负载类型峰值/谷值比例波动频率典型案例
电商大促10:1突发性双11/黑色星期五
日志分析3:1周期性每日业务高峰
实时监控5:1持续性故障期间的指标激增
内容搜索2:1随机性热点事件引发的搜索潮
  • 数据洞察:根据Gartner(一家极具影响力的美国技术研究和咨询公司,主要业务:研究与咨询服务、咨询服务、评测服务、社区服务)统计,合理实施自动扩缩容可带来的收益
    • 资源利用率提升40-60%
    • 运维人力成本降低55%
    • 业务连续性保障提高80%

1.2 传统扩缩容方式的局限性

# 人工扩容操作示例
# 使用 kubectl 工具对 Kubernetes 集群中的资源进行操作
# scale 命令用于调整资源的副本数量,也就是改变资源的实例数量
# statefulset 明确了要操作的资源类型是 StatefulSet
# StatefulSet 是 Kubernetes 中用于管理有状态应用的一种工作负载类型,适合那些需要稳定网络标识和持久存储的应用,比如 Elasticsearch 集群
# elasticsearch-data 是具体要操作的 StatefulSet 的名称,通常这个名称对应着 Elasticsearch 集群中负责数据存储的组件
# --replicas=5 是设置参数,指定将该 StatefulSet 的副本数量调整为 5
# 这意味着 Kubernetes 会根据这个设置,创建或删除相应数量的 Pod 实例,以保证 Elasticsearch 数据存储组件有 5 个副本在运行

kubectl scale statefulset elasticsearch-data --replicas=5
  • 人工干预模式的问题矩阵
问题类型发生频率影响范围平均修复时间
响应延迟高(65%)用户体验下降30分钟
过度配置中(45%)资源浪费严重N/A
扩容不及时高(70%)服务不可用45分钟
配置错误低(15%)集群不稳定2小时

2. HPA核心机制深度解析

2.1 HPA工作原理流程图

采集指标
计算期望副本数
调整副本数量
业务负载变化
Metrics Server
HPA Controller
StatefulSet/Deployment
Pod

2.2 核心算法解析

  • 期望副本数计算公式
期望副本数 = ceil[当前副本数 * (当前指标值 / 目标指标值)]
  • 弹性伸缩参数矩阵
参数默认值推荐值说明
–horizontal-pod-autoscaler-downscale-stabilization5m10m缩容冷却时间
–horizontal-pod-autoscaler-upscale-stabilization3m5m扩容冷却时间
–horizontal-pod-autoscaler-cpu-initialization-period5m2mCPU指标初始化等待周期
–horizontal-pod-autoscaler-initial-readiness-delay30s60sPod就绪状态检测延迟
  • 参数详情说明
# --horizontal-pod-autoscaler-downscale-stabilization 用于设置 HPA 进行缩容操作时的稳定时间窗口
# 该参数的作用是避免 HPA 因为短时间内指标的波动而频繁进行缩容操作
# 当 HPA 检测到需要缩容时,它会等待这个指定的时间窗口
# 在这个时间窗口内,如果指标持续满足缩容条件,HPA 才会真正执行缩容操作
# 例如设置为 5m 表示 5 分钟,即 HPA 检测到可以缩容后,会等待 5 分钟,若这期间指标一直支持缩容,才会减少 Pod 数量
--horizontal-pod-autoscaler-downscale-stabilization=5m

# --horizontal-pod-autoscaler-upscale-stabilization 用于设置 HPA 进行扩容操作时的稳定时间窗口
# 其目的是防止 HPA 由于短时间的指标峰值而过度扩容
# 当 HPA 检测到需要扩容时,会在这个指定的时间窗口内持续观察指标
# 只有在整个时间窗口内指标都持续满足扩容条件,HPA 才会执行扩容操作
# 例如设置为 3m 表示 3 分钟,即 HPA 检测到需要扩容后,会等待 3 分钟,若这期间指标一直需要扩容,才会增加 Pod 数量
--horizontal-pod-autoscaler-upscale-stabilization=3m

# --horizontal-pod-autoscaler-cpu-initialization-period 用于定义新创建的 Pod 在开始计算 CPU 使用率之前的初始化时间
# 在 Pod 刚创建时,可能会有一些初始化操作,这些操作可能会导致 CPU 使用率出现异常的高峰或低谷
# 为了避免 HPA 基于这些不稳定的 CPU 使用率数据进行错误的扩缩容决策
# 会设置这个初始化时间,在这个时间内,HPA 不会将该 Pod 的 CPU 使用率纳入计算
# 例如设置为 300s 表示 300 秒,即新创建的 Pod 在 300 秒内其 CPU 使用率不会影响 HPA 的决策
--horizontal-pod-autoscaler-cpu-initialization-period=300s

# --horizontal-pod-autoscaler-initial-readiness-delay 用于设置新创建的 Pod 在准备就绪后,HPA 开始考虑其指标的延迟时间
# 当一个 Pod 被创建并标记为就绪状态后,可能还需要一些时间来稳定运行
# 为了确保 HPA 基于稳定的指标数据进行决策
# 会设置这个延迟时间,在该时间内,HPA 不会考虑该 Pod 的指标数据
# 例如设置为 60s 表示 60 秒,即新创建的 Pod 就绪后,在 60 秒内其指标不会被 HPA 用于扩缩容计算
--horizontal-pod-autoscaler-initial-readiness-delay=60s

3. Elasticsearch HPA集成方案

3.1 监控指标体系构建

# apiVersion 字段指定了该资源所遵循的 API 版本
# autoscaling/v2beta2 是 Kubernetes 中水平 Pod 自动扩缩器(HPA)相关 API 的版本号
# 不同版本可能包含不同的功能和特性
apiVersion: autoscaling/v2beta2
# kind 字段定义了资源的类型
# 这里是 HorizontalPodAutoscaler,表示这是一个水平 Pod 自动扩缩器资源
kind: HorizontalPodAutoscaler
# metadata 部分包含了该资源的元数据信息
metadata:
    # name 字段指定了 HPA 资源的名称
    # 这里名称为 elasticsearch-data-hpa,用于在 Kubernetes 集群中唯一标识该 HPA
    name: elasticsearch-data-hpa
# spec 部分是 HPA 的具体规格和配置信息
spec:
    # scaleTargetRef 字段指定了要进行自动扩缩容的目标资源
    scaleTargetRef:
        # apiVersion 字段指定目标资源所遵循的 API 版本
        # apps/v1 表示目标资源(StatefulSet)的 API 版本
        apiVersion: apps/v1
        # kind 字段指定目标资源的类型
        # StatefulSet 是 Kubernetes 中用于管理有状态应用的一种资源类型
        kind: StatefulSet
        # name 字段指定目标资源的名称
        # 这里目标资源是名为 elasticsearch-data 的 StatefulSet
        name: elasticsearch-data
    # minReplicas 字段设置了目标资源(StatefulSet)的最小副本数
    # 即无论指标如何变化,该 StatefulSet 至少会有 3 个 Pod 副本运行
    minReplicas: 3
    # maxReplicas 字段设置了目标资源(StatefulSet)的最大副本数
    # 即该 StatefulSet 最多可以扩展到 10 个 Pod 副本
    maxReplicas: 10
    # metrics 字段定义了用于自动扩缩容的指标和目标值
    metrics:
        # 第一个指标类型为 Pods,表示基于 Pod 的特定指标进行扩缩容
        - type: Pods
            pods:
                # metric 字段指定了具体的指标名称
                # 这里是 elasticsearch_query_latency,表示 Elasticsearch 查询延迟
                metric:
                    name: elasticsearch_query_latency
                # target 字段指定了该指标的目标值和目标类型
                target:
                    # type 字段指定目标类型为 AverageValue,表示目标值是 Pod 的平均指标值
                    type: AverageValue
                    # averageValue 字段指定了具体的目标值
                    # 这里平均查询延迟目标值为 500 毫秒,当平均查询延迟超过或低于该值时,HPA 可能会进行扩缩容操作
                    averageValue: 500ms
        # 第二个指标类型为 Resource,表示基于资源(如 CPU、内存)的指标进行扩缩容
        - type: Resource
            resource:
                # name 字段指定了具体的资源名称
                # 这里是 cpu,表示基于 CPU 资源指标进行扩缩容
                name: cpu
                # target 字段指定了该资源指标的目标值和目标类型
                target:
                    # type 字段指定目标类型为 Utilization,表示目标值是资源的利用率
                    type: Utilization
                    # averageUtilization 字段指定了具体的目标利用率
                    # 这里 CPU 的平均利用率目标值为 70%,当 CPU 平均利用率超过或低于该值时,HPA 可能会进行扩缩容操作
                    averageUtilization: 70
  • 指标选择决策矩阵
指标类型采集方式优点缺点
CPU利用率Metrics Server简单直接不能反映ES真实负载
JVM堆内存使用率Prometheus Exporter反映内存压力存在GC干扰
搜索延迟自定义指标直接关联用户体验需要额外监控设施
索引速率Elasticsearch API反映写入压力需考虑分片均衡

3.2 典型配置模板

# 注释:以下配置用于定义一个用于数据节点自动扩缩容的水平 Pod 自动扩缩器(HPA)
# apiVersion 字段指定该资源所使用的 API 版本,autoscaling/v2beta2 是 Kubernetes 中关于 HPA 的 API 版本
apiVersion: autoscaling/v2beta2
# kind 字段明确资源的类型,这里是 HorizontalPodAutoscaler,即水平 Pod 自动扩缩器
kind: HorizontalPodAutoscaler
# metadata 部分包含资源的元数据信息
metadata:
    # name 字段定义了 HPA 的名称为 es-data-hpa,用于在集群中唯一标识该 HPA
    name: es-data-hpa
    # namespace 字段指定了该 HPA 所属的命名空间为 elastic,用于资源隔离
    namespace: elastic
# spec 部分是 HPA 的具体规格和配置
spec:
    # scaleTargetRef 字段指定了要进行自动扩缩容的目标资源
    scaleTargetRef:
        # apiVersion 字段指定目标资源(StatefulSet)的 API 版本为 apps/v1
        apiVersion: apps/v1
        # kind 字段指定目标资源的类型为 StatefulSet,用于管理有状态应用
        kind: StatefulSet
        # name 字段指定目标 StatefulSet 的名称为 es-data-nodes,即对该 StatefulSet 进行扩缩容操作
        name: es-data-nodes
    # minReplicas 字段设置了目标 StatefulSet 的最小副本数量为 3,即至少会有 3 个 Pod 运行
    minReplicas: 3
    # maxReplicas 字段设置了目标 StatefulSet 的最大副本数量为 12,即最多可扩展到 12 个 Pod
    maxReplicas: 12
    # behavior 字段定义了扩缩容的行为策略
    behavior:
        # scaleDown 部分定义了缩容时的策略
        scaleDown:
            # policies 字段包含了一系列缩容策略
            policies:
                # 第一个缩容策略,type 为 Pods,表示基于 Pod 数量进行策略制定
                - type: Pods
                    # value 字段表示每次缩容时减少的 Pod 数量为 1
                    value: 1
                    # periodSeconds 字段表示每次执行缩容操作的时间间隔为 600 秒(10 分钟)
                    periodSeconds: 600
            # stabilizationWindowSeconds 字段表示缩容操作的稳定时间窗口为 900 秒(15 分钟)
            # 在这个时间内,如果指标满足缩容条件也不会再次缩容,避免频繁缩容
            stabilizationWindowSeconds: 900
        # scaleUp 部分定义了扩容时的策略
        scaleUp:
            # policies 字段包含了一系列扩容策略
            policies:
                # 第一个扩容策略,type 为 Pods,表示基于 Pod 数量进行策略制定
                - type: Pods
                    # value 字段表示每次扩容时增加的 Pod 数量为 2
                    value: 2
                    # periodSeconds 字段表示每次执行扩容操作的时间间隔为 300 秒(5 分钟)
                    periodSeconds: 300
            # stabilizationWindowSeconds 字段表示扩容操作的稳定时间窗口为 600 秒(10 分钟)
            # 在这个时间内,如果指标满足扩容条件也不会再次扩容,避免频繁扩容
            stabilizationWindowSeconds: 600
    # metrics 字段定义了用于自动扩缩容的指标和目标值
    metrics:
        # 第一个指标类型为 Resource,表示基于资源指标进行扩缩容
        - type: Resource
            resource:
                # name 字段指定资源为 cpu,即基于 CPU 资源指标进行扩缩容
                name: cpu
                # target 字段指定 CPU 指标的目标类型和值
                target:
                    # type 字段指定目标类型为 Utilization,表示目标值是 CPU 利用率
                    type: Utilization
                    # averageUtilization 字段指定 CPU 的平均利用率目标值为 75%,当 CPU 平均利用率超过或低于该值时,可能触发扩缩容
                    averageUtilization: 75
        # 第二个指标类型为 Pods,表示基于 Pod 的特定指标进行扩缩容
        - type: Pods
            pods:
                # metric 字段指定具体指标名称为 es_search_latency_p99,即 Elasticsearch 搜索延迟的 P99 指标
                metric:
                    name: es_search_latency_p99
                # target 字段指定该指标的目标类型和值
                target:
                    # type 字段指定目标类型为 AverageValue,表示目标值是 Pod 的平均指标值
                    type: AverageValue
                    # averageValue 字段指定平均 P99 搜索延迟的目标值为 800(未明确单位,可能是毫秒等),当该指标超过或低于目标值时,可能触发扩缩容
                    averageValue: 800
  • 参数详解表
配置项作用说明
minReplicas3保证集群最低可用性
maxReplicas12防止资源过度消耗
scaleDown.periodSeconds600每次缩容最多减少1个Pod,间隔10分钟
scaleUp.periodSeconds300每次扩容最多增加2个Pod,间隔5分钟
stabilizationWindow900/600防止指标抖动造成的频繁扩缩容

4. 高级扩缩容策略

4.1 多指标联合决策机制

# metrics 字段用于定义一组用于水平 Pod 自动扩缩器(HPA)进行自动扩缩容决策的指标
metrics:
  # 第一个指标,类型为 Resource,表示基于资源指标进行扩缩容判断
  - type: Resource
    resource:
      # 具体资源名称为 cpu,即使用 CPU 资源的相关指标
      name: cpu
      target:
        # 目标类型为 Utilization,表示目标是 CPU 的利用率
        type: Utilization
        # averageUtilization 字段指定了 CPU 的平均利用率目标值为 70%
        # 当所有 Pod 的平均 CPU 利用率超过或低于这个值时,HPA 可能会触发扩缩容操作
        averageUtilization: 70
  # 第二个指标,类型为 Pods,表示基于 Pod 级别的特定指标进行扩缩容判断
  - type: Pods
    pods:
      metric:
        # 具体指标名称为 es_pending_tasks,代表 Elasticsearch 待处理任务的数量
        name: es_pending_tasks
      target:
        # 目标类型为 AverageValue,表示目标是所有 Pod 该指标的平均值
        type: AverageValue
        # averageValue 字段指定了 es_pending_tasks 指标的平均目标值为 100
        # 当所有 Pod 的 es_pending_tasks 指标的平均值超过或低于这个值时,HPA 可能会进行扩缩容
        averageValue: 100
  # 第三个指标,类型为 Object,表示基于特定对象(如服务、自定义资源等)的指标进行扩缩容判断
  - type: Object
    object:
      metric:
        # 具体指标名称为 es_indexing_rate,代表 Elasticsearch 的索引速率
        name: es_indexing_rate
      describedObject:
        # 该指标所关联的对象的 API 版本为 v1
        apiVersion: v1
        # 该指标所关联的对象类型为 Service,即一个 Kubernetes 服务
        kind: Service
        # 该指标所关联的具体服务名称为 elasticsearch
        name: elasticsearch
      target:
        # 目标类型为 Value,表示直接使用一个固定的目标值
        type: Value
        # value 字段指定了 es_indexing_rate 指标的目标值为 5000
        # 当 elasticsearch 服务的 es_indexing_rate 指标值超过或低于这个值时,HPA 可能会触发扩缩容操作
        value: 5000
  • 指标权重分配策略
指标名称权重触发条件优先级
CPU利用率40%>75%持续3分钟
搜索延迟P9930%>800ms持续5分钟
索引队列积压20%>200持续2分钟
JVM GC时间10%>1s/次持续5次

4.2 分片再平衡优化

// 向 Elasticsearch 集群发送一个 PUT 请求,用于更新集群的设置
// _cluster/settings 是 Elasticsearch 用于管理集群设置的 API 端点
PUT _cluster/settings
{
    // "persistent" 部分定义的设置会被持久化存储在集群状态中
    // 即使集群重启,这些设置仍然会生效
    "persistent": {
        // "cluster.routing.allocation.node_concurrent_recoveries" 控制每个节点上同时进行的分片恢复操作的最大数量
        // 分片恢复通常发生在节点加入或离开集群、分片重新分配等情况下
        // 这里将其设置为 5,表示每个节点最多同时进行 5 个分片恢复操作
        // 适当调整这个值可以平衡节点资源的使用和分片恢复的速度
        // 如果设置得过大,可能会导致节点资源过度使用,影响集群性能
        // 如果设置得过小,分片恢复的速度会变慢
        "cluster.routing.allocation.node_concurrent_recoveries": 5,
        // "cluster.routing.allocation.cluster_concurrent_rebalance" 控制整个集群中同时进行的分片再平衡操作的最大数量
        // 分片再平衡是为了确保集群中各个节点的负载均衡
        // 这里将其设置为 3,表示整个集群中最多同时进行 3 个分片再平衡操作
        // 合理设置这个值可以避免集群在进行再平衡时对性能产生过大影响
        // 若设置得过大,可能会导致集群资源紧张,影响正常的读写操作
        // 若设置得过小,分片再平衡的过程会比较缓慢
        "cluster.routing.allocation.cluster_concurrent_rebalance": 3
    }
}
  • 扩缩容前后分片分布对比
节点数分片总数平均分片数标准差再平衡时间
3150050032.4-
5150030015.828分钟
81500187.59.241分钟

5. 性能基准测试

5.1 测试环境配置

组件版本配置
Kubernetesv1.22.33 Master/6 Worker
Elasticsearch7.15.1数据节点:4核8G
Prometheusv2.30.3独立监控集群
Locust1.6.05000并发用户模拟
  • Locust
    • 是一个用 Python 编写的开源性能测试工具,用于对网站或其他系统进行负载测试和性能测试。
    • 支持多种协议:不仅支持常见的 HTTP/HTTPS 协议,还可以通过插件等方式支持其他协议,如 MQTT、WebSocket 等,满足不同类型系统的测试需求。
    • 分布式测试:支持分布式部署,可以在多个节点上同时运行测试,模拟大量用户并发访问,从而更真实地反映系统在高并发情况下的性能表现。

5.2 测试结果对比

  • 场景:突发搜索流量处理
指标静态集群(6节点)HPA弹性集群(3-8节点)
峰值QPS处理能力12,00018,500
第99百分位延迟680ms420ms
资源成本(按需计费)$48/小时$32/小时
异常请求率8.7%0.3%
自动扩容耗时N/A5分12秒

6. 生产环境最佳实践

6.1 阈值设定经验公式

CPU目标阈值 = 基础负载平均值 × 1.5

内存阈值 = JVM最大堆内存 × 0.75

搜索延迟阈值 = SLA承诺值 × 0.8
  • 典型行业SLA参考
    • SLA 通常指服务级别协议(Service Level Agreement),是一种在用户(或客户)与服务提供商(这里指 ES 服务的提供者或运维团队)之间达成的协议或约定,用于明确 ES 服务应达到的性能和质量标准等。
行业可接受P99延迟最大故障恢复时间
电子商务500ms15分钟
金融服务300ms5分钟
物联网800ms30分钟
日志分析2s1小时

6.2 防抖动策略配置

# behavior 字段用于定义 Horizontal Pod Autoscaler (HPA) 在进行扩缩容操作时的具体行为策略
behavior:
  # scaleUp 部分定义了 HPA 进行扩容操作时的相关策略
  scaleUp:
    # stabilizationWindowSeconds 字段指定了扩容操作的稳定时间窗口,单位为秒
    # 这里设置为 300 秒(即 5 分钟),意味着在 HPA 检测到需要扩容后
    # 会等待 300 秒,若在这个时间内指标仍然满足扩容条件,才会真正执行扩容操作
    # 这可以避免因指标的短暂波动而导致的频繁扩容
    stabilizationWindowSeconds: 300
    # policies 字段包含了一系列扩容策略,这里可以定义多个策略,HPA 会根据这些策略综合判断是否扩容
    policies:
      # 第一个扩容策略,type 字段指定策略类型为 Percent
      # 表示按照当前副本数量的百分比来确定每次扩容的数量
      - type: Percent
        # value 字段指定了每次扩容的百分比,这里设置为 50
        # 即每次扩容时,会增加当前副本数量的 50%
        # 例如当前有 4 个副本,按照此策略扩容时会增加 4 * 50% = 2 个副本
        value: 50
        # periodSeconds 字段指定了该扩容策略的执行周期,单位为秒
        # 这里设置为 600 秒(即 10 分钟),意味着每 600 秒会检查一次是否满足该扩容策略
        periodSeconds: 600
  # scaleDown 部分定义了 HPA 进行缩容操作时的相关策略
  scaleDown:
    # stabilizationWindowSeconds 字段指定了缩容操作的稳定时间窗口,单位为秒
    # 这里设置为 900 秒(即 15 分钟),意味着在 HPA 检测到需要缩容后
    # 会等待 900 秒,若在这个时间内指标仍然满足缩容条件,才会真正执行缩容操作
    # 这可以避免因指标的短暂波动而导致的频繁缩容
    stabilizationWindowSeconds: 900
    # policies 字段包含了一系列缩容策略,这里可以定义多个策略,HPA 会根据这些策略综合判断是否缩容
    policies:
      # 第一个缩容策略,type 字段指定策略类型为 Pods
      # 表示按照固定的 Pod 数量来确定每次缩容的数量
      - type: Pods
        # value 字段指定了每次缩容的 Pod 数量,这里设置为 1
        # 即每次缩容时,会减少 1 个 Pod
        value: 1
        # periodSeconds 字段指定了该缩容策略的执行周期,单位为秒
        # 这里设置为 1800 秒(即 30 分钟),意味着每 1800 秒会检查一次是否满足该缩容策略
        periodSeconds: 1800

  • 策略效果对比
策略类型扩缩容次数/天资源浪费率服务中断率
激进策略2812%3.5%
保守策略98%1.2%
混合策略156%0.8%

7. 故障诊断手册

7.1 常见异常场景处理

故障现象诊断步骤解决方案
HPA不触发扩容1. 检查指标采集
2. 验证HPA配置
3. 查看事件日志
修复Metrics Server
调整目标值
频繁震荡伸缩1. 分析指标波动
2. 检查冷却时间
3. 评估阈值设置
增加稳定窗口
优化指标权重
新节点加入后性能下降1. 检查分片分配
2. 监控网络吞吐量
3. 验证存储性能
手动触发分片平衡
优化副本设置

7.2 关键日志分析

# HPA事件日志示例

Events:
  Type     Reason             Age   From                       Message
  ----     ------             ----  ----                       -------
  Warning  FailedGetScale     2m    horizontal-pod-autoscaler  unable to get scale for target elasticsearch-data: no matches for kind "StatefulSet" in group "apps"
  Normal   SuccessfulRescale  5m    horizontal-pod-autoscaler  New size: 5; reason: cpu utilization above target
  • 日志分析矩阵
错误类型关键字处理建议
指标不可达FailedGetResourceMetric检查Prometheus exporter状态
权限问题unauthorized更新RBAC配置
目标资源不支持no matches for kind验证apiVersion配置
达到最大副本数desired replica count is more评估maxReplicas设置

  • 实践建议

      1. 预生产环境进行压力测试验证阈值设置
      1. 为不同节点角色(data/ingest/master)配置差异化HPA策略
      1. 定期审查扩缩容历史记录优化参数
      1. 结合集群级自动伸缩(如CA)实现多维弹性
  • 实施HPA后集群负载与节点数量的动态关系

开始
设置 HPA 指标阈值
监控集群负载指标
负载指标是否超过上限?
触发扩容操作
负载指标是否低于下限?
增加节点数量
触发缩容操作
更新 HPA 状态
减少节点数量
记录负载与节点数量数据
分析动态关系
结束

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

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

相关文章

通义万相2.1:开启视频生成新时代

文章摘要:通义万相 2.1 是一款在人工智能视频生成领域具有里程碑意义的工具,它通过核心技术的升级和创新,为创作者提供了更强大、更智能的创作能力。本文详细介绍了通义万相 2.1 的背景、核心技术、功能特性、性能评测、用户反馈以及应用场景…

如何用HTML5 Canvas实现电子签名功能✍️

🤖 作者简介:水煮白菜王,一位资深前端劝退师 👻 👀 文章专栏: 前端专栏 ,记录一下平时在博客写作中,总结出的一些开发技巧和知识归纳总结✍。 感谢支持💕💕&a…

区块链中的数字签名:安全性与可信度的核心

数字签名是区块链技术的信任基石,它像区块链世界的身份证和防伪标签,确保每一笔交易的真实性、完整性和不可抵赖性。本文会用通俗的语言,带你彻底搞懂区块链中的数字签名! 文章目录 1. 数字签名是什么?从现实世界到区块…

表格columns拼接两个后端返回的字段(以umi框架为例)

在用组件对前端项目进行开发时,我们会遇到以下情况:项目原型中有取值范围这个表字段,需要存放最小取值到最大取值。 而后端返回给我们的数据是返回了一个最小值和一个最大值, 在columns中我们需要对这两个字段进行拼接&#xff0…

sparkTTS window 安装

SparkTTS 的简介 Spark-TTS是一种基于SpardAudio团队提出的 BiCodec 构建的新系统,BiCodec 是一种单流语音编解码器,可将语音策略性地分解为两种互补的标记类型:用于语言内容的低比特率语义标记和用于说话者特定属性的固定长度全局标记。这种…

【K8S系列】深入探究Kubernetes中查看日志的方法

在Kubernetes(简称K8s)的世界里,日志是诊断和排查问题的关键线索。无论是应用程序的运行状态、错误信息,还是系统的健康状况,都能从日志中找到蛛丝马迹。本文将详细介绍在K8s中查看日志的各种方法,从基础的…

JmeterHttp请求头管理出现Unsupported Media Type问题解决

JmeterHttp请求头管理出现Unsupported Media Type问题解决 大多数的app与pc端压测的时候都会出现这种情况 当我们在jemter测试当中当中遇见Unsupported Media Type,有一种可能就是我们请求的网页的content-Type的类型与我们测试的时候的类型不一致 解决方法 可以添…

十大数据科学Python库

十大数据科学Python库 1、NumPy:脊髓2、Pandas:数据操纵专家3、Matplotlib:艺术之魂4、Scikit-Learn:瑞士军刀5、TensorFlow:聪明的家伙6、PyTorch:叛逆者7、Selenium:操纵大师8、NLTK&#xff…

LabVIEW伺服阀高频振动测试

在伺服阀高频振动测试中,闭环控制系统的实时性与稳定性至关重要。针对用户提出的1kHz控制频率需求及Windows平台兼容性问题,本文重点分析NI PCIe-7842R实时扩展卡的功能与局限性,并提供其他替代方案的综合对比,以帮助用户选择适合…

解决asp.net mvc发布到iis下安全问题

解决asp.net mvc发布到iis下安全问题 环境信息1.The web/application server is leaking version information via the "Server" HTTP response2.确保您的Web服务器、应用程序服务器、负载均衡器等已配置为强制执行Strict-Transport-Security。3.在HTML提交表单中找不…

CSS-基础选择器,字体属性,文本属性介绍

一、CSS 简介 CSS 是层叠样式表 ( Cascading Style Sheets ) 的简称. 有时我们也会称之为 CSS 样式表或级联样式表。 CSS 是也是一种标记语言 CSS 主要用于设置 HTML 页面中的文本内容(字体、大小、对齐方式等)、图片的外形(宽高&a…

vtkDepthSortPolyData 根据相机视图方向对多边形数据进行排序

1. 作用 在 3D 渲染中,透明对象的渲染顺序非常重要。如果透明对象的渲染顺序不正确,可能会导致错误的视觉效果(例如,远处的透明对象遮挡了近处的透明对象)。vtkDepthSortPolyData 通过对多边形数据进行深度排序&#…

【MySQL_04】数据库基本操作(用户管理--配置文件--远程连接--数据库信息查看、创建、删除)

文章目录 一、MySQL 用户管理1.1 用户管理1.11 mysql.user表详解1.12 添加用户1.13 修改用户权限1.14 删除用户1.15 密码问题 二、MySQL 配置文件2.1 配置文件位置2.2 配置文件结构2.3 常用配置参数 三、MySQL远程连接四、数据库的查看、创建、删除4.1 查看数据库4.2 创建、删除…

牛客网刷题(5)(HTML之元素<input>、表格<table>与描述列表<dl>、元素<label>)

目录 一、哪种输入类型定义滑块控件?元素(input) (1)官方解析。 (2)总结。 (3)牛客大佬总结。 (4)HTML5——元素(input)的…

IDEA(十一)调整新版本的工具栏显示Git操作(pull、commit、push、revert等)

目录 一、背景二、操作步骤2.1 开启新 UI 样式2.2 设置 Tool Window 工具栏 一、背景 好久没有更新 IDEA 了,更新之后发现 IDEA 的工具栏消失了。一番操作之后,终于把 IDEA 的工具栏的设置调整好了,在此进行记录调整步骤,供大家学…

C++编程:进阶阶段—4.2对象

目录 4.2 对象特征 4.2.1 构造函数和析构函数 4.2.2 构造函数的分类 4.2.3 拷贝函数调用时机 4.2.4 构造函数调用规则 4.2.5 深拷贝与浅拷贝 4.2.6 初始化列表 4.2.7 类对象作为类成员 4.2.8 静态成员 4.2.9 成员变量和成员函数的存储 4.2.10 this指针 4.2.11 空指针…

TensorFlow.js 全面解析:在浏览器中构建机器学习应用

TensorFlow.js 全面解析:在浏览器中构建机器学习应用 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,可以分享一下给大家。点击跳转到网站。 https://www.captainbed.cn/ccc 文章目录 TensorFlow.js 全面解析&#x…

CI/CD—Jenkins配置Poll SCM触发自动构建

Poll SCM简介 在 Jenkins 等持续集成工具中,“Poll SCM” 是一种用于轮询软件配置管理(SCM)系统以检查代码变更的机制,以下是对它的详细介绍: 作用 “Poll SCM” 允许 Jenkins 定期检查指定的 SCM 系统(如 …

AI与SEO关键词智能解析

内容概要 人工智能技术正重塑搜索引擎优化的底层逻辑,其核心突破体现在关键词解析维度的结构性升级。通过机器学习算法对海量搜索数据的动态学习,AI不仅能够识别传统TF-IDF模型中的高频词汇,更能捕捉语义网络中隐含的关联特征。下表展示了传…

STM32之BKP

VBAT备用电源。接的时候和主电源共地,正极接在一起,中间连接一个100nf的电容。BKP是RAM存储器。 四组VDD都要接到3.3V的电源上,要使用备用电池,就把电池正极接到VBAT,负极跟主电源共地。 TEMPER引脚先加一个默认的上拉…