簡體   English   中英

Google Cloud Run 在 Healthcheck 健康之前啟動容器

[英]Google Cloud Run Starts Container Before Healthcheck is Healthy

我有一個啟動時間相對較長的圖像,約為 5 秒。 換句話說,Flask 服務器已啟動並正在運行,但我將一些數據加載到全局變量中,因此此時服務器並未真正運行。 如果我在此期間 ping 我的 Google Cloud Run 端點,連接將超時

upstream request timeout

為避免這種情況,我添加了一個 docker 健康檢查,它調用我的服務器中的一個端點。 這個 http 請求的超時時間為 2 秒。 如果超時,則意味着服務器仍在加載這些全局文件,端點尚未准備好接收請求。 這在開發中運行良好,但在 Cloud Run 中卻不行。 Cloud Run 在完成加載之前開始向我的服務器提供流量 - 隨后,在容器 HEALTHCHECK 狀態實際上是“健康”之前。

我的問題

如何延遲 Cloud Run 將流量傳輸到我的容器,直到它完全設置好?

編輯 > 回答

在我的例子中(使用 Python + Gunicorn)我能夠使用“應用程序工廠”模式解決這個問題。 也就是說,啟動 Gunicorn

$ gunicorn 'test:create_app()'

其中 function create_app()返回 Flask 應用程序。

我對這為何有效的假設是因為在 function 返回之前,Gunicorn 尚未偵聽它綁定的端口,並且 Cloud Run 不會開始將流量驅動到您的新運行容器,直到這種情況發生。

rodrigo-silveira 的解決方案:

就我而言(使用 Python + Gunicorn)我能夠使用“應用程序工廠”模式解決這個問題。 也就是說,啟動 Gunicorn

$ gunicorn 'test:create_app()' 其中 function create_app() 返回 Flask 應用程序。

我關於為什么會這樣的假設是因為在 function 返回之前,Gunicorn 尚未偵聽它綁定到的端口,並且 Cloud Run 不會開始將流量引導到您正在運行的新容器,直到出現這種情況。

注意 CloudRun 現在支持活性和啟動探測。
https://cloud.google.com/run/docs/configuring/healthchecks

得知 CR 過去不支持標准的 Kube.netes 探針,我感到非常驚訝,但最近更新后似乎是這樣。 不確定它是何時發生的,但在這篇文章發布時(2022 年 10 月 3 日)CloudRun 運行狀況檢查被認為處於“預覽”狀態。 就緒探針仍然不是問題,但現在允許啟動探針,因此現在可以用標准啟動探針取代原來很酷的 hack 解決方案。

以下是如何實施/測試啟動探針的演練: https://stackoverflow.com/a/73942357/2548914

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM