如何在 pod 重新启动时保持变量值?

How to keep a variable value across pod restarts?

我正在尝试构建一个将某些 Kubernetes 资源的规范存储在变量中的应用程序。

然后它会休眠一段预定义的时间,比如 7 天,然后应用程序再次运行,并将相同资源的规格 现在 与规格 之前存储在一个变量中。

问题是:

  1. 如果应用程序 pod 由于任何原因重新启动,例如节点轮换,它将丢失其存储的规范并且无法比较它们。

  2. 如何确保应用程序 return 回到它死时的确切位置?例如,如果应用程序的 pod 在 sleep 函数期间死机了怎么办?

我听说 StatefulSet 是答案,但这是否保证问题 2 不会发生?

Pods 存储持久数据应该使用Volumes。如果每个 Pod 都需要自己的卷,那么 StatefulSets 是正确的选择,因为 K8s 会在重启后负责重新附加 Pods 到它们的卷。

Pods 在 K8s 中不会在它们停止的地方本地恢复,因为 Pod 重启会触发原始应用程序进程的终止。不支持暂停进程。因此,您需要在应用程序代码中处理此类行为。

需要有关您的案例的更多详细信息,但通常 k8s 不用于管理 pod 的内部状态,因为它具有“休眠”功能。

您可能需要考虑 https://github.com/spf13/viper#remote-keyvalue-store-example---unencrypted

中列出的方法

例如利用 consul、etcd、firestore 等

一般来说,无论您是要使用“远程配置”还是 k8s 卷方法,您都需要了解如何在应用程序级别维护状态。