繁体   English   中英

Kubernetes 有状态应用程序的工作负载,但不需要永久磁盘

[英]Kubernetes workload for stateful application but no need of persistent disk

我有一个有状态的应用程序——我将数据保存在用户的会话中(基本上是HttpSession对象中的数据)——但我不需要将任何内容写入永久磁盘。

从我目前所读到的 - StatefulSet 工作负载适用于有状态的应用程序,但到目前为止我的理解是,即使我的应用程序是有状态的应用程序,但部署工作负载也可以满足我的要求,因为我不想向永久磁盘写入任何内容.

但是,我不确定的一点是,假设我使用部署工作负载并且我的HttpSession object 中存在大量用户数据,现在由于某种原因 Kubernetes 重新启动了我的 Pod,那么当然所有用户 Z21D6F40CFB5119A92E742 数据都会丢失。 所以,我的问题如下:

  • StatefulSet 是否比部署工作负载更好地处理这种情况?
  • 因此,部署工作负载和 StatefulSet 工作负载之间的唯一区别在于是否存在永久性磁盘,或者在 StatefulSet 的情况下与应用程序 session 管理有关吗?

StatefulSet 是否比部署工作负载更好地处理这种情况?

不会DeploymentStatefulSet都不会保留 memory 内容。 要保留 session 信息,您需要将其存储在某处。 一种常见的方法是使用Redis

因此,部署工作负载和 StatefulSet 工作负载之间的唯一区别在于是否存在永久性磁盘,或者在 StatefulSet 的情况下与应用程序 session 管理有关吗?

不,还有其他区别:

  • StatefulSets 创建(并重新创建)确定性、一致的 pod 名称(标识符)。
  • StatefulSets 以确定的、一致的顺序一一部署、扩展和更新。 只有在前一个 Pod 到达Running state 之后,才会创建下一个 Pod。

此外,值得一提的是,永久性磁盘可以附加到不属于StatefulSet的 pod。 只是将磁盘始终连接到具有一致 id 的 pod 很方便。 例如,如果您有运行复制数据库的 pod,则可以使用 StatefulSets 来确保主副本的磁盘始终连接到 pod #1。

编辑:

链接到有关 StatefulSets 的官方文档

从文档中:

与 Deployment 类似,StatefulSet 管理基于相同容器规范的 Pod。 与 Deployment 不同,StatefulSet 为其每个 Pod 维护一个粘性标识。 这些 pod 是根据相同的规范创建的,但不可互换:每个 pod 都有一个持久标识符,它在任何重新调度时都会维护该标识符。

...

StatefulSets 对于需要以下一项或多项的应用程序很有价值。

  • 稳定、唯一的网络标识符。
  • 稳定、持久的存储。
  • 有序、优雅的部署和扩展。
  • 有序的自动滚动更新。

在上面,稳定是 Pod(重新)调度中持久性的同义词。 如果应用程序不需要任何稳定标识符或有序部署、删除或扩展,则应使用提供一组无状态副本的工作负载 object 部署应用程序。 Deployment 或 ReplicaSet 可能更适合您的无状态需求。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM