0

我建立了一個docker swarm模式羣集,有兩個管理員和一個worker。這是在Centos 7上。它們在機器dkr1,dkr2,dkr3上。 dkr3是工人。Docker羣集模式負載均衡

我前幾天升級到v1.13,並希望零宕機。但它沒有像預期的那樣工作。我試圖找出正確的方法來做到這一點,因爲這是擁有集羣的主要目標之一。

羣體處於'全局'模式。也就是說,每臺機器一個副本。我的升級方法是消耗節點,停止守護進程,yum升級,啓動守護進程。 (請注意,這消滅了我的守護程序配置設置ExecStart = ...!,如果你仔細升級。

我們的客戶/ ESB命中dkr2一提,其負載均衡魔術在羣。 dkr2是領導者。 dkr1'可到達'

我放下了dkr3。沒有問題。升級碼頭。帶回了它。沒有停下來打倒工人。

帶入dkr1。起初沒有問題。當我把它放下時仍然在工作。升級碼頭。帶回了它。 但在啓動期間,它404'ed。一旦起來,這是確定的。

帶來了dkr2。我沒有真正記錄那時發生了什麼,對不起。

無論如何,當我的應用程序在dkr1上啓動時,它已經404'ed,因爲服務器尚未啓動。

任何想法我可能做錯了什麼?我想我需要進行某種健康檢查,因爲容器顯然是好的,但服務器還沒有響應。那就是當我停工的時候。

回答

1

你是對的 - 你需要指定一個運行狀況檢查,以便在容器內運行你的應用程序,以確保它已準備就緒。在這個healtcheck通過之前,你的容器將不會收到流量。

簡單的捲曲到端點應該就足夠了。使用Dockerfile中的Healthcheck標誌指定要執行的健康檢查。

在Dockerfile健康檢查線的一個例子,以檢查是否有終端返回200 OK是: HEALTHCHECK CMD curl -f 'http://localhost:8443/somepath' || exit 1

如果您不能修改Dockerfile,那麼你也可以手動在部署時註明您的健康檢查使用compose file healthcheck format

如果這也是不可能的,並且您需要更新正在運行的服務,則可以執行service update並使用health標誌的組合來指定您的健康檢查。