1.HPA介绍
Kubernetes Horizontal Pod Autoscaler (HPA) 是 Kubernetes 提供的一种自动扩展机制,它允许用户根据预定义的指标自动调整应用的副本数量。HPA 主要用于水平扩展(增加或减少 Pod 的数量),以应对变化的工作负载需求,从而确保应用服务的高可用性和响应能力。
1.1 工作原理
HPA 控制器定期检查与之关联的 Pod 的指标,如 CPU 使用率、内存使用率或其他自定义指标。如果检测到 Pod 的平均资源使用率超过了预先设定的阈值,HPA 将自动增加 Pod 的数量,反之,则减少 Pod 的数量。这样可以确保应用在需求高峰期有足够的资源处理请求,在低谷期又不浪费资源。
1.2 主要组成部分
-
scaleTargetRef:指定要被自动扩缩容的目标对象,通常是 Deployment、ReplicaSet、StatefulSet 或者 DaemonSet。
-
minReplicas 和 maxReplicas:分别定义了目标对象副本数的最小值和最大值,HPA 将在这些界限内调整副本数量。
-
metrics:定义了用于触发扩缩容的监控指标,可以是资源指标(如 CPU 和内存使用率),也可以是自定义指标。
1.3 使用场景
-
自动响应负载变化:HPA 可以自动响应流量的波动,例如在节假日或促销活动期间自动增加应用实例,而在活动结束后减少实例数。
-
资源优化:通过自动调整副本数,HPA 可以帮助节省成本和资源,避免过度配置或资源不足的情况。
-
高可用性:HPA 可以确保即使在单个 Pod 失效的情况下,应用仍具有足够的冗余,以维持服务的连续性。
2.使用样例
这段 YAML 文件定义了一个 HPA,它将监控名为
bm-product-service-app
的 Deployment,并基于 CPU 和内存使用率来自动调整副本数量。当平均 CPU 使用率达到 50%,或平均内存使用率达到 10% 时,HPA 将自动调整副本数量,且副本数将被限制在 1 至 10 之间。请注意,内存使用率的设置仅为示例,实际应用中应根据需求调整。
# 指定对象所属的 API 组和版本
apiVersion: autoscaling/v2
# 指定对象的种类
kind: HorizontalPodAutoscaler
# 元数据,包括对象的名称
metadata:
name: bm-product-service-app-hpa
# HPA 的规格,定义了如何进行扩缩容
spec:
# 指定要扩缩容的目标对象,这里是 Deployment
scaleTargetRef:
apiVersion: apps/v1 # 目标对象所属的 API 组和版本
kind: Deployment # 目标对象的种类
name: bm-product-service-app # 目标 Deployment 的名称
behavior:
scaleDown:
stabilizationWindowSeconds: 30 #如果你配置了 stabilizationWindowSeconds,HPA 会在做出扩容决策前等待指定的时间以确认系统的稳定性。即使达到阈值,HPA 也会等待这段时间再做出最终决定。
scaleUp:
stabilizationWindowSeconds: 30
# 最小副本数,HPA 不会将副本数降低到这个值以下
minReplicas: 1
# 最大副本数,HPA 不会将副本数增加到这个值以上
maxReplicas: 10
# 定义监控并用于扩缩容的指标列表
metrics:
# 第二个指标,基于内存使用率
- type: Resource
resource:
# 监控的资源类型
name: memory
# 目标利用率,这里设置为 10%,意味着当平均内存使用率达到 10% 时触发扩缩容
target:
type: Utilization
averageUtilization: 55
3.查看HPA状态
kubectl get hpa 查看当前占用比例值
kubectl describe hpa bm-product-service-app-hpa 查看HPA事件
3.删除指定HPA
kubectl delete hpa bm-product-service-app-hpa