69 lines
3.2 KiB
Markdown
69 lines
3.2 KiB
Markdown
# 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`。
|