Files
Deploy-Laboratory/docs/04-11-nodejs-副本与滚动发布.md
2026-03-21 04:36:06 +08:00

2.4 KiB
Raw Blame History

04-11-nodejs-副本与滚动发布

调整 nodejs-demo副本数滚动更新策略,实现多实例与可控发布。

前置条件

  • 已部署 nodejs-demo04-01)。
  • 多副本时应用须 无状态 或可共享会话;否则需粘性会话/外部会话存储(本文不展开)。

清单路径(唯一真源)

| 本篇完整清单 | ansible/files/nodejs-demo/04-11-nodejs-demo.yaml | | 应用 | kubectl apply -f ansible/files/nodejs-demo/04-11-nodejs-demo.yaml |

replicasstrategyDeployment.spec 下,与 selector / template 同级。

场景说明(白话)

  • 多副本:同样应用跑多份,一台挂了别的还能接客;配合 Service 做负载均衡。
  • 滚动发布:换新版本时一个一个 Pod 换,而不是全停再起(可通过 maxSurge / maxUnavailable 调「多激进」)。

相对 04-10 的变更(原文 → 新文)

位置 原文(04-10 新文(04-11
spec.replicas 1 3
spec.strategy (默认 RollingUpdate 显式 RollingUpdatemaxSurge: 1maxUnavailable: 0

验证:

kubectl get deploy nodejs-demo -n default
kubectl get pod -l app=nodejs-demo -n default -o wide
  • maxUnavailable: 0:发布时先起新 Pod 再摘旧 Pod适合要求 不中断 的场景(需足够资源 surge
  • 资源紧张时可适当允许 maxUnavailable: 1

发布新版本

kubectl set image deployment/nodejs-demo nodejs-demo=node:20-alpine -n default
kubectl rollout status deployment/nodejs-demo -n default

回滚

kubectl rollout undo deployment/nodejs-demo -n default
kubectl rollout history deployment/nodejs-demo -n default

验证

curl -s --max-time 3 -H "Host: app.example.local" "http://<节点IP>/api/"

多次请求应看到多 Pod 分担(若 Service 为 ClusterIP + Ingress由 kube-proxy/Traefik 负载)。

失败排查

  • 一直滚动中:新 Pod 未 Ready探针、镜像拉取kubectl describe deploy / kubectl get rs
  • 会话漂移:多副本下登录态不一致为应用架构问题。
  • 06-01-k3s-networkpolicy-故障排查.md

相关文档