要让Kubernetes中的HPA(HorizontalPodAutoscaler)真正稳定运行,有几个关键前提必须逐一满足:首先,Metrics Server必须提前部署并处于就绪状态;其次,Grok的Deployment里必须明确声明resources.requests;此外,HPA既可以基于CPU利用率触发弹性伸缩,也可以基于Prometheus采集的QPS指标进行动态扩缩容;最后,还需要执行完整的验证流程——先查看HPA当前状态,再通过压测观察扩容效果,最后停止压力并确认缩容是否正常回退。

确认Kubernetes集群已启用Metrics Server
HPA的运作依赖于实时的资源指标数据。Kubernetes 1.8版本之后默认不再集成Heapster,因此需要自行部署Metrics Server,否则HPA将无法正常工作。
如何判断Metrics Server是否已经安装?最简单的方法是执行 kubectl top nodes。如果正常返回了各节点的CPU和内存使用率,说明组件已就绪。如果命令行回显的是 error: Metrics API not a vailable,则代表尚未安装。
安装步骤并不复杂,直接运行下面这条命令即可部署最新稳定版本:
kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/download/v0.7.2/components.yaml
有一个细节需要特别留意:务必等到Metrics Server的Pod状态变为Running,且READY显示为1/1。否则后续HPA的状态栏会一直显示unknown,导致无法正常使用。
为Grok服务创建Deployment并设置资源请求
弹性伸缩的前提是Pod需要明确告知集群自身所需的资源量,否则HPA无法计算利用率百分比,也就无法正确判断何时扩容或缩容。
编写grok-deployment.yaml时,关键字段中必须包含 resources.requests.cpu 和 resources.requests.memory,例如设置为 100m 和 256Mi。配置文件编写完成后,直接执行 kubectl apply -f grok-deployment.yaml 即可完成部署。
这里有一个常见的陷阱:如果未设置requests,HPA会直接报错 missing request for cpu,并拒绝生效。因此请务必不要遗漏此配置。
创建HorizontalPodAutoscaler对象控制副本数
HPA对象需要精确绑定到对应的Deployment上,且目标指标必须与可采集的实际数据相匹配。
方法一:基于CPU使用率自动扩缩
创建一个hpa-cpu.yaml文件,内容示例如下:
apiVersion: autoscaling/v2kind: HorizontalPodAutoscalermetadata: name: grok-hpa-cpuspec: scaleTargetRef: kind: Deployment name: grok minReplicas: 2 maxReplicas: 8 metrics: - type: Resource resource: name: cpu target: type: Utilization a verageUtilization: 70
随后执行 kubectl apply -f hpa-cpu.yaml 即可启用基于CPU利用率的弹性伸缩策略。
方法二:基于自定义QPS指标(需要提前部署Prometheus和KEDA)
如果Grok服务已经暴露了 /metrics 端点,并且其中包含类似 http_requests_total 的计数器指标,那么可以改用KEDA触发自动伸缩。
需要编写一个scaledobject.yaml文件,在 triggers.type 中指定为 prometheus,并配置对应的PromQL查询语句,例如 sum(rate(http_requests_total[2m]))。
运行 kubectl apply -f scaledobject.yaml 即可激活基于事件驱动的扩缩容机制。
验证HPA是否按预期工作
第一步:查看HPA当前状态
执行 kubectl get hpa,重点关注 CURRENT REPLICAS 与 DESIRED REPLICAS 是否一致,同时检查 TARGET 列是否显示类似 70%/70% 的健康数值。
第二步:模拟负载并观察响应
在另一个终端中持续发送请求模拟压力测试:while true; do curl http://grok-service.default.svc.cluster.local/health; sleep 0.1; done。
等待约60秒后,执行 kubectl get pods -w,应能观察到Pod数量从2个逐步增加到4个甚至更多。
第三步:停止压测,等待5分钟
HPA默认的缩容冷却期为5分钟。在此期间运行 kubectl get hpa,会发现 CURRENT VALUE 持续下降,最终副本数会回落至 minReplicas 所设定的值。整个过程基本实现自动化,只要前期配置到位,扩缩容将会非常顺畅。
