概述 - 目标:基于业务自定义指标进行自动伸缩,使用稳定窗口与不同上/下行策略减少抖动,提升成本与性能均衡。 - 适用:请求队列长度、处理速率、并发数等业务驱动伸缩场景。 核心与实战 - Prometheus Adapter指标暴露(示意): ``` apiVersion: v1 kind: ConfigMap metadata: { name: adapter-config, namespace: custom-metrics } data: config.yaml: | rules: - seriesQuery: 'worker_inflight_jobs{namespace!="",pod!=""}' resources: overrides: namespace: { resource: "namespace" } pod: { resource: "pod" } name: matches: "worker_inflight_jobs" as: "worker_inflight_jobs" metricsQuery: 'sum(rate(worker_inflight_jobs[1m])) by (namespace)' ``` - HPA v2配置: ``` apiVersion: autoscaling/v2 kind: HorizontalPodAutoscaler metadata: name: worker-hpa namespace: prod spec: scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: worker minReplicas: 2 maxReplicas: 50 metrics: - type: Pods pods: metric: name: worker_inflight_jobs target: type: AverageValue averageValue: 100 behavior: stabilizationWindowSeconds: 300 scaleUp: policies: - type: Percent value: 100 periodSeconds: 60 selectPolicy: Max stabilizationWindowSeconds: 0 scaleDown: policies: - type: Percent value: 50 periodSeconds: 60 selectPolicy: Max stabilizationWindowSeconds: 300 ``` 示例 - 应用与验证: ``` kubectl apply -f hpa.yaml kubectl describe hpa worker-hpa ``` - 指标与副本: ``` kubectl get --raw "/apis/custom.metrics.k8s.io/v1beta1/namespaces/prod/pods/*/worker_inflight_jobs" | jq kubectl get hpa worker-hpa -n prod -w ``` 验证与监控 - 抖动控制: - 通过`stabilizationWindowSeconds`与不同上下行策略控制频繁伸缩;观察副本变化。 - 指标质量: - 确保Adapter规则正确映射与聚合;监控数据新鲜度与误触发。 - 成本与容量: - 结合节点资源与队列滞后设定目标值与上限,防止过度伸缩。 常见误区 - 指标过小粒度导致抖动;应聚合至命名空间或Deployment层级。 - 未配置稳定窗口导致在负载波动下频繁缩容扩容;需合理设置。 - 忽视下行策略,缩容过快导致任务积压;需限制缩容速度。 结语 - 通过HPA v2自定义指标与行为策略可实现业务驱动的稳定伸缩,避免抖动并兼顾成本与性能。

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论
立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部