横向扩展:Kubernetes自动扩缩容自托管代理
·
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 和自定义指标适配器:
- 部署 Prometheus 监控堆栈
- 安装 k8s-prometheus-adapter
- 配置自定义指标规则
最佳实践与优化建议
冷却时间设置 通过 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
更多推荐
所有评论(0)