av一区二区在线观看_亚洲男人的天堂网站_日韩亚洲视频_在线成人免费_欧美日韩精品免费观看视频_久草视

您的位置:首頁技術(shù)文章
文章詳情頁

Docker 容器健康檢查機制

瀏覽:4日期:2024-11-22 08:54:02

摘要: 在分布式系統(tǒng)中,經(jīng)常需要利用健康檢查機制來檢查服務(wù)的可用性,防止其他服務(wù)調(diào)用時出現(xiàn)異常。自 1.12 版本之后,Docker 引入了原生的健康檢查實現(xiàn)。本文將介紹Docker容器健康檢查機制,以及在Docker Swarm mode下面的新特性

Docker 容器健康檢查機制

在分布式系統(tǒng)中,經(jīng)常需要利用健康檢查機制來檢查服務(wù)的可用性,防止其他服務(wù)調(diào)用時出現(xiàn)異常。

對于容器而言,最簡單的健康檢查是進程級的健康檢查,即檢驗進程是否存活。Docker Daemon會自動監(jiān)控容器中的PID1進程,如果docker run命令中指明了restart policy,可以根據(jù)策略自動重啟已結(jié)束的容器。在很多實際場景下,僅使用進程級健康檢查機制還遠遠不夠。比如,容器進程雖然依舊運行卻由于應(yīng)用死鎖無法繼續(xù)響應(yīng)用戶請求,這樣的問題是無法通過進程監(jiān)控發(fā)現(xiàn)的。

在Kubernetes提供了Liveness與Readness探針分別對Container及其服務(wù)健康狀態(tài)進行檢查。阿里云容器服務(wù)也提供了類似的 服務(wù)健康檢查機制 。

Docker 原生健康檢查能力

而自 1.12 版本之后,Docker 引入了原生的健康檢查實現(xiàn),可以在Dockerfile中聲明應(yīng)用自身的健康檢測配置。HEALTHCHECK 指令聲明了健康檢測命令,用這個命令來判斷容器主進程的服務(wù)狀態(tài)是否正常,從而比較真實的反應(yīng)容器實際狀態(tài)。

HEALTHCHECK 指令格式:

HEALTHCHECK [選項] CMD <命令>:設(shè)置檢查容器健康狀況的命令 HEALTHCHECK NONE:如果基礎(chǔ)鏡像有健康檢查指令,使用這行可以屏蔽掉

注:在Dockerfile中 HEALTHCHECK 只可以出現(xiàn)一次,如果寫了多個,只有最后一個生效。

使用包含 HEALTHCHECK 指令的dockerfile構(gòu)建出來的鏡像,在實例化Docker容器的時候,就具備了健康狀態(tài)檢查的功能。啟動容器后會自動進行健康檢查。

HEALTHCHECK 支持下列選項:

--interval=<間隔>:兩次健康檢查的間隔,默認為 30 秒; --timeout=<間隔>:健康檢查命令運行超時時間,如果超過這個時間,本次健康檢查就被視為失敗,默認 30 秒; --retries=<次數(shù)>:當連續(xù)失敗指定次數(shù)后,則將容器狀態(tài)視為 unhealthy,默認 3 次。 --start-period=<間隔>: 應(yīng)用的啟動的初始化時間,在啟動過程中的健康檢查失效不會計入,默認 0 秒; (從17.05)引入

在 HEALTHCHECK [選項] CMD 后面的命令,格式和 ENTRYPOINT 一樣,分為 shell 格式,和 exec 格式。命令的返回值決定了該次健康檢查的成功與否:

0:成功; 1:失敗; 2:保留值,不要使用

容器啟動之后,初始狀態(tài)會為 starting (啟動中)。Docker Engine會等待 interval 時間,開始執(zhí)行健康檢查命令,并周期性執(zhí)行。如果單次檢查返回值非0或者運行需要比指定 timeout 時間還長,則本次檢查被認為失敗。如果健康檢查連續(xù)失敗超過了 retries 重試次數(shù),狀態(tài)就會變?yōu)?unhealthy (不健康)。

注:

一旦有一次健康檢查成功,Docker會將容器置回 healthy (健康)狀態(tài) 當容器的健康狀態(tài)發(fā)生變化時,Docker Engine會發(fā)出一個 health_status 事件。

假設(shè)我們有個鏡像是個最簡單的 Web 服務(wù),我們希望增加健康檢查來判斷其 Web 服務(wù)是否在正常工作,我們可以用 curl來幫助判斷,其 Dockerfile 的 HEALTHCHECK 可以這么寫:

