比方说,我定义了一个仅运行一些代码并随后退出的pod。我需要确保此Pod退出后才能运行其他Pod。实现此目的的最佳方法是什么?
我过去经常通过执行网络请求来检查Pod是否就绪。一旦准备好,一些webapps pod就会阻塞并监听预定义的端口,因此我可以让等待的pod对它们执行netcat请求。但是在这种特殊情况下,吊舱不需要打开任何端口,因此该方法不起作用。谁能建议一个替代方案?
谢谢
答案 0 :(得分:1)
如果需要在每个pod启动/重新启动中运行“代码段”,则您可能正在寻找Init Container实现:
初始化容器是在应用程序之前运行的专用容器 容器,可以包含不存在的实用程序或安装脚本 应用图片。
如果您的代码是多个Pod的依赖项,并且需要运行一次(例如,在每次新部署中),则可以考虑使用Job Controller,并在部署新的代码之前实现检查其是否已完成的逻辑吊舱/容器。
(您可以在部署脚本上使用诸如kubectl wait --for=condition=complete job/myjob
之类的命令)。
如果要使用头盔进行部署,最好的选择是将k8s作业与pre-install
和pre-upgrade
helm hooks结合使用。