服务自动扩缩容

最近更新时间:2019-05-20 12:02:23

简介

服务自动扩缩容功能(又称 HPA)可以根据实例(pod)CPU 利用率等指标自动扩展,缩减服务的实例数量。
需要注意的是,自动扩缩容功能对应后台 HPA 组件的版本是 v2alpha1,并不支持 1.4.6 版本的 Kubernetes 集群。

使用方法

有下面三个入口可以设置服务的自动扩缩容:

  • 创建/更新服务时设置:
  • 更新服务实例数量时设置:
  • 最大实例数,最小实例数:自动扩缩容功能能够调整的 Pod 数目区间。
  • 触发策略指标:自动伸缩功能依赖的策略指标。
  • CPU 利用率:容器 CPU 使用量和 CPU 的 request 值比率。
  • 内存利用率:容器内存使用量和内存的 request 值比率。
  • 入带宽:POD 入带宽(Mb)。
  • 出带宽:POD 出带宽(Mb)。

说明:

其中 CPU 利用率,内存利用率对应 Kubernetes 资源类指标;入带宽,出带宽对应 Kubernetes 自定义 Pod 类指标。
如果需要使用资源类指标作为自动伸缩策略,需要在创建服务的时候设置容器对应的 request 值,否则不支持。

伸缩算法

服务自动扩缩容后台组件会定期(30s)向腾讯云云监控拉取容器和 POD 的监控指标,然后根据该指标当前值,当前副本数和该指标目标值计算出目标副本数,然后以该目标副本数作为服务的期望副本数,达到自动伸缩的目的。 比如当前有 2 个实例, 平均 CPU 利用率为 90%,服务自动伸缩设置目标 CPU 为 60%, 则自动调整实例数量为:90% * 2 / 60% = 3 个。
如果用户设置了多个弹性伸缩指标,HPA 会依据各个指标,分别计算出目标副本数,然后取最大的一个作为最终目标副本数。

注意事项

  • 为容器设置 CPU Request;
  • 策略指标目标设置合理,如设置 70% 给容器和应用,预留 30% 的余量;
  • 保持 Pod 和 Node 健康(避免 Pod 频繁重建);
  • 保证用户请求的负载均衡;
  • HPA 在计算目标副本数时会有一个 10% 的波动因子,如果在波动范围内,HPA 并不会调整副本数目;
  • 如果服务对应的deployment.spec.replicas值为0,弹性伸缩将不起作用。