Docker 容器健康檢查機制

Docker 容器健康檢查機制

我們可以通過 docker ps,來發(fā)現(xiàn)過了幾秒之后,Elasticsearch容器從 starting 狀態(tài)進入了 healthy 狀態(tài)

Docker 容器健康檢查機制

另外一種方法是在 docker run 命令中,直接指明healthcheck相關(guān)策略。

Docker 容器健康檢查機制

為了幫助排障,健康檢查命令的輸出(包括 stdout 以及 stderr)都會被存儲于健康狀態(tài)里,可以用 docker inspect 來查看。我們可以通過如下命令,來獲取過去5個容器的健康檢查結(jié)果

Docker 容器健康檢查機制

Docker 容器健康檢查機制

示例結(jié)果如下

Docker 容器健康檢查機制

由于應(yīng)用的開發(fā)者會更加了解應(yīng)用的SLA,一般建議在Dockerfile中聲明相應(yīng)的健康檢查策略,這樣可以方便鏡像的使用。對于應(yīng)用的部署和運維人員,可以通過命令行參數(shù)和REST API針對部署場景對健康檢查策略按需進行調(diào)整。

Docker社區(qū)為提供了一些包含健康檢查的實例鏡像,我們可以在如下項目中獲取 https://github.com/docker-library/healthcheck

注:

阿里云容器服務(wù)同時支持Docker原生健康檢測機制和阿里云的擴展檢查機制 目前Kubernetes還不提供對Docker原生健康檢查機制的支持。 Docker Swarm mode中的服務(wù)健康檢查能力

在Docker 1.13之后,在Docker Swarm mode中提供了對健康檢查策略的支持

可以在 docker service create 命令中指明健康檢查策略

Docker 容器健康檢查機制

在Swarm模式下,Swarm manager會監(jiān)控服務(wù)task的健康狀態(tài),如果容器進入 unhealthy 狀態(tài),它會停止容器并且重新啟動一個新容器來取代它。這個過程中會自動更新服務(wù)的 load balancer (routing mesh) 后端或者 DNS記錄,可以保障服務(wù)的可用性。

在1.13版本之后,在服務(wù)更新階段也增加了對健康檢查的支持,這樣在新容器完全啟動成功并進入健康狀態(tài)之前,load balancer/DNS解析不會將請求發(fā)送給它。這樣可以保證應(yīng)用在更新過程中請求不會中斷。

下面是在服務(wù)更新過程的時序圖

Docker 容器健康檢查機制

總結(jié)

在企業(yè)生產(chǎn)環(huán)境中,合理的健康檢查設(shè)置可以保證應(yīng)用的可用性。現(xiàn)在很多應(yīng)用框架已經(jīng)內(nèi)置了監(jiān)控檢查能力,比如Spring Boot Actuator。配合Docker內(nèi)置的健康檢測機制,可以非常簡潔實現(xiàn)應(yīng)用可用性監(jiān)控,自動故障處理,和零宕機更新。

作者:易立 ,阿里資深技術(shù)專家,關(guān)注Docker,微服務(wù)、云計算、機器學(xué)習(xí)等領(lǐng)域。

來自: click.aliyun.com/m/29196/

標簽: Docker
相關(guān)文章:
主站蜘蛛池模板: 黑人精品欧美一区二区蜜桃 | 四虎伊人 | 91精品国产综合久久婷婷香蕉 | 在线一级片 | 国产成人99久久亚洲综合精品 | 久久不卡 | 国产精品视频播放 | 色网在线看 | 天天躁天天操 | 五月天国产在线 | 91资源在线 | 久久久www成人免费无遮挡大片 | 国产精品免费看 | 欧美日日| 高清免费av | 久久国产一区 | 亚洲精品免费观看 | 中文字幕精品视频 | av毛片 | 男人的天堂在线视频 | 色婷婷精品国产一区二区三区 | 国产欧美精品一区二区色综合朱莉 | 成人黄色网址大全 | 日韩欧美一区二区三区在线播放 | 精品久久一 | 精品国产99| 久久久久久久久久久久亚洲 | 国产97视频在线观看 | 国产亚洲一区二区三区在线观看 | 久久久久久九九九九九九 | 成人免费视频网站在线看 | 午夜影院在线免费观看视频 | 欧美精品久久久久 | 日韩中文字幕 | 99精品视频在线观看免费播放 | 久久综合狠狠综合久久综合88 | 久久久精 | 欧美视频区 | 精品国产99| 日韩毛片免费看 | 成年人免费网站 |