一、HPA
- HPA,全称 Horizontal Pod Autoscaler, 可以基于 CPU 利用率自动扩缩 ReplicationController、Deployment 和 ReplicaSet 中的 Pod 数量。 除了 CPU 利用率,也可以基于其他应用程序提供的自定义度量指标来执行自动扩缩。 Pod 自动扩缩不适用于无法扩缩的对象,比如 DaemonSet。
- Pod 水平自动扩缩特性由 Kubernetes API 资源和控制器实现。资源决定了控制器的行为。 控制器会周期性的调整副本控制器或 Deployment 中的副本数量,以使得 Pod 的平均 CPU 利用率与用户所设定的目标值匹配。
- 实际生产中,广泛使用这四类指标:
Resource metrics - CPU核内存利用率指标
Pod metrics - 例如网络利用率和流量
Object metrics - 特定对象的指标,比如Ingress, 可以按每秒使用请求数来扩展容器
Custom metrics - 自定义监控,比如通过定义服务响应时间,当响应时间达到一定指标时自动扩容
二、HPA实时调度pod(CPU)
新建实验目录
导入、标签、上传
[root@server2 hpa]# cat deploy.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: php-apache
spec:
selector:
matchLabels:
run: php-apache
replicas: 1
template:
metadata:
labels:
run: php-apache
spec:
containers:
- name: php-apache
image: library/hpa-example
ports:
- containerPort: 80
resources:
limits:
cpu: 500m
requests:
cpu: 200m
---
apiVersion: v1
kind: Service
metadata:
name: php-apache
labels:
run: php-apache
spec:
ports:
- port: 80
selector:
run: php-apache
吊起查看详细信息
php-apache 服务器已经运行,通过 kubectl autoscale 命令创建 Horizontal Pod Autoscaler。将创建一个 Horizontal Pod Autoscaler 用于控制我们上一步骤中创建的 Deployment,使 Pod 的副本数量维持在 1 到 10 之间HPA 将(通过 Deployment)增加或者减少 Pod 副本的数量以保持所有 Pod 的平均 CPU 利用率在 50% 左右。
创建交互pod,不断写入,增大cpu负载
CPU 负载升高,达到了236%,Deployment 的副本数量已经增长到了 7
随着负载增大,pod php-apache 数量增多,用于缓解压力