Autoscaler
在kubernetes中有三种Autoscaler。
- CA(Cluster Autoscaler): 指的是集群级别的自动扩缩容,主要针对Node级别
- HPA(Horizontal Pod Autoscaler): 指的是Pod的个数自动扩缩容
- VPA(Vertical Pod Autoscaler): 指的是Pod的所占用的资源的自动扩缩容,主要指的是CPU, Memory等
本文着重介绍的是HPA。
Horizontal Pod Autoscaler
Horizontal Pod Autoscaling可以根据CPU使用率或应用自定义metrics自动扩展Pod数量(支持replication controller、deployment和replica set)。但是需要注意的是HPA不能作用在不能扩展的对象上,比如DaemonSets。
需要注意的是,从v1.12版本之后,配置方式略有不同,所以再选择集群的时候需要注意。
自动伸缩算法
-
预期Pod数量=ceil[当前Pod数量 * (当前指标采集值/预期指标采集值)]
ceil在此处指向上取整数
-
控制管理器每隔30s(可以通过--horizontal-pod-autoscaler-sync-period
修改)查询metrics的资源使用情况
-
在每一次作出决策后的一段时间内,将不再进行扩缩容。对于扩容而言,这个时间为3分钟(可以通过--horizontal-pod-autoscaler-upscale-delay
修改),但是在v1.12之后这个功能被移除了。缩容为5分钟(可以通过--horizontal-pod-autoscaler-downscale-delay
进行调整)。
针对CPU的扩缩容实践
Dockerfile
执行Dockerfile打镜像
- 在Kubernetes的每一台Node上执行如下安装hpa-example镜像
- 或者将镜像上传到自己的Docker repository中,就不用再每个Node上都执行一次docker build了。
创建Deployment和Service
创建HPA
增加负载
检测HPA变化
等待一到两分钟后
停止负载并等待5分钟后
自定义Metrics(Prometheus)实践
整体架构设计图如下:
安装Prometheus Operator
如果Kubernetes集群已经安装Prometheus Operator直接忽略跳到下一步。
遇到一个问题说kubernetes集群中没有apps/v1
的API信息。
查看了下自己的kubernetes版本为v1.8.4
, 而kubernetes集群再v1.9.0
之后才开始支持apps/v1
, 在v1.8.4
可以使用apps/v1beta2
来替代,或者可以升级集群到v1.9.0之后
。
- 方案一: 在
v1.8.4
使用apps/v1beta2
来替代
https://kubernetes.io/docs/tasks/administer-cluster/kubeadm/kubeadm-upgrade-1-11/
我的选择是升级到v1.10.0
安装Prometheus Operator
安装Prometheus
安装Custom Metrics API Service
安装Sample Metrics App
查看HPA状态
查看API Service中的指标情况
加压
查看 HPA 和 API Service 状态
Spring Boot 2.0通过micrometer提供http_requests_total指标信息
Pom.xml
MetricsConfig.java
WebConfig.java
RequestCounterInterceptor.java
参考资料
Kubernetes Autoscaler : https://github.com/kubernetes/autoscaler
Horizontal Pod Autoscaler : https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale/
Autoscaling Deployments with Custom Metrics : https://cloud.google.com/kubernetes-engine/docs/tutorials/custom-metrics-autoscaling
Horizontal pod auto scaling by using custom metrics : https://www.ibm.com/support/knowledgecenter/en/SSBS6K_2.1.0.3/manage_cluster/hpa.html
Kubernetes Autoscaling 101 : Cluster Autoscaler, Horizontal Pod Autoscaler, and Vertical Pod Autoscaler : https://medium.com/magalix/kubernetes-autoscaling-101-cluster-autoscaler-horizontal-pod-autoscaler-and-vertical-pod-2a441d9ad231
Configuring vertical pod autoscaling : https://cloud.google.com/kubernetes-engine/docs/how-to/vertical-pod-autoscaling
Horizontal Pod Autoscaling : https://www.kubernetes.org.cn/horizontal-pod-autoscaling
Upgrading kubeadm clusters from v1.10 to v1.11: https://kubernetes.io/docs/tasks/administer-cluster/kubeadm/kubeadm-upgrade-1-11/
kubeadm-workshop: https://github.com/luxas/kubeadm-workshop
[kubernetes系列]HPA模块深度讲解: https://juejin.im/post/5b9dfc3df265da0ad947be85
Kubernetes自动缩扩容HPA算法小结: https://www.jianshu.com/p/504f49710f84
Metrics Implementations : https://github.com/kubernetes/metrics/blob/master/IMPLEMENTATIONS.md