1
junnplus 2022-05-29 23:49:00 +08:00
本质区别就是一个是无状态应用(大多数 http 服务),一个是有状态应用(像数据库服务)
|
2
bt7vip 2022-05-30 00:04:03 +08:00 via Android
deployment 随时销毁随时重建,不保存数据。
statefulset 可将产生的数据保存到指定位置。 有位 v2 老哥的上手教程里有讲到。 |
3
arischow 2022-05-30 00:30:10 +08:00 via iPhone
简单来讲,deployment 相对于 statefulset ,它是 stateless (无状态的),如绝大部分 web 服务容器
statefulset 则是有可能会应用于数据库等服务 |
4
lhx2008 2022-05-30 00:45:24 +08:00 5
statefulset 的比 deployment 多了两个状态,他其实是数据库等需要写入持久化数据应用对传统 VM 的一个抽象。一个是拓扑状态,也可以理解为有个固定的主机名或者 IP ,抽象来说就是 -1 -2 -3 这样,可以代表三个不同的有状态节点,他们之间可以通过这个序号互相访问,也可以有启动顺序。一个是存储状态,每个副本可以通过 pvcTemplate 来创建一个对应的 PVC ,这个 PVC 是跟 pod 的 -1 -2 -3 对应的,这样我们删掉 -1 的时候,sts 会重建一个 -1 ,并且确保还是 -1 之前写入的数据。
|
5
dreamusername 2022-05-30 08:59:17 +08:00
从使用场景上入手就比较容易理解了。
你需要 Pod 重启后,Pod 名与 Pod 的存储与重启前是一致的,选择 statefulset 。 |
6
lizuoqiang 2022-05-30 14:29:50 +08:00
StatefulSet 是用来管理有状态的应用,例如数据库。
Deployment 不需要存储数据,不需要记住状态的,可以随意扩充副本,每个副本都是一样的,可替代的。 而像数据库、Redis 这类有状态的,则不能随意扩充副本。 StatefulSet 会固定每个 Pod 的名字 之前有个老哥发的教程: https://k8s.easydoc.net/docs/dRiQjyTY/28366845/6GiNOzyZ/9EX8Cp45 |