簡體   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