Files
Deploy-Laboratory/docs/04-11-nodejs-存储与卷.md
2026-03-29 09:08:01 +08:00

74 lines
3.1 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-11-nodejs-存储与卷
> 为 Node.js 工作负载挂载 **临时卷** 或 **持久卷PVC**:日志、上传目录、`/tmp`、只读配置目录等。
## TL;DR
- **手动练习**:复制本课目录 `ansible/files/04-11/` 下清单到目标路径,按需改字段后按本文 `kubectl`/bash 操作(学习路径可不使用 verify
- **自动化验收**`./ansible/bin/verify.sh run 04-11`
- **关键前置**:按本文「前置条件」准备环境变量/Secret/入口 IP
- **成功判据**:达到本文「预期」且 playbook 断言通过
- **排障**:见本文「排障」
## 前置条件
- 已部署 `nodejs-demo``04-01`)。
- 持久化前请先完成存储类选型:`03-05-k3s-local-path-pvc.md``03-06-k3s-使用nfs存储.md``03-07-k3s-longhorn-持久化存储.md` 等。
## 清单路径(本课分目录)
| 本篇完整清单(含 PVC + `/data` 挂载,默认 `storageClassName: local-path` | [`ansible/files/04-11/04-11-nodejs-demo.yaml`](../ansible/files/04-11/04-11-nodejs-demo.yaml) |
| 应用 | `kubectl apply -f ansible/files/04-11/04-11-nodejs-demo.yaml` |
emptyDir、仅 ConfigMap 卷等变体可在该清单基础上自行删减 PVC 与 `volumeMounts` 做实验。
## 场景说明(白话)
- **emptyDir**Pod 删掉数据就没,像临时盘;适合缓存、`/tmp`
- **PVC**数据由存储驱动落到盘里Pod 重建还可能挂上同一块盘(取决于存储类型与访问模式)。
- **ConfigMap 挂成文件**:适合「配置文件」形态,只读挂载很常见。
### 相对 `04-10` 的变更(原文 → 新文)
| 位置 | 原文(`04-10` | 新文(`04-11` |
|------|-----------------|-----------------|
| 资源列表 | 无 PVC | 新增 `PersistentVolumeClaim` `nodejs-demo-data` |
| `volumeMounts` | 仅 `/tmp` | 增加 `/data` |
| `volumes` | 仅 `tmp` emptyDir | 增加 `persistentVolumeClaim` |
**emptyDir 缓存卷**、**ConfigMap 只读挂载** 的片段写法见 Kubernetes 文档;可在 [`04-11-nodejs-demo.yaml`](../ansible/files/04-11/04-11-nodejs-demo.yaml) 上自行合并实验。
## 部署与验证
```bash
kubectl apply -f ansible/files/04-11/04-11-nodejs-demo.yaml
kubectl get pvc -n default
kubectl exec deploy/nodejs-demo -n default -- df -h /data
```
## 删除
```bash
kubectl delete pvc nodejs-demo-data -n default
```
(注意:是否删除底层 PV 数据取决于 reclaim 策略与驱动行为。)
## 失败排查
- **Multi-Attach error**RWO 卷被多个 Pod 同时挂载;改 `ReadWriteMany` 存储类或单副本。
- **挂载失败**PVC 未 BoundStorageClass 不存在。
- `06-01-k3s-networkpolicy-故障排查.md`
## 相关文档
- [`04-04-nodejs-环境变量与配置注入.md`](04-04-nodejs-环境变量与配置注入.md)
- [`04-10-nodejs-安全上下文.md`](04-10-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`