# 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 describe ...`、`kubectl -n logs ... --tail=200`。