Files
Deploy-Laboratory/docs/04-13-nodejs-HPA.md
2026-03-29 09:08:01 +08:00

69 lines
3.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 04-13-nodejs-HPA
> 为 `nodejs-demo` 配置 **HorizontalPodAutoscaler**,按 CPU/内存等指标在 `minReplicas``maxReplicas` 间自动伸缩。
## TL;DR
- **手动练习**:复制本课目录 `ansible/files/04-13/` 下清单到目标路径,按需改字段后按本文 `kubectl`/bash 操作(学习路径可不使用 verify
- **自动化验收**`./ansible/bin/verify.sh run 04-13`
- **关键前置**:按本文「前置条件」准备环境变量/Secret/入口 IP
- **成功判据**:达到本文「预期」且 playbook 断言通过
- **排障**:见本文「排障」
## 前置条件
- 集群已安装 **metrics-server**K3s 常默认启用;`kubectl top nodes` 可用即基本就绪)。
- Deployment 已配置 **`resources.requests`**CPU 指标 HPA 依赖 requests见 [`04-08-nodejs-资源请求与限制.md`](04-08-nodejs-资源请求与限制.md)。
- 建议已配置 **readinessProbe**[`04-05-nodejs-探针与健康检查.md`](04-05-nodejs-探针与健康检查.md)),避免扩容出未就绪 Pod。
## 清单路径(本课分目录)
| 本篇完整清单(含 Deployment/Service/Ingress/PVC/CM + **HPA** | [`ansible/files/04-13/04-13-nodejs-demo.yaml`](../ansible/files/04-13/04-13-nodejs-demo.yaml) |
| 应用 | `kubectl apply -f ansible/files/04-13/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` |
## 部署与验证
```bash
kubectl apply -f ansible/files/04-13/04-13-nodejs-demo.yaml
kubectl get hpa -n default
kubectl describe hpa nodejs-demo -n default
```
加压 Pod例如在集群内对 Service 做短时压测)后观察 **REPLICAS** 是否上升;降压后是否回落(受 `--default-downscale-stabilization` 等控制器参数影响,可能有延迟)。
## 删除 HPA
```bash
kubectl delete hpa nodejs-demo -n default
```
## 失败排查
- **unknown / missing metrics**metrics-server 未运行Pod 无 `resources.requests`
- **不扩容**:当前利用率未达阈值;或 `maxReplicas` 已达上限。
- **频繁抖动**:调高目标利用率或配置 behavior`scaleDown`/`scaleUp` stabilizationWindow
- `06-01-k3s-networkpolicy-故障排查.md`
## 相关文档
- [`04-06-nodejs-副本与滚动发布.md`](04-06-nodejs-副本与滚动发布.md)
- [`05-05-prometheus与grafana.md`](05-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`