[英]Kubernetes workload for stateful application but no need of persistent disk
我有一个有状态的应用程序——我将数据保存在用户的会话中(基本上是HttpSession
对象中的数据)——但我不需要将任何内容写入永久磁盘。
从我目前所读到的 - StatefulSet 工作负载适用于有状态的应用程序,但到目前为止我的理解是,即使我的应用程序是有状态的应用程序,但部署工作负载也可以满足我的要求,因为我不想向永久磁盘写入任何内容.
但是,我不确定的一点是,假设我使用部署工作负载并且我的HttpSession
object 中存在大量用户数据,现在由于某种原因 Kubernetes 重新启动了我的 Pod,那么当然所有用户 Z21D6F40CFB5119A92E742 数据都会丢失。 所以,我的问题如下:
StatefulSet 是否比部署工作负载更好地处理这种情况?
不会Deployment
和StatefulSet
都不会保留 memory 内容。 要保留 session 信息,您需要将其存储在某处。 一种常见的方法是使用Redis 。
因此,部署工作负载和 StatefulSet 工作负载之间的唯一区别在于是否存在永久性磁盘,或者在 StatefulSet 的情况下与应用程序 session 管理有关吗?
不,还有其他区别:
Running
state 之后,才会创建下一个 Pod。 此外,值得一提的是,永久性磁盘可以附加到不属于StatefulSet
的 pod。 只是将磁盘始终连接到具有一致 id 的 pod 很方便。 例如,如果您有运行复制数据库的 pod,则可以使用 StatefulSets 来确保主副本的磁盘始终连接到 pod #1。
编辑:
从文档中:
与 Deployment 类似,StatefulSet 管理基于相同容器规范的 Pod。 与 Deployment 不同,StatefulSet 为其每个 Pod 维护一个粘性标识。 这些 pod 是根据相同的规范创建的,但不可互换:每个 pod 都有一个持久标识符,它在任何重新调度时都会维护该标识符。
...
StatefulSets 对于需要以下一项或多项的应用程序很有价值。
- 稳定、唯一的网络标识符。
- 稳定、持久的存储。
- 有序、优雅的部署和扩展。
- 有序的自动滚动更新。
在上面,稳定是 Pod(重新)调度中持久性的同义词。 如果应用程序不需要任何稳定标识符或有序部署、删除或扩展,则应使用提供一组无状态副本的工作负载 object 部署应用程序。 Deployment 或 ReplicaSet 可能更适合您的无状态需求。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.