9.4 优雅发布:Pod 资源原地更新原理与生产实践
1. 引言:传统更新的痛点
在 Kubernetes 中,更新 Pod 的资源配额(如 CPU、Memory)通常需要:
- 修改 Deployment 的
resources - 删除旧 Pod
- 创建新 Pod
- 新 Pod 通过 Readiness Probe 后接收流量
这个过程叫Recreate(重建)。
问题:
- 服务中断:删除 Pod 到新 Pod 就绪之间有间隙
- 数据丢失:如果 Pod 有本地状态,会丢失
- 启动慢:新 Pod 需要重新初始化(如连接池、缓存)
解决方案:原地更新(In-Place Update)。
2. 原地更新的原理
2.1 什么是原地更新?
原地更新是指:在不删除 Pod 的情况下,直接修改 Pod 的资源配额。
传统方式:
Pod A (CPU: 500m) -> 删除 -> Pod B (CPU: 1000m)原地更新:
Pod A (CPU: 500m) -> 直接修改 -> Pod A (CPU: 1000m)2.2 技术实现
Kubernetes 1.27+ 支持Pod 原地更新,通过kubectl patch或更新 Deployment 的resources,Kubelet 会:
- 更新 Cgroup 的资源限制
- 不重启容器
- 不中断服务
3. 实战:原地更新资源配额
3.1 初始状态
apiVersion:apps/v1kind:Deploymentmetadata: