谷歌云GKE Autoscaling大致分4种:infrastructure有Cluster Autoscaling (CA)和Node Auto-provisioning (NAP),workload有Horizontal Pod Autoscaling (HPA)和Vertical Pod Autoscaling (VPA)
-谷歌云GKE Cluster的创建有2中:autopilot(只需要考虑HPA,其他autoscaling为default)和standard(需要考虑所有autoscaling)
Infrastructure Autoscaling:
1. Cluster Autoscaling (CA):可以自动创建相同规格的node(基本上都会用)
#: gcloud container clusters update <cluster> --enable-autoscaling --min-nodes=1 --max-nodes=3
2. Node Auto-provisioning (NAP):可以自动创建不同规格的node(新的machine type等,即创建新的node pool,适用于价格优化的batch job)
#: gcloud container clusters update <cluster> --enable-autoprovisioning --min-cpu=0.5 --max-cpu=2
-场景:需要deploy的job有resource request和toleration,NAP会自动创建新的node pool和新的machine type来配对job的resource request和node taint来配对job的toleration;当job完成后,NAP会自动关闭新创建的node pool
Workload Autoscaling:
3. Horizontal Pod Autoscaling (HPA):可以自动创建相同规格的Pod(基本上都会用)
-必须在deployment中设置CPU的resource request用做HPA autoscaling的基准
#: kubectl autoscale deploy nginx --max=3 --cpu-percent=70
#: kubectl get hpa nginx -o yaml(可以查看hpa的spec,也可以进行修改)
4. Vertical Pod Autoscaling (VPA):可以自动“调节”container的resource requests和limits(相对比较麻烦,需要的运维比较多)
-在运行中的Pod上调节resource requests和limits会触发“关闭和重新创建Pod”,为了尽量不影响服务,需要配合使用GKE的Pod disruption budget
-在GKE上和HPA不同的地方是:VPA运行在control plane;而GKE的control plane是看不到的,所以不能用kubectl get vpa <vpa> -o yaml来查看spec或修改
-如果和HPA一起使用,HPA需要workload的CPU request作为autoscaling的基准,而同时VPA会自动“调节”resource requests,所以需要使用GKE的Multidimensional Pod Autoscaling (MPA)
*VPA Bonus:
-VPA的另一种常用用法:是通过kubectl describe vpa里Container Recommendations给出的目标(推荐的)resource request value来手动调节resource requests,来做workload cost optimization
-因为GKE的VPA看不到,通过console/workloads:Actions-Scale-Edit resource requests可以查看Suggested Request(即推荐的resource request value)(这里不需要开通VPA):
最后,可以通过查看Autoscaler Logs中的events(noScaleUp/noScaleDown的reason)来troubleshoot autoscaling的问题。