3.0 KiB
3.0 KiB
04-13-nodejs-HPA
为
nodejs-demo配置 HorizontalPodAutoscaler,按 CPU/内存等指标在minReplicas~maxReplicas间自动伸缩。
TL;DR
- 自动化验收:
./scripts/verify.sh run 04-13 - 关键前置:按本文「前置条件」准备环境变量/Secret/入口 IP
- 成功判据:达到本文「预期」且 playbook 断言通过
- 排障:见本文「排障」
前置条件
- 集群已安装 metrics-server(K3s 常默认启用;
kubectl top nodes可用即基本就绪)。 - Deployment 已配置
resources.requests(CPU 指标 HPA 依赖 requests),见04-08-nodejs-资源请求与限制.md。 - 建议已配置 readinessProbe(
04-05-nodejs-探针与健康检查.md),避免扩容出未就绪 Pod。
清单路径(唯一真源)
| 本篇完整清单(含 Deployment/Service/Ingress/PVC/CM + HPA) | ansible/files/04-01/04-13-nodejs-demo.yaml |
| 应用 | kubectl apply -f ansible/files/04-01/04-13-nodejs-demo.yaml(若用 04-12,需先有 TLS Secret) |
场景说明(白话)
- HPA:根据 CPU/内存等指标,自动加减 Pod 个数(在
minReplicas~maxReplicas之间)。 - 为什么要配 requests:否则集群算不出「利用率百分比」,CPU 型 HPA 往往不工作。
相对 04-12 的变更(原文 → 新文)
| 位置 | 原文(04-12) |
新文(04-13) |
|---|---|---|
| 资源 | 无 HPA | 新增 HorizontalPodAutoscaler nodejs-demo,CPU 目标利用率 50%,minReplicas: 1,maxReplicas: 5 |
部署与验证
kubectl apply -f ansible/files/04-01/04-13-nodejs-demo.yaml
kubectl get hpa -n default
kubectl describe hpa nodejs-demo -n default
加压 Pod(例如在集群内对 Service 做短时压测)后观察 REPLICAS 是否上升;降压后是否回落(受 --default-downscale-stabilization 等控制器参数影响,可能有延迟)。
删除 HPA
kubectl delete hpa nodejs-demo -n default
失败排查
- unknown / missing metrics:metrics-server 未运行;Pod 无
resources.requests。 - 不扩容:当前利用率未达阈值;或
maxReplicas已达上限。 - 频繁抖动:调高目标利用率或配置 behavior(
scaleDown/scaleUpstabilizationWindow)。 06-01-k3s-networkpolicy-故障排查.md
相关文档
04-06-nodejs-副本与滚动发布.md05-05-prometheus与grafana.md(自定义 metrics 进阶,本文不展开)
排障
- 先看 playbook 输出:失败时先定位是 deploy/wait/http_check 哪一步。
- 集群侧总览:
kubectl get nodes -o wide、kubectl -n kube-system get pods -o wide。 - 事件与日志:
kubectl -n <ns> describe ...、kubectl -n <ns> logs ... --tail=200。