如果你在StatefulSet规范中修改图像名称,Kubernetes StatefulSet(v1.8)将自动将它管理的pod转换为新图像 - 毕竟编排这种更新是其主要工作之一。但是,如果在图像拉出步骤中修改图像的部署失败(例如,图像名称中存在拼写错误,因此没有要拉动的图像),则尝试使用新图像重新启动的第一个窗格卡在ImagePullBackOff状态和翻转停止。没关系,这几乎是你想要和期待的。但是,如果你再次修补StatefulSet规范来纠正错误,那么集合就不会被修复 - 它只是处于破碎状态 - 直到你(手动)删除失败的pod,此时一切都按照它应该进行这一切都恢复到健康状态。
我认为应该有一种配置方式,以便在更新映像名称时自动进行这种恢复,就像正常部署一样,而不是需要手动干预(特别是因为这适用于CI类型的应用程序,无论如何都需要自动化)。我无法帮助,但感觉我只是没有在文档中找到正确的选项,但仔细阅读文档并进行无休止的Google搜索并没有显示出获胜的配方。有没有办法配置这种恢复自动发生,如果是,它是什么?
如果失败了,是否有一种优雅的方法来自动检测失败状态以触发脚本删除失败的pod? 我尝试的所有东西看起来都非常糟糕,有大量的民意调查和临时超时,所以我很难相信这是正确的方法。
答案 0 :(得分:0)
我在GitHub上也提出了同样的问题。现在的答案是,不,没有选择的余地,并且可能缺少文档。我们正在开始讨论,看是否有任何方法可以改善这一点。
目前,解决方法可能将取决于轮询和超时。但是,这取决于您首先如何部署StatefulSet。可以将某些部署工具(例如带有--wait
选项的Helm)配置为等待所有pod运行。