Files
Deploy-Laboratory/docs/04-08-nodejs-资源请求与限制.md
2026-03-29 09:08:01 +08:00

68 lines
2.8 KiB
Markdown
Raw Permalink 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-08-nodejs-资源请求与限制
> 为 `nodejs-demo` 配置 `resources.requests` / `resources.limits`,便于调度与避免单个 Pod 占满节点;为后续 **HPA**[`04-13-nodejs-HPA.md`](04-13-nodejs-HPA.md))提供基础。
## TL;DR
- **手动练习**:复制本课目录 `ansible/files/04-08/` 下清单到目标路径,按需改字段后按本文 `kubectl`/bash 操作(学习路径可不使用 verify
- **自动化验收**`./ansible/bin/verify.sh run 04-08`
- **关键前置**:按本文「前置条件」准备环境变量/Secret/入口 IP
- **成功判据**:达到本文「预期」且 playbook 断言通过
- **排障**:见本文「排障」
## 前置条件
- 已部署 `nodejs-demo``04-01`)。
## 清单路径(本课分目录)
| 本篇完整清单 | [`ansible/files/04-08/04-08-nodejs-demo.yaml`](../ansible/files/04-08/04-08-nodejs-demo.yaml) |
| 应用 | `kubectl apply -f ansible/files/04-08/04-08-nodejs-demo.yaml` |
## 场景说明(白话)
- **requests请求量**:告诉调度器「我常态大概要多少 CPU/内存」,方便排布;**CPU 类 HPA** 也会用到(见 `04-13`)。
- **limits上限**:内存超过上限,容器可能被 **OOM 杀掉**CPU 超过上限会被 **限流**,变慢但不一定重启。
- **Node 堆**:还可以用 `NODE_OPTIONS=--max-old-space-size=...` 限制 V8 堆,和容器内存 limit 配合用(见 `04-03`)。
### 相对 `04-07` 的变更(原文 → 新文)
| 位置 | 原文(`04-07` | 新文(`04-08` |
|------|-----------------|-----------------|
| `containers[].resources` | (无) | `requests` cpu 50m / memory 64Mi`limits` cpu 500m / memory 256Mi |
## 部署与验证
```bash
kubectl apply -f ansible/files/04-08/04-08-nodejs-demo.yaml
kubectl describe pod -l app=nodejs-demo -n default | grep -A5 "Limits\|Requests"
```
若集群已装 **metrics-server**
```bash
kubectl top pod -l app=nodejs-demo -n default
```
## 删除限制
`resources` 整段删除或设为合理值后 `kubectl apply`
## 失败排查
- **OOMKilled**:提高 `limits.memory` 或降低 Node 堆/优化代码;`kubectl describe pod``Last State`
- **CPU 节流**:延迟升高;调大 `limits.cpu` 或优化热点。
- `06-01-k3s-networkpolicy-故障排查.md`(与网络无关时仍可先排除入口问题)
## 相关文档
- [`04-13-nodejs-HPA.md`](04-13-nodejs-HPA.md)
- [`04-05-nodejs-探针与健康检查.md`](04-05-nodejs-探针与健康检查.md)
## 排障
- **先看 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`