Kubernetes:Deployment中为何出现多个ReplicaSet?
为什么Deployment会生成3个ReplicaSet?
这是Kubernetes Deployment的正常工作机制,核心原因如下:
- Deployment本身不直接管理Pod,它是通过ReplicaSet来管控Pod副本的。每次你修改Deployment的Pod模板(比如镜像版本、环境变量、资源限制、标签/注解等),或者触发滚动更新时,K8s会自动创建新的ReplicaSet来运行新版本的Pod,旧的ReplicaSet不会立刻被删除——默认会保留最近3个历史版本,方便你随时回滚到之前的部署状态。
- 你看到3个ReplicaSet,说明这个Deployment已经经历了两次模板变更/滚动更新:初始创建生成第一个RS,第一次更新生成第二个,第二次更新生成第三个。旧的RS副本数会被自动调整为0,但实体不会被删除,除非你手动清理或者修改保留策略。
- 注意:单纯调整副本数(
spec.replicas)不会触发新ReplicaSet的创建,只有Pod模板(spec.template)的变更才会触发。
验证方法
你可以用命令查看Deployment的版本历史,确认更新记录:
kubectl rollout history deployment/<你的Deployment名称>
或者查看每个ReplicaSet的模板哈希(不同哈希对应不同版本的Pod模板):
kubectl get rs -o custom-columns=NAME:.metadata.name,CREATED:.metadata.creationTimestamp,TEMPLATE-HASH:.metadata.labels.pod-template-hash
清理旧ReplicaSet的方式
如果不需要保留历史版本:
- 修改Deployment的
revisionHistoryLimit参数,设置要保留的历史版本数(比如设为1,仅保留当前和最近一个旧版本):spec: revisionHistoryLimit: 1 - 手动删除指定的旧ReplicaSet:
kubectl delete rs <旧ReplicaSet名称>
内容的提问来源于stack exchange,提问作者hades
相关产品推荐
相关产品推荐

