為什么需要健康檢查機制?
健康檢查機制是用來檢查服務(wù)的可用性,當(dāng)服務(wù)不可用時及時重啟以恢復(fù)可用性。之前的文章《Kubernetes中配置livenessProbe、readinessProbe和startupProbe》講解了Kubernetes中的各種健康檢查類型和配置方法,本篇文章講解一下docker容器的健康檢查機制。
看過上文提到的那篇文章的同學(xué)型相信肯定能理解為什么需要對服務(wù)本身做健康檢查。就以docker為例再解釋一下,Docker Daemon用來運行和管理容器,本身會監(jiān)控容器中PID為1的進程,其實在實際場景中僅監(jiān)控PID為1的進程是不夠的。例如當(dāng)容器中的服產(chǎn)生死鎖的情況,這時候服務(wù)雖然不能處理用戶請求,但是PID為1的進程依然是運行狀態(tài)。
Docker健康檢查機制
Docker健康檢查有兩種方式:
- 在Dockerfile中使用HEALTHCHECK命令配置健康檢查策略;
- 在啟動容器時(docker run 命令)配置健康檢查策略。
在Dockerfile中使用HEALTHCHECK命令配置健康檢查策略
在Dockerfile中使用HEALTHCHECK聲明健康檢查策略,容器啟動后就會自動進行健康檢查。HEALTHCHECK支持下列選項:
- --interval=<間隔時間>:兩次健康檢查的間隔時間,默認30 秒;
- --timeout=<超時時間>:健康檢查命令運行超時時間,如果超過這個時間,本次健康檢查被視為失敗,默認 30 秒;
- --retries=<重試次數(shù)>:當(dāng)連續(xù)重試指定次數(shù)后,則將容器狀態(tài)置為 unhealthy,默認 3 次。
- --start-period=<間隔>: 應(yīng)用啟動時間,不計啟動過程中的健康檢查失效情況,默認 0 秒。
使用示例如下:
from elasticsearch:latest
HEALTHCHECK --interval=5s --timeout=2s --retries=3 \
CMD curl --silent --fail localhost:9200/_cluster/health || exit 1
在Dockerfile中HEALTHCHECK最好只寫一個,如果寫了多個,只有最后一個會有效。
CMD命令返回值有三種,如下
- 0,成功;
- 1,失敗;
- 2,保留值,不要使用。
執(zhí)行docker run后容器初始狀態(tài)為starting,等待配置的interval時間后,開始執(zhí)行健康檢查。如果單次檢查返回值不是0或者檢查時間超過了timeout,本次檢查被認為失敗。如果健康檢查連續(xù)失敗次數(shù)超過了retries,狀態(tài)就會變?yōu)閡nhealthy,健康檢查結(jié)果一旦成功,容器就會被置為healthy狀態(tài)。
在啟動容器時(docker run 命令)配置健康檢查策略
示例如下,
$ docker run --rm -d \
--name=es \
--health-cmd="curl --silent --fail localhost:9200/_cluster/health || exit 1" \
--health-interval=5s \
--health-timeout=2s \
--health-retries=3 \
elasticsearch:latest
參數(shù)代表的意思和第一種方式中的相同,健康檢查命令的輸出存儲在健康狀態(tài)里,可以用docker inspect命令查看。文章來源:http://www.zghlxwxcb.cn/news/detail-431348.html
小結(jié)
本文介紹了Docker中兩種原生的健康檢查方式,使用起來非常方便。目前主流的容器編排框架也都自帶了健康健康檢查功能,這種情況下不需要使用Docker原生的健康檢查方式。文章來源地址http://www.zghlxwxcb.cn/news/detail-431348.html
到了這里,關(guān)于Docker容器原生健康檢查機制詳解的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!