ReplicationController(RC)操作笔记(修正与补充)
RC 是早期控制器,当前更推荐使用 Deployment/ReplicaSet;若必须用 RC,请参考本笔记的注意事项。
一、删除 RC 而不删除其 Pod
- 命令:
1 | kubectl delete rc <rc-name> --cascade=orphan |
结果:RC 会被删除,但其已创建的 Pod 会 继续运行,仅是脱离控制。
复用:后续若用 同一选择器 重建 RC(或其他控制器)且副本数与当前 Pod 数一致,可以直接接管已有 Pod(匹配选择器时会被采用;注意不同控制器的选择器/owner 关系)。
说明:–cascade 可取 background|foreground|orphan,默认 background。orphan 即孤儿化删除,仅删除上层对象,保留下游对象(此处为 Pod)。
默认删除策略:不加 –cascade 时,默认 background,会在后台清理由该对象管理的下游资源(对 RC 而言是 Pod)
二、修改 RC 配置文件后的正确流程
修改副本数(例:3 → 2):
建议使用 声明式 更新:
1 |
|
控制器会缩容至 2 个副本。被删掉的是由控制器选择的多余 Pod,未承诺稳定顺序,不要依赖“随机在哪个节点”的说法。
不要用 create -f 覆盖已存在资源:create 仅用于首次创建,资源已存在会报错或不生效。更新请用 apply。
三、镜像与模板的更新注意事项
RC 不会自动“滚动更新”已有 Pod:
更新 RC 的 Pod 模板(如容器镜像)不会修改已经在跑的 Pod。
想让老 Pod 使用新镜像,有两种安全做法:
少量 Pod: 手动删除旧 Pod,让 RC 按新模板重建
kubectl delete pod
批量更新: 先将 RC 缩为 0,再扩回目标副本数
1 |
|
更推荐:把 RC 迁移为 Deployment,获得滚动发布、回滚等能力。
历史上有 kubectl rolling-update 可在 RC 之间做滚更,但该命令已淘汰;现代集群应使用 Deployment。