Kubernetes - 如果容器无法重新触发初始化容器,则强制重启Pod

5
我在我的Pod中发现,如果容器由于存活探针失败而失败或被杀死,则容器会重新启动,但Pod不会重新启动。
这意味着,在容器崩溃的情况下,initContainers不会再次运行。
在我的情况下,每当主容器失败时,我确实需要运行其中一个initContainers。
这是否可能?我有什么遗漏吗?

你曾经找到过一个创造性的解决方案吗?我遇到了类似的情况,我使用一个 initContainer 来获取一个 oAuth 令牌,但如果主容器失败,k8s 将一直重试,直到 oAuth 令牌过期,此时主容器肯定会失败。因此,我希望能重新启动整个 Pod。但是我还没有找到一个创造性的答案。 - Eric B.
你有没有找到一个创造性的解决方案?我遇到了一个类似的情况,我使用一个initContainer来获取oAuth令牌,但是如果主容器失败,k8s会一直重试直到oAuth令牌过期,此时主容器肯定会失败。所以我想重新启动整个pod。但是我还没有找到一个创造性的答案。 - undefined
你有两个选择,我认为:(1)使用边车容器,但这意味着要一直保持一个完整的容器运行,且很难丢弃数据。(2)使用preStart钩子来“做魔法”,但需要编写一段良好的代码来清理。根据你的需求而定。 - Eldad Assis
根据我的看法,你有两个选择。(1) 使用一个附加容器,但这意味着要保持整个容器运行,而且很难丢弃数据。(2) 使用preStart钩子来“做魔法”,但需要编写一段良好的代码来清理它。根据你的需求来决定。 - undefined
1个回答

4
目前,不支持以下内容:livenessProbe“容器级”探针,如果该探针失败,只会重新启动该容器,而不是整个Pod。
但是,您会很高兴地知道,这种行为目前正在此PR上实现:https://github.com/kubernetes/community/pull/2342
在完成更新之前,可以通过重新考虑为什么需要initContainers以及根据您的用例通过共享卷或其他场景中的Pod容器之间的不同协调来解决问题。

如果您需要在容器重新启动时运行特定命令,则可以使用postStart命令来处理。 - Jainish Shah
我明白。我认为我的需求是有效的。我想在我的 initContainer 中创建一些临时的东西,这些东西被主容器使用并且被丢弃。但如果主容器失败(重新启动),则必须重复执行。使用 side car 容器似乎不可能实现这一点... - Eldad Assis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接