OA0 = Omni AI 0
OA0 是一个探索 AI 的论坛
现在注册
已注册用户请  登录
OA0  ›  技能包  ›  k8-autoscaling: 配置 Kubernetes 自动扩缩容机制 (HPA/VPA)

k8-autoscaling: 配置 Kubernetes 自动扩缩容机制 (HPA/VPA)

 
  debug ·  2026-02-02 10:12:46 · 3 次点击  · 0 条评论  

name: k8s-autoscaling
description: 使用 HPA、VPA 和 KEDA 配置 Kubernetes 自动扩缩容。适用于水平/垂直 Pod 自动扩缩、事件驱动扩缩和容量管理。


Kubernetes 自动扩缩容

使用 HPA、VPA、KEDA 及 kubectl-mcp-server 工具实现全面的自动扩缩容。

快速参考

HPA(水平 Pod 自动扩缩器)

基于 CPU 的基础扩缩配置:

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: 70

应用并验证:

apply_manifest(hpa_yaml, namespace)
get_hpa(namespace)

VPA(垂直 Pod 自动扩缩器)

优化资源请求配置:

apiVersion: autoscaling.k8s.io/v1
kind: VerticalPodAutoscaler
metadata:
  name: my-app-vpa
spec:
  targetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: my-app
  updatePolicy:
    updateMode: "Auto"

KEDA(事件驱动自动扩缩)

检测 KEDA 安装

keda_detect_tool()

列出 ScaledObjects

keda_scaledobjects_list_tool(namespace)
keda_scaledobject_get_tool(name, namespace)

列出 ScaledJobs

keda_scaledjobs_list_tool(namespace)

触发器认证

keda_triggerauths_list_tool(namespace)
keda_triggerauth_get_tool(name, namespace)

KEDA 管理的 HPA

keda_hpa_list_tool(namespace)

触发器配置详见 KEDA-TRIGGERS.md

常用 KEDA 触发器

基于队列的扩缩(AWS SQS)

apiVersion: keda.sh/v1alpha1
kind: ScaledObject
metadata:
  name: sqs-scaler
spec:
  scaleTargetRef:
    name: queue-processor
  minReplicaCount: 0  # 可缩容至零!
  maxReplicaCount: 100
  triggers:
  - type: aws-sqs-queue
    metadata:
      queueURL: https://sqs.region.amazonaws.com/...
      queueLength: "5"

基于定时任务的扩缩

triggers:
- type: cron
  metadata:
    timezone: America/New_York
    start: 0 8 * * 1-5   # 工作日 8 AM
    end: 0 18 * * 1-5    # 工作日 6 PM
    desiredReplicas: "10"

Prometheus 指标

triggers:
- type: prometheus
  metadata:
    serverAddress: http://prometheus:9090
    metricName: http_requests_total
    query: sum(rate(http_requests_total{app="myapp"}[2m]))
    threshold: "100"

扩缩策略

策略 工具 适用场景
CPU/内存 HPA 流量模式稳定
自定义指标 HPA v2 业务指标
事件驱动 KEDA 队列处理、定时任务
垂直扩缩 VPA 优化资源请求
缩容至零 KEDA 节省成本,空闲工作负载

成本优化的自动扩缩

使用 KEDA 缩容至零

降低空闲工作负载的成本:

keda_scaledobjects_list_tool(namespace)
# 设置 minReplicaCount: 0 的 ScaledObjects 可缩容至零

使用 VPA 优化资源

获取并应用资源建议:

get_resource_recommendations(namespace)
# 应用 VPA 建议

预测性扩缩

对已知流量模式使用定时触发器:

# 在流量高峰前扩容
triggers:
- type: cron
  metadata:
    start: 0 7 * * *  # 7 AM
    end: 0 9 * * *    # 9 AM
    desiredReplicas: "20"

多集群自动扩缩

跨集群配置 KEDA:

keda_scaledobjects_list_tool(namespace, context="production")
keda_scaledobjects_list_tool(namespace, context="staging")

故障排除

HPA 未扩缩

get_hpa(namespace)
get_pod_metrics(name, namespace)  # 指标是否可用?
describe_pod(name, namespace)     # 资源请求是否设置?

KEDA 未触发

keda_scaledobject_get_tool(name, namespace)  # 检查状态
get_events(namespace)                        # 检查事件

常见问题

现象 检查项 解决方案
HPA 状态未知 指标服务器 安装 metrics-server
KEDA 未扩缩 触发器认证 检查 TriggerAuthentication
VPA 未更新 更新模式 设置 updateMode: Auto
缩容缓慢 稳定窗口 调整 stabilizationWindowSeconds

最佳实践

  1. 始终设置资源请求
    - HPA 需要资源请求来计算利用率

  2. 使用多指标
    - 结合 CPU 和自定义指标以提高准确性

  3. 稳定窗口
    - 使用 scaleDown 稳定窗口防止抖动

  4. 谨慎缩容至零
    - 考虑冷启动时间
    - 使用激活阈值

相关技能

3 次点击  ∙  0 人收藏  
登录后收藏  
目前尚无回复
0 条回复
About   ·   Help   ·    
OA0 - Omni AI 0 一个探索 AI 的社区
沪ICP备2024103595号-2
Developed with Cursor