3.7 KiB
3.7 KiB
04-04-nodejs-环境变量与配置注入
在
04-01-k3s-nodejs-高级部署.md基线上,用 ConfigMap / Secret 与env/envFrom注入配置,避免把敏感信息写进镜像或 Deployment 明文。
TL;DR
- 手动练习:复制本课目录
ansible/files/04-04/下清单到目标路径,按需改字段后按本文kubectl/bash 操作(学习路径可不使用 verify)。 - 自动化验收:
./ansible/bin/verify.sh run 04-04 - 关键前置:按本文「前置条件」准备环境变量/Secret/入口 IP
- 成功判据:达到本文「预期」且 playbook 断言通过
- 排障:见本文「排障」
前置条件
- 已部署
nodejs-demo(04-01)。
清单路径(本课分目录)
| 项 | 路径 / 命令 |
|---|---|
| 本篇完整清单(累积至 04-04,含 ConfigMap + Deployment + Service + Ingress) | ansible/files/04-04/04-04-nodejs-demo.yaml |
| Secret 示例(勿提交真密钥) | ansible/files/04-01/nodejs-demo-secret.example.yaml |
| 手工应用 | kubectl apply -f ansible/files/04-04/04-04-nodejs-demo.yaml |
| Ansible | ansible-playbook ... -e nodejs_demo_manifest=04-04-nodejs-demo.yaml |
场景说明(白话)
- 普通配置(提示文案、开关、非密钥连接串):用 ConfigMap;改完
kubectl apply,Pod 滚动后生效(是否自动重启取决于你怎么挂载/引用)。 - 密钥类:用 Secret;内容和 ConfigMap 类似,但要更严格管控权限与存储位置。
- 在 Node 里怎么用:和在本机设环境变量一样,例如
NODE_ENV、PORT、NODE_OPTIONS;启动命令怎么写见04-03-nodejs-镜像与运行命令.md。
相对 04-03 的变更(原文 → 新文)
| 位置 | 原文(04-03) |
新文(04-04) |
|---|---|---|
| 新增资源 | (无) | ConfigMap nodejs-demo-config,APP_MSG |
containers[].env |
(无) | APP_MSG 来自 configMapKeyRef |
containers[].command |
["node"] + args 内联脚本 |
node + 多行 -e 脚本,读 process.env.APP_MSG,仍监听 8080 |
应用:
kubectl apply -f ansible/files/04-04/04-04-nodejs-demo.yaml
验证
kubectl get cm nodejs-demo-config -n default -o yaml
kubectl exec deploy/nodejs-demo -n default -- printenv APP_MSG
curl -s --max-time 3 http://<节点IP>/node/
Secret 示例(仅示意)
说明:示例文件为 nodejs-demo-secret.example.yaml;也可 kubectl create secret generic ...。在 Pod 中用 env.valueFrom.secretKeyRef 引用;验证 printenv API_TOKEN(注意日志勿打印密钥)。
删除
kubectl delete configmap nodejs-demo-config -n default --ignore-not-found
kubectl delete secret nodejs-demo-secret -n default --ignore-not-found
失败排查
- CreateContainerConfigError:引用的 ConfigMap/Secret 不存在或 key 名错误。
06-01-k3s-networkpolicy-故障排查.md
相关文档
04-11-nodejs-存储与卷.md(文件挂载另一种注入方式)04-12-nodejs-TLS与证书.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。