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