如何在 pod 重新启动时保持变量值?
How to keep a variable value across pod restarts?
我正在尝试构建一个将某些 Kubernetes 资源的规范存储在变量中的应用程序。
然后它会休眠一段预定义的时间,比如 7 天,然后应用程序再次运行,并将相同资源的规格 现在 与规格 之前存储在一个变量中。
问题是:
如果应用程序 pod 由于任何原因重新启动,例如节点轮换,它将丢失其存储的规范并且无法比较它们。
如何确保应用程序 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 卷方法,您都需要了解如何在应用程序级别维护状态。
我正在尝试构建一个将某些 Kubernetes 资源的规范存储在变量中的应用程序。
然后它会休眠一段预定义的时间,比如 7 天,然后应用程序再次运行,并将相同资源的规格 现在 与规格 之前存储在一个变量中。
问题是:
如果应用程序 pod 由于任何原因重新启动,例如节点轮换,它将丢失其存储的规范并且无法比较它们。
如何确保应用程序 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 卷方法,您都需要了解如何在应用程序级别维护状态。