随笔 - 365  文章 - 0  评论 - 5  阅读 - 5723

K8S控制器ReplicaSet和Deployment选型区别

K8S实战解析:ReplicaSet和Deployment到底该用谁?

在生产环境中,Kubernetes的副本管理和滚动更新是运维人员最常接触的核心功能。很多刚入门的同学容易混淆ReplicaSetDeployment,甚至直接操作ReplicaSet导致部署隐患。本文用实际案例+踩坑经验,说透两者的区别和选型原则。


一、ReplicaSet:最基础的副本管家

核心职责:确保指定数量的Pod副本永远在线
比如你定义replicas:3,那么无论节点故障还是手动误删Pod,ReplicaSet都会立刻拉起新Pod补足3个实例。

生产局限性

  1. 不支持滚动更新:直接修改ReplicaSet的镜像版本,会导致所有Pod同时重启,服务可能中断。
  2. 没有回滚能力:一旦更新出错,只能手动恢复旧配置。
  3. 标签选择器固定:旧版K8S中,ReplicaSet的标签匹配规则较为死板。

适用场景

  • 临时测试环境中的简单副本控制
  • 作为Deployment的底层组件(通常无需手动操作)

二、Deployment:生产级部署神器

核心价值:在ReplicaSet的基础上,增加了滚动更新版本回滚两大核心能力,成为生产环境的标配。

关键特性

  1. 无感知滚动更新
    假设将镜像从v1.0升级到v2.0,Deployment会逐步创建新Pod(v2.0)并替换旧Pod(v1.0),确保服务始终可用。

    # 触发滚动更新(修改spec.template中的镜像)
    kubectl set image deployment/my-app my-container=my-image:v2.0
    
  2. 一键回滚历史版本
    如果新版本出现故障,快速回退到上一个稳定版本:

    kubectl rollout undo deployment/my-app
    
  3. 多版本快照管理
    通过kubectl rollout history可查看所有修订记录,并指定回滚到任意版本。

生产最佳实践

  • 永远通过Deployment管理Pod,而非直接操作ReplicaSet
  • 在Deployment中配置readinessProbelivenessProbe,确保滚动更新的安全性
  • 使用strategy字段定义更新策略(默认RollingUpdate,也可设为Recreate)
    spec:
      strategy:
        type: RollingUpdate
        rollingUpdate:
          maxSurge: 1        # 最大临时副本数
          maxUnavailable: 0  # 更新期间保证至少N个Pod可用
    

三、核心区别对照表

特性 ReplicaSet Deployment
副本维护 ✔️ ✔️(通过ReplicaSet)
滚动更新 ✔️
版本回滚 ✔️
生产推荐度 不推荐 强制使用
配置复杂度

四、底层原理揭秘

当创建一个Deployment时,K8S会自动生成ReplicaSet(名称带哈希值)。每次更新会创建新的ReplicaSet,旧版仍保留以便回滚。例如:

# 查看Deployment关联的ReplicaSet
kubectl get rs -l app=my-app

输出示例:

NAME                           DESIRED   CURRENT
my-app-5d5d645d69             3         3   # v1.0版本
my-app-7c6bcdb7c8             0         0   # v2.0版本(已回滚)

五、该用哪个?一句话总结

99%的场景用Deployment!除非你故意需要一次性替换所有Pod,否则ReplicaSet不应出现在生产配置中。Deployment通过抽象底层逻辑,让应用发布更安全、运维更高效。

参考资料:

posted on   Leo-Yide  阅读(3)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示