2.9 KiB
2.9 KiB
04-11-nodejs-存储与卷
为 Node.js 工作负载挂载 临时卷 或 持久卷(PVC):日志、上传目录、
/tmp、只读配置目录等。
TL;DR
- 自动化验收:
./scripts/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-01/04-11-nodejs-demo.yaml |
| 应用 | kubectl apply -f ansible/files/04-01/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 上自行合并实验。
部署与验证
kubectl apply -f ansible/files/04-01/04-11-nodejs-demo.yaml
kubectl get pvc -n default
kubectl exec deploy/nodejs-demo -n default -- df -h /data
删除
kubectl delete pvc nodejs-demo-data -n default
(注意:是否删除底层 PV 数据取决于 reclaim 策略与驱动行为。)
失败排查
- Multi-Attach error:RWO 卷被多个 Pod 同时挂载;改
ReadWriteMany存储类或单副本。 - 挂载失败:PVC 未 Bound;StorageClass 不存在。
06-01-k3s-networkpolicy-故障排查.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。