3.7 KiB
3.7 KiB
04-03-nodejs-镜像与运行命令
在
04-01-k3s-nodejs-高级部署.md的nodejs-demo基线上,调整镜像与进程启动方式。
TL;DR
- 手动练习:复制本课目录
ansible/files/04-03/下清单到目标路径,按需改字段后按本文kubectl/bash 操作(学习路径可不使用 verify)。 - 自动化验收:
./ansible/bin/verify.sh run 04-03 - 关键前置:按本文「前置条件」准备环境变量/Secret/入口 IP
- 成功判据:达到本文「预期」且 playbook 断言通过
- 排障:见本文「排障」
前置条件
- 已按
04-01部署并验证curl可达。
清单路径(本课分目录)
| 项 | 路径 / 命令 |
|---|---|
| 本篇完整清单(累积至 04-03) | ansible/files/04-03/04-03-nodejs-demo.yaml |
| 手工应用 | kubectl apply -f ansible/files/04-03/04-03-nodejs-demo.yaml |
| Ansible | ansible-playbook -i ansible/inventory.ini ansible/playbooks/verify/04-01.yml -e nodejs_demo_manifest=04-03-nodejs-demo.yaml |
若你更喜欢命令行换镜像,文末也给了 kubectl set image,可不改仓库清单。
场景说明(白话)
- 换镜像版本:就像本地
docker pull node:18.20-alpine,K8s 里改image:一行即可;写死版本号比总写latest更容易排查「昨天还能跑今天不行」。 - 何时拉镜像(imagePullPolicy):节点上还没有这个镜像时肯定要拉;若 CI 总往同一个 tag 里覆盖推送,一般要
Always,否则会用到旧层。 - 改启动命令:镜像自带的入口不满足时,用
command/args告诉 K8s「用哪条命令起 Node」;和 Docker 里覆盖ENTRYPOINT/CMD一个意思。 - NODE_OPTIONS 等:适合放在环境变量里,见
04-04-nodejs-环境变量与配置注入.md。
相对 04-02 的变更(原文 → 新文)
| 位置 | 原文(04-02) |
新文(04-03) |
|---|---|---|
containers[].image |
node:18-alpine |
node:18.20-alpine |
containers[].imagePullPolicy |
(默认) | IfNotPresent |
containers[].command / args |
单行 ["node","-e","...listen(8080)"] |
command: ["node"] + args 两段,listen(8080),res.end('Hello from pinned image') |
应用:
kubectl apply -f ansible/files/04-03/04-03-nodejs-demo.yaml
# 或仅打补丁(示意)
kubectl set image deployment/nodejs-demo nodejs-demo=node:18.20-alpine -n default
验证
kubectl describe pod -l app=nodejs-demo -n default | sed -n '/Image:/,/Port:/p'
kubectl get pod -l app=nodejs-demo -n default
curl -s --max-time 3 http://<节点IP>/node/
预期:Pod 为 Running;响应体与当前 command/args 一致。
删除 / 回滚
kubectl rollout undo deployment/nodejs-demo -n default
# 或恢复 04-01 原始 YAML 后 kubectl apply -f nodejs-demo.yaml
失败排查
- ImagePullBackOff:镜像名/tag 错误、私有仓库未配置
imagePullSecrets、节点无法访问 registry。 - 统一网络与策略:
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。