Horizontal Pod Autoscaler(HPA)

Horizontal Pod Autoscaler(HPA)与 RC、Deployment 一样,也属于一种 Kubernetes 资源对象。通过追踪分析指定 RC 控制的所有目标 Pod 的负载变化情况,来确定是否需要有针对性地调整目标 Pod 的副本数量。当前,HPA 有以下两种方式作为 Pod 负载的度量指标。

  • CPUUtilizationPercentage

  • 应用程序自定义的度量指标,比如服务在每秒内的相应请求数(TPS 或 QPS)。

在 CPUUtilizationPercentage 计算过程中使用到的 Pod 的 CPU 使用量通常是 1min 内的平均值。

CPUUtilizationPercentage 是一个算术平均值,即目标 Pod 所有副本自身的 CPU 利用率的平均值。一个 Pod 自身的 CPU 利用率是该 Pod 当前 CPU 的使用量除以它的 Pod Request 的值,如果某一时刻 CPUUtilizationPercentage 的值超过 80%,则意味着当前 Pod 副本数量很可能不足以支撑接下来更多的请求,需要进行动态扩容,而在请求高峰时段过去后,Pod 的 CPU 利用率又会降下来,此时对应的 Pod 副本数应该自动减少到一个合理的水平。

如果目标 Pod 没有定义 Pod Request 的值,则无法使用 CPUUtilizationPercentage 实现 Pod 横向自动扩容

HPA 需要 Metrics Server 获取度量指标。

定义HPA

YAML

下面是 HPA 定义的一个具体例子:

apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
  name: php-apache
  namespace: default
spec:
  maxReplicas: 10
  minReplicas: 1
  scaleTargetRef:
    kind: Deployment
    name: php-apache
  targetCPUUtilizationPercentage: 90

根据上面的定义,我们可以知道这个 HPA 控制的目标对象是一个名为 php-apache 的 Deployment 里的 Pod 副本,当这些 Pod 副本的 CPUUtilizationPercentage 的值超过 90% 时会触发自动动态扩容行为,在扩容或缩容时必须满足的一个约束条件是 Pod 的副本数为 1~10。

kubectl create

除了可以通过直接定义 YAML 文件并且调用 kubectl create 的命令来创建一个 HPA 资源对象外,还可以通过下面的简单命令行直接创建等价的 HPA 对象:

kubectl autoscale deployment php-apache --cpu-percent=90 --min=1 --max=10

最后更新于