V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
kangmf
V2EX  ›  Kubernetes

有谁知道 k8s 里 deployment 和 statefulset 有什么本质区别?看网上回答都感觉好模糊。

  •  
  •   kangmf · 76 天前 · 1623 次点击
    这是一个创建于 76 天前的主题,其中的信息可能已经有所发展或是发生改变。
    第 1 条附言  ·  75 天前
    感谢老哥们细心的回复和提供的教程,已经对这两个比较清晰的认识了,特别 statfulset headless service 这一块,以及按顺序创建,按倒序销毁副本的过程,通过声明 pvc ,sc,pv,生成卷,对 statfulset 里的 pod 进行持久化等
    6 条回复    2022-05-30 14:29:50 +08:00
    junnplus
        1
    junnplus  
       76 天前
    本质区别就是一个是无状态应用(大多数 http 服务),一个是有状态应用(像数据库服务)
    bt7vip
        2
    bt7vip  
       75 天前 via Android
    deployment 随时销毁随时重建,不保存数据。
    statefulset 可将产生的数据保存到指定位置。
    有位 v2 老哥的上手教程里有讲到。
    arischow
        3
    arischow  
       75 天前 via iPhone
    简单来讲,deployment 相对于 statefulset ,它是 stateless (无状态的),如绝大部分 web 服务容器

    statefulset 则是有可能会应用于数据库等服务
    lhx2008
        4
    lhx2008  
       75 天前   ❤️ 4
    statefulset 的比 deployment 多了两个状态,他其实是数据库等需要写入持久化数据应用对传统 VM 的一个抽象。一个是拓扑状态,也可以理解为有个固定的主机名或者 IP ,抽象来说就是 -1 -2 -3 这样,可以代表三个不同的有状态节点,他们之间可以通过这个序号互相访问,也可以有启动顺序。一个是存储状态,每个副本可以通过 pvcTemplate 来创建一个对应的 PVC ,这个 PVC 是跟 pod 的 -1 -2 -3 对应的,这样我们删掉 -1 的时候,sts 会重建一个 -1 ,并且确保还是 -1 之前写入的数据。
    dreamusername
        5
    dreamusername  
       75 天前
    从使用场景上入手就比较容易理解了。
    你需要 Pod 重启后,Pod 名与 Pod 的存储与重启前是一致的,选择 statefulset 。
    lizuoqiang
        6
    lizuoqiang  
       75 天前
    StatefulSet 是用来管理有状态的应用,例如数据库。
    Deployment 不需要存储数据,不需要记住状态的,可以随意扩充副本,每个副本都是一样的,可替代的。
    而像数据库、Redis 这类有状态的,则不能随意扩充副本。
    StatefulSet 会固定每个 Pod 的名字

    之前有个老哥发的教程: https://k8s.easydoc.net/docs/dRiQjyTY/28366845/6GiNOzyZ/9EX8Cp45
    关于   ·   帮助文档   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2264 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 15:55 · PVG 23:55 · LAX 08:55 · JFK 11:55
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.