如何保持跨pod重启变量值?



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

然后休眠一段预定义的时间,比如7天,然后应用程序再次运行,并比较相同资源的规格现在到先前存储的规格

问题是:

  1. 如果应用程序pod因任何原因重启,如节点旋转,它将丢失其存储的规格,并且无法对它们进行比较。

  2. 如何确保应用程序将返回到它死亡时的确切点?例如,如果应用程序的pod恰好在睡眠期间死亡,该怎么办?函数?

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

存储持久数据的pod应该使用volume。如果每个Pod都需要自己的卷,那么StatefulSets是正确的选择,因为k8会在重新启动后将Pods重新连接到它们的卷上。

k8中的Pod将不会本地恢复到它们停止的位置,因为Pod重新启动会触发原始应用程序进程的终止。不支持暂停进程。因此,您需要在应用程序代码中处理这种行为。

将需要更多关于您的案例的细节,但通常k8s不是用于管理pod的内部状态,因为它具有"休眠"的能力。

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

中列出的方法例如,通过利用consul、etcd、firestore等

一般来说,不管你是否要使用"远程配置",你都需要考虑如何在应用程序级别维护状态。或k8s容积法

最新更新