概述
Horizontal Pod Autoscaling,简称 HPA,是 Kubernetes 中实现 POD 水平自动伸缩的功能。自动扩展主要分为两种:
水平扩展 (scale out),针对于实例数目的增减
垂直扩展 (scal up),即单个实例可以使用的资源的增减, 比如增加 cpu 和增大内存
HPA 属于前者。它可以根据 CPU 使用率或应用自定义 metrics 自动扩展 Pod 数量 (支持 replication controller、deployment 和 replica set)
监控数据获取
Heapster: heapster 收集 Node 节点上的 cAdvisor 数据,并按照 kubernetes 的资源类型来集合资源。但是在 v1.11 中已经被废弃(heapster 监控数据可用,但 HPA 不再从 heapster 拿数据)
metric-server: 在 v1.8 版本中引入,官方将其作为 heapster 的替代者。metric-server 依赖于 kube-aggregator,因此需要在 apiserver 中开启相关参数。v1.11 中 HPA 从 metric-server 获取监控数据
工作流程
1. 创建 HPA 资源,设定目标 CPU 使用率限额,以及最大、最小实例数, 一定要设置 Pod 的资源限制参数: request, 负责 HPA 不会工作。
2. 控制管理器每隔 30s(可以通过–horizontal-pod-autoscaler-sync-period 修改) 查询 metrics 的资源使用情况
3. 然后与创建时设定的值和指标做对比 (平均值之和 / 限额),求出目标调整的实例个数
4. 目标调整的实例数不能超过 1 中设定的最大、最小实例数,如果没有超过,则扩容;超过,则扩容至最大的实例个数
如何部署:
1.6-1.10 版本默认使用 heapster
1.11 版本及以上默认使用 metric-server
1. 部署和运行 php-apache 并将其暴露成为服务
2. 创建 HPA
如果为 1.8 及以下的 k8s 集群,指标正常,如果为 1.11 集群,需要执行如下操作。
4. 向 php-apache 服务增加负载,验证自动扩缩容 启动一个容器,并通过一个循环向 php-apache 服务器发送无限的查询请求(请在另一个终端中运行以下命令)
5. 观察 HPA 是否生效
container-monitor-book 系列 : https://yasongxu.gitbook.io/container-monitor/