假设我定义了一个pod,它只运行几段代码,然后退出。在允许其他pod运行之前,我需要确保此pod退出。实现这一点的最佳方式是什么?
我过去常常通过执行网络请求来检查pod是否准备好了,例如,一旦准备就绪,一些webapps pod就会阻塞并侦听预定义的端口,因此我可以让等待pod对它们执行netcat请求。但在这种特定情况下,pod不需要打开任何端口,因此此方法不起作用。有没有人能推荐一种替代方案?
谢谢
发布于 2019-03-15 04:13:55
如果“代码片段”需要在每次pod启动/重启时运行,您可能正在寻找一个Init Container实现:
初始化容器是在应用程序容器之前运行的专用容器,可以包含应用程序映像中不存在的实用程序或安装脚本。
如果您的代码是多个pods的依赖项,并且需要运行一次(例如,在每次新部署时),您可以考虑使用Job Controller,并在部署新pods/容器之前实现一个逻辑来检查它是否完成。(您可以在部署脚本上使用像kubectl wait --for=condition=complete job/myjob
这样的命令)。
如果您使用helm进行部署,最好的选择是结合使用k8s job、pre-install
和pre-upgrade
helm hooks。
https://stackoverflow.com/questions/55166112
复制相似问题