3

如果您在 StatefulSet 规范中修补镜像名称,Kubernetes StatefulSet (v1.8) 将自动将其管理的 pod 滚动到新镜像——毕竟,编排这种更新是它的主要工作之一。但是,如果在镜像拉取步骤中部署修改后的镜像失败(例如,镜像名称中有错字,所以没有要拉取的镜像),它尝试使用新镜像重新启动的第一个 pod 会卡在ImagePullBackOff 状态和翻转停止。没关系,这几乎是您想要和期望的。但是,如果您随后再次修补 StatefulSet 规范以纠正错误,则该 set 不会被修复 - 它只是处于损坏状态 - 直到您(手动)删除失败的 pod,此时一切都按原样进行一切都恢复到健康状态。

我认为应该有一种配置方法,以便在更新映像名称时自动进行这种恢复,就像正常部署一样,而不是需要手动干预(尤其是因为这是针对 CI-类型应用程序,无论如何这一切都需要自动化)。我不禁觉得我只是没有在文档中找到正确的选项,但是仔细研究文档并进行无休止的 Google 搜索并没有发现成功的秘诀。有没有办法将这种恢复配置为自动发生,如果是这样,它是什么?

如果做不到这一点,是否有一种优雅的方法可以自动检测故障状态以触发对故障 pod 的脚本删除?我尝试过的一切似乎都很笨拙,有很多轮询和临时超时,所以我很难相信这是正确的做法。

4

1 回答 1

2

我在GitHub 上提出了同样的问题。现在的答案是,不,没有选择,而且可能缺少文档。我们正在开始讨论,看看是否有任何方法可以改善这一点。目前,解决方法可能会依赖轮询和超时。但是,这首先取决于您如何部署 StatefulSet。一些部署工具(例如带有--wait选项的 Helm)可以配置为等待所有 Pod 运行。

于 2018-08-22T13:37:38.533 回答