执行到有状态集中的 CrashLoopBackoff 容器

ken*_*tor 1 kubernetes

用例

我正在运行一个有 3 个 Pod 的有状态集(数据库)。其中一个 Pod 不断崩溃(CrashLoopBackoff 状态),因为附加的持久卷中存在一些损坏的文件,我需要删除这些文件。但是,我无法执行此 pod,因为它在检测到这些损坏的文件后不断崩溃。

我知道我可以使用类似此命令的命令来防止重新启动['sh', '-c', 'echo The app is running! && sleep 36000'],但是我无法编辑我的有状态集,因为这会导致滚动更新。

问题

如何在有状态集中执行不断崩溃的 pod,而不影响其他正在运行的 pod?

ken*_*tor 5

没有简单的方法可以将单个特定 Pod 作为有状态集的一部分进行修改,而不影响有状态集的所有其他 Pod。如果单个 Pod 陷入 CrashLoopBackoff,重启时间将定期增加。

由于目标是修改附加持久卷上的一些文件,我们可以简单地启动一个附加到持久卷的完全不同的 pod。因为同一时间只能将一个 pod 附加到同一个持久卷,所以我们现在可以修改所有文件,并且一旦 pod 再次关闭,PVC 就可供有状态集中的 pod 使用。

另一个想法是暂时修改 statefulset 并在我们休眠一段时间的地方添加预停止钩子,以便您有机会在 pod 实际被杀死之前执行它。