Kubernetes 横向扩展自托管代理的设计

Kubernetes 的 Horizontal Pod Autoscaler (HPA) 可用于根据 CPU、内存或自定义指标自动扩展自托管代理。以下为关键设计要点:

资源指标配置 在 HPA 中定义 CPU 或内存目标利用率,例如:

targetCPUUtilizationPercentage: 70

自定义指标集成 通过 Prometheus Adapter 或自定义指标 API 实现基于队列深度、响应时间等业务指标的扩缩容:

metrics:
- type: External
  external:
    metric:
      name: requests_per_second
    target:
      type: AverageValue
      averageValue: 1000

实现自动扩缩容的步骤

部署 Metrics Server 确保集群已安装 Metrics Server 以提供基础资源指标:

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

配置 HPA 策略 创建 HorizontalPodAutoscaler 资源对象,指定最小/最大副本数和扩缩容指标:

apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  name: agent-autoscaler
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: agent-deployment
  minReplicas: 2
  maxReplicas: 10
  metrics:
  - type: Resource
    resource:
      name: cpu
      target:
        type: Utilization
        averageUtilization: 70

自定义指标监控 对于基于业务指标的扩缩容,需部署 Prometheus 和自定义指标适配器:

  1. 部署 Prometheus 监控堆栈
  2. 安装 k8s-prometheus-adapter
  3. 配置自定义指标规则

最佳实践与优化建议

冷却时间设置 通过 behavior 字段控制扩缩容的冷却时间,避免剧烈波动:

behavior:
  scaleDown:
    stabilizationWindowSeconds: 300
    policies:
    - type: Percent
      value: 10
      periodSeconds: 60

Pod 中断预算 配置 PDB 确保扩缩容期间保持最小可用实例数:

apiVersion: policy/v1
kind: PodDisruptionBudget
metadata:
  name: agent-pdb
spec:
  minAvailable: 1
  selector:
    matchLabels:
      app: agent

多维度指标组合 结合 CPU、内存和自定义指标实现更智能的扩缩容决策:

metrics:
- type: Resource
  resource:
    name: cpu
    target:
      type: Utilization
      averageUtilization: 70
- type: External
  external:
    metric:
      name: messages_in_queue
    target:
      type: AverageValue
      averageValue: 50

常见问题排查

HPA 不触发扩缩容 检查指标服务器是否正常运行:

kubectl get --raw /apis/metrics.k8s.io/v1beta1/nodes

验证 HPA 是否能获取指标数据:

kubectl describe hpa agent-autoscaler

自定义指标不可用 检查适配器是否注册了自定义指标:

kubectl get --raw "/apis/custom.metrics.k8s.io/v1beta1" | jq .

验证 Prometheus 是否能采集到相关指标:

kubectl port-forward svc/prometheus-k8s 9090

更多推荐