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

2022-05-29 23:19:13 +08:00
 kangmf
3809 次点击
所在节点    Kubernetes
6 条回复
junnplus
2022-05-29 23:49:00 +08:00
本质区别就是一个是无状态应用(大多数 http 服务),一个是有状态应用(像数据库服务)
bt7vip
2022-05-30 00:04:03 +08:00
deployment 随时销毁随时重建,不保存数据。
statefulset 可将产生的数据保存到指定位置。
有位 v2 老哥的上手教程里有讲到。
arischow
2022-05-30 00:30:10 +08:00
简单来讲,deployment 相对于 statefulset ,它是 stateless (无状态的),如绝大部分 web 服务容器

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

之前有个老哥发的教程: https://k8s.easydoc.net/docs/dRiQjyTY/28366845/6GiNOzyZ/9EX8Cp45

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/856087

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX