跳转到内容

扩缩容与自动扩缩

Nantian Gateway 支持对数据面、控制面和 Dashboard 进行 Horizontal Pod Autoscaling(HPA)。启用后,Helm Chart 会为每个组件分别创建 autoscaling/v2 HorizontalPodAutoscaler 资源。

Chart 为每个启用的组件创建一个独立的 HPA。每个 HPA 持续监控 CPU 和内存利用率,并根据配置的目标值自动调整 Pod 副本数。

组件扩缩行为
数据面无状态 — 增加副本可直接提升请求容量,无需实例间协调。每个副本通过 gRPC/xDS 从控制面接收完整的路由快照。
控制面活跃 Leader 执行调和逻辑。备用副本提供高可用保障。HPA 确保 Leader 切换时有足够的备用实例。
Dashboard无状态 Next.js 应用。HPA 根据管理 UI 流量扩缩 Dashboard 实例。

HPA 正常运行的前提是为各组件容器配置资源请求(resource requests)。Kubernetes 指标管线使用容器的资源请求来计算利用率百分比。

Chart 内置了各组件的默认资源请求。在启用 HPA 之前,请根据实际工作负载调整这些值。

默认值描述
hpa.enabledfalse为所有组件启用 HPA
hpa.targetCPUUtilization70目标 CPU 利用率百分比
hpa.targetMemoryUtilization75目标内存利用率百分比
hpa.dataplane.minReplicas2数据面最小副本数
hpa.dataplane.maxReplicas10数据面最大副本数
hpa.controlplane.minReplicas2控制面最小副本数
hpa.controlplane.maxReplicas5控制面最大副本数
hpa.dashboard.minReplicas2Dashboard 最小副本数
hpa.dashboard.maxReplicas5Dashboard 最大副本数

在 values 覆盖文件中将 hpa.enabled 设置为 true。典型配置如下:

hpa:
enabled: true
targetCPUUtilization: 70
targetMemoryUtilization: 75
dataplane:
minReplicas: 2
maxReplicas: 10
controlplane:
minReplicas: 2
maxReplicas: 5
dashboard:
minReplicas: 2
maxReplicas: 5

使用覆盖文件部署 Chart:

Terminal window
helm upgrade nantian-gw nantian/nantian-gw \
--namespace nantian-gw \
--values hpa-values.yaml

控制面通过 Kubernetes Leader 选举机制运行。只有当选的 Leader 执行调和逻辑并发布 xDS 快照。备用实例等待 Leader 租约,在 Leader 故障时接管。

为控制面启用 HPA 可确保有足够的备用副本提供高可用保障。当 Leader 发生故障时,备用实例可以立即接管,无需等待新 Pod 启动。

启用 HPA 后,确认 HPA 资源已创建并正在采集指标:

Terminal window
# 列出所有 HPA 资源
kubectl get hpa -n nantian-gw
# 查看各组件 HPA 详情
kubectl describe hpa nantian-gw-dataplane -n nantian-gw
kubectl describe hpa nantian-gw-controlplane -n nantian-gw
kubectl describe hpa nantian-gw-dashboard -n nantian-gw

在 describe 输出中关注以下信号:

  • AbleToScale:HPA 能够获取指标并做出扩缩决策。
  • ScalingActive:HPA 处于活跃状态并已选定目标。
  • ScalingLimited:当前副本数已到达最小或最大边界。

如果 CPU 或内存指标显示 <unknown>,请检查集群中 metrics-server 是否正在运行,以及数据面 Pod 是否已配置资源请求。

Terminal window
# 确认 metrics-server 可用
kubectl get deployment metrics-server -n kube-system
# 确认数据面 Pod 上报资源用量
kubectl top pods -n nantian-gw -l app.kubernetes.io/component=dataplane