我正在尝试构建一个应用程序,该应用程序将某些Kubernetes资源的规格存储在变量中。
然后休眠一段预定义的时间,比如7天,然后应用程序再次运行,并比较相同资源的规格现在到先前存储的规格
问题是:
-
如果应用程序pod因任何原因重启,如节点旋转,它将丢失其存储的规格,并且无法对它们进行比较。
-
如何确保应用程序将返回到它死亡时的确切点?例如,如果应用程序的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容积法