Pod 水平自动伸缩(Horizontal Pod Autoscaler)特性, 可以基于:
replication controllerdeploymentreplica setcustom metricsHPA无法缩放的对象,比如DaemonSets。
HPA由Kubernetes API资源和控制器实现,控制器会周期性的获取平均CPU利用率,并与目标值相比来调整replication controller或者deployment中副本的数量。
controller manager的--horizontal-pod-autoscaler-sync-period参数指定周期(默认值15秒),从resource metrics API和custom metrics API获取指标。
通常情况下,控制器将从一系列的聚合 API 中获取指标数据:
metrics.k8s.io:由 metrics-server(需要额外启动)提供custom.metrics.k8s.ioexternal.metrics.k8s.io控制器也可以直接从 Heapster 获取指标。
注意:FEATURE STATE: Kubernetes 1.11 [deprecated] 自 Kubernetes 1.11起,从 Heapster 获取指标特性已废弃。
HPA的扩容算法:期望副本数 = ceil[当前副本数 * ( 当前指标 / 期望指标 )]
例如,CPU利用率:
200.0/100.0=2.0, 副本数量将会翻倍。50.0/100.0=0.5。--horizontal-pod-autoscaler-tolerance参数全局配置的容忍值,默认为0.1), 将会放弃本次缩放。2018年1月22日,新的指标监控目标是暴露一个API可以让HPA用来获取任意的指标,就像Master的指标API,这个新的API围绕获取的指标构建,这些指标通过引用Kubernetes对象(或组)和指标名称,因此,这些API对于其他的想要消费自定义指标的消费者(尤其是控制器)将很有用。
API的根路径类似这样:/apis/custom-metrics/v1alpha1,方便起见,下面省略相同的根路径:
Node、PersistentVolune):/{object-type}/{object-name}/{metric-name...}/{object-type}/*/{metric-name...}/{object-type}/*/{metric-name...}?labelSelector=foo/namespaces/{namespace-name}/{object-type}/{object-name}/{metric-name...}/namespaces/{namespace-name}/{object-type}/*/{metric-name...}/namespaces/{namespace-name}/{object-type}/*/{metric-name...}?labelSelector=foo/namespaces/{namespace-name}/metrics/{metric-name}Metrics Server是集群范围的资源使用情况数据聚合器。
kube-up.sh脚本部署集群,则会默认部署为Deployment[deployment components.yaml](https://github.com/kubernetes-sigs/metrics-server/releases)文件来部署Metrics Server从Summary API中收集指标数据,这些指标数据是每个节点上的kubelet暴露出来的。