Autoscaling
Horizontal Pod Autoscaling (HPA) 可以根据 CPU 使用率或应用自定义 metrics 自动扩展 Pod 数量(支持 replication controller、deployment 和 replica set )。
控制管理器每隔 30s(可以通过
--horizontal-pod-autoscaler-sync-period修改)查询 metrics 的资源使用情况支持三种 metrics 类型
预定义 metrics(比如 Pod 的 CPU)以利用率的方式计算
自定义的 Pod metrics,以原始值(raw value)的方式计算
自定义的 object metrics
支持两种 metrics 查询方式:Heapster 和自定义的 REST API
支持多 metrics
注意:
本章是关于 Pod 的自动扩展,而 Node 的自动扩展请参考 Cluster AutoScaler。
在使用 HPA 之前需要 确保已部署好 metrics-server。
API 版本对照表
Kubernetes 版本
autoscaling API 版本
支持的 metrics
v1.5+
autoscaling/v1
CPU
v1.6+
autoscaling/v2beta1
Memory及自定义
示例
自定义 metrics
使用方法
控制管理器开启
--horizontal-pod-autoscaler-use-rest-clients控制管理器配置的
--master或者--kubeconfig在 API Server Aggregator 中注册自定义的 metrics API,如 https://github.com/kubernetes-incubator/custom-metrics-apiserver 和 https://github.com/kubernetes/metrics
注:可以参考 k8s.io/metics 开发自定义的 metrics API server。
比如 HorizontalPodAutoscaler 保证每个 Pod 占用 50% CPU、1000pps 以及 10000 请求 / s:
HPA 示例
状态条件
v1.7+ 可以在客户端中看到 Kubernetes 为 HorizontalPodAutoscaler 设置的状态条件 status.conditions,用来判断 HorizontalPodAutoscaler 是否可以扩展(AbleToScale)、是否开启扩展(ScalingActive)以及是否受到限制(ScalingLimitted)。
HPA 最佳实践
为容器配置 CPU Requests
HPA 目标设置恰当,如设置 70% 给容器和应用预留 30% 的余量
保持 Pods 和 Nodes 健康(避免 Pod 频繁重建)
保证用户请求的负载均衡
使用
kubectl top node和kubectl top pod查看资源使用情况
Last updated