如何查找更新部署是否在 kubernetes 中成功完成?
How to find whether update deployment successfully completed in kubernetes?
我正在使用 kubernetes api 在节点中部署部署。当我更新部署图像时,我得到了 200 状态。但是图像名称错误,因此部署更新因 errImagePull 错误而停止。 kubernetes有错误回调机制还是需要手动调试?
在大多数情况下,您必须手动调试它,而事情 运行 是异步的;但你有几件事可以看。
A Deployment's status
field has data about how many pods it controls are in what state. The easy thing to check is that all of the replica counts match up, though this isn't 100%. The slightly trickier thing to check is the deployment status;该文档中列出了一些状态组合。
您可以做的另一件事是获取部署的 pod 选择器,然后 list (or, better for this case, watch) 匹配它的 pods。在您的特定情况下,如果任何 pods 处于 ErrImagePull
状态,则这是一个明显的错误信号。
这里的一个含糊之处以及导致解决方案不明确的原因是 CrashLoopBackOff
状态。假设您正在启动一个应用程序容器和一个数据库容器。应用程序容器在启动时尝试连接到数据库,如果失败,则立即退出。还说数据库需要 60-120 秒才能启动。 Kubernetes 将同时启动两者。由于数据库还没有准备好,应用程序将退出;重试几次后,pod 进入 CrashLoopBackOff
这是正常的 。数据库启动后,应用程序也会启动成功。
我认为没有什么好的方法可以区分 "a dependency isn't ready yet"、"a dependency will never be ready because of a misconfiguration" 和 "the code is just buggy" 的不同 CrashLoopBackOff
状态。当我在使用启发式方法(如超时)之前完成此操作时,如果 5 分钟内没有取得任何进展并且部署尚未 100% 准备就绪,那么它一定失败了。不过,这有点令人不满意。
我正在使用 kubernetes api 在节点中部署部署。当我更新部署图像时,我得到了 200 状态。但是图像名称错误,因此部署更新因 errImagePull 错误而停止。 kubernetes有错误回调机制还是需要手动调试?
在大多数情况下,您必须手动调试它,而事情 运行 是异步的;但你有几件事可以看。
A Deployment's status
field has data about how many pods it controls are in what state. The easy thing to check is that all of the replica counts match up, though this isn't 100%. The slightly trickier thing to check is the deployment status;该文档中列出了一些状态组合。
您可以做的另一件事是获取部署的 pod 选择器,然后 list (or, better for this case, watch) 匹配它的 pods。在您的特定情况下,如果任何 pods 处于 ErrImagePull
状态,则这是一个明显的错误信号。
这里的一个含糊之处以及导致解决方案不明确的原因是 CrashLoopBackOff
状态。假设您正在启动一个应用程序容器和一个数据库容器。应用程序容器在启动时尝试连接到数据库,如果失败,则立即退出。还说数据库需要 60-120 秒才能启动。 Kubernetes 将同时启动两者。由于数据库还没有准备好,应用程序将退出;重试几次后,pod 进入 CrashLoopBackOff
这是正常的 。数据库启动后,应用程序也会启动成功。
我认为没有什么好的方法可以区分 "a dependency isn't ready yet"、"a dependency will never be ready because of a misconfiguration" 和 "the code is just buggy" 的不同 CrashLoopBackOff
状态。当我在使用启发式方法(如超时)之前完成此操作时,如果 5 分钟内没有取得任何进展并且部署尚未 100% 准备就绪,那么它一定失败了。不过,这有点令人不满意。