🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
[TOC] ### **简介** HPA全称HorizontalPodAutoscaler,它是K8S里面的一种资源对象,主要用来控制Pod的水平自动扩缩容。 ### **扩缩容算法** 扩缩容的算法如下: ``` 期望副本数 = ceil[当前副本数 * (当前指标值 / 期望指标值)] ``` 比如说,我们创建了一个Deployment,当前副本数为3。然后我们为这个Deployment创建了一个HPA,CPU使用率期望值为50%(期望指标值)。那么Autoscaler每隔一段时间就会对Deployment做一次扩缩容操作,如果这8个Pod的CPU平均使用率(当前指标值)为20%,那么此时的期望副本数即为`ceil[3 * (20% / 50%) ] = 2`,即会缩容到2个实例(ceil为向上取整的意思)。 ### **V1版本的HPA** [v1版本(`autoscaling/v1`)的HPA](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.22/#horizontalpodautoscaler-v1-autoscaling)只支持`CPU使用率`这个指标,如下是一个以CPU使用率为指标的HPA示例: ``` apiVersion: autoscaling/v1 kind: HorizontalPodAutoscaler metadata: name: tomcat namespace: default spec: targetCPUUtilizationPercentage: 50 minReplicas: 1 maxReplicas: 5 scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: tomcat ``` 上面有两个字段`minReplicas`和`maxReplicas`要注意,它们的意思是在自动扩缩容的时候,期望Pod数要在这个范围内。 ### **V2版本的HPA** v2版本([`autuscaling/v2beta1`](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.22/#horizontalpodautoscaler-v2beta1-autoscaling)与[`autoscaling/v2beta2`](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.22/#horizontalpodautoscaler-v2beta2-autoscaling))的HPA支持CPU、内存等使用率或绝对值,以及支持其他指标与自定义指标。 如下是一个基于内存使用率的HPA示例: ``` apiVersion: autoscaling/v2beta2 kind: HorizontalPodAutoscaler metadata: name: tomcat spec: scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: tomcat minReplicas: 1 maxReplicas: 10 metrics: - type: Resource resource: name: memory target: type: Utilization averageUtilization: 50 ``` 在V2版本中,`spec.metrics`数组取代了V1版本中的`targetCPUUtilizationPercentage`, ### **指标数据如何获取** to be continued ### **参考** * https://kubernetes.io/zh/docs/tasks/run-application/horizontal-pod-autoscale/ * https://kubernetes.io/zh/docs/tasks/run-application/horizontal-pod-autoscale-walkthrough/