Horizontal Pod Autoscaler(HPA-Pod水平自动扩容)是Kubernetes提供的一种自动调整Pod数量的机制,目的是根据应用的实际负载情况动态调整副本数量,以维持服务性能稳定并充分利用集群资源。
下面是HPA的关键特性和工作原理:
关键特性:
1、自动扩缩容:
根据预见定义的指标(如CPU利用率、内存使用率、自定义Metrics API)自动增加或减少Pod副本数量。
2、目标利用率:
用户可以设置一个目标利用率百分比(如CPU利用率50%),HPA会确保Pod集群的整体资源使用率接近这个目标。
3、最小/最大副本数:
设置Pod副本数的上下限,防止过度扩缩容导致资源浪费或服务不可用。
4、自定义Metrics:
除了内置的CPU和内存指标,还可以使用自定义Metrics API(如Promethues Adapter、Stackdriver Adapter)监测并响应其他业务指标。
工作原理:
1、指标监控
HPA定期(默认30秒)查询Metrics API,获取目标Deployment、Statefulset或ReplicaSet的资源使用情况
2、计算目标副本数
基于当前资源使用率和目标利用率,计算出新的理想副本数。
计算公式通常为:
desiredReplicas = ceil[currentReplicas * (currentMetricValue / desiredMetricValue)]
其中 currentMetricValue 是当前观测到的资源使用量,desiredMetricValue 是目标利用率对应的资源使用量,currentReplicas 是当前副本数。
- 扩缩容决策:
将计算出的desiredReplicas与用户设定的最小/最大副本数,发送更新给Kubernetes控制器。
4、滚动更新
控制器接收到更新请求后,按照滚动更新策略(默认为平滑过渡)逐步调整Pod副本数,直到达到目标副本数。
使用示例:通过 kubectl 创建或更新 HPA 资源,例如为名为 my-app 的 Deployment 创建一个 HPA,目标 CPU 利用率为 50%,最小副本数为 2,最大副本数为 10
kubectl autoscale deployment my-app --cpu-percent=50 --min=2 --max=10
或者使用 YAML 文件定义并应用
apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
name: my-app-hpa
spec:
scaleTargetRef:
apiVersion: apps/v1
name: my-app
minReplicas: 2
maxReplicas: 10
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 50
kubectl apply -f hpa.yaml
要查看 HPA 状态和当前决策结果,可以使用:kubectl get hpa
总结而言,Kubernetes Horizontal Pod Autoscaler 是一种自动化运维工具,通过监测应用资源使用情况并自动调整副本数,帮助用户实现服务性能的自动调节和资源的有效利用。结合自定义 Metrics,HPA 可以适应复杂的应用场景和业务需求。