繁体   English   中英

如何使用 init 容器等到另一个 pod 开始运行?

[英]How to wait until another pod starts running using init containers?

  initContainers:
  - name: init-myservice
    image: busybox:1.28
    command: ['sh', '-c', "until nslookup myservice; do echo waiting for myservice; sleep 2; done"]

我正在使用 nslookup 等到另一个服务出现。 但是,这并不能解决我的问题。 由于服务将出现,但相应的应用程序 - pod 可能尚未准备好。 在这种情况下,服务依赖将不会被处理。

如何确保一个 app1 在启动 app2 之前正在运行?

过去我在使用 docker-compose 时遇到过类似的问题。 我用来解决它们的方法有两种。 他们都假设服务将公开一个端口来监听。

  1. 简单易行:使用超时命令等待应用程序的特定端口启动侦听。 这与您已经在做的非常相似。 所以你的command将是这样的:
     initContainers: - name: init-myservice image: busybox:1.28 command: ['sh', '-c', "until timeout 2 bash -c \"</dev/tcp/myservice/${MY_SERVICE_TCP_PORT}\"; do echo waiting for myservice; sleep 2; done"]
  2. 多才多艺但有额外的依赖:使用美妙的dockerize工具。 一个轻量级的二进制文件,将控制容器之间的依赖关系。 它还做许多其他事情,比如从日志文件控制日志,或执行配置模板。 唯一的缺点是您在容器中引入了新的依赖项,但在我看来这是完全值得的。 在这种情况下,您可以执行 tcp 和 http 检查服务的活动性,甚至在 http 中引入标头(对于经过身份验证的端点非常有用)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM