為什么需要健康檢查機制?
健康檢查機制是用來檢查服務的可用性,當服務不可用時及時重啟以恢復可用性。之前的文章《Kubernetes中配置livenessProbe、readinessProbe和startupProbe》講解了Kubernetes中的各種健康檢查類型和配置方法,本篇文章講解一下docker容器的健康檢查機制。
看過上文提到的那篇文章的同學型相信肯定能理解為什么需要對服務本身做健康檢查。就以docker為例再解釋一下,Docker Daemon用來運行和管理容器,本身會監控容器中PID為1的進程,其實在實際場景中僅監控PID為1的進程是不夠的。例如當容器中的服產生死鎖的情況,這時候服務雖然不能處理用戶請求,但是PID為1的進程依然是運行狀態。
Docker健康檢查機制
Docker健康檢查有兩種方式:
- 在Dockerfile中使用HEALTHCHECK命令配置健康檢查策略;
- 在啟動容器時(docker run 命令)配置健康檢查策略。
在Dockerfile中使用HEALTHCHECK命令配置健康檢查策略
在Dockerfile中使用HEALTHCHECK聲明健康檢查策略,容器啟動后就會自動進行健康檢查。HEALTHCHECK支持下列選項:
- --interval=<間隔時間>:兩次健康檢查的間隔時間,默認30 秒;
- --timeout=<超時時間>:健康檢查命令運行超時時間,如果超過這個時間,本次健康檢查被視為失敗,默認 30 秒;
- --retries=<重試次數>:當連續重試指定次數后,則將容器狀態置為 unhealthy,默認 3 次。
- --start-period=<間隔>: 應用啟動時間,不計啟動過程中的健康檢查失效情況,默認 0 秒。
使用示例如下: