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 是当前副本数。

  1. 扩缩容决策:

将计算出的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 可以适应复杂的应用场景和业务需求。