国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

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

Docker 容器健康檢查機(jī)制

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

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

Docker 容器健康檢查機(jī)制

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

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

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

Docker 原生健康檢查能力

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

HEALTHCHECK 指令格式:

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

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

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

HEALTHCHECK 支持下列選項(xiàng):

--interval=<間隔>:兩次健康檢查的間隔,默認(rèn)為 30 秒; --timeout=<間隔>:健康檢查命令運(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í)間,在啟動(dòng)過程中的健康檢查失效不會(huì)計(jì)入,默認(rèn) 0 秒; (從17.05)引入

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

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

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

注:

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

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

Docker 容器健康檢查機(jī)制

Docker 容器健康檢查機(jī)制

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

Docker 容器健康檢查機(jī)制

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

Docker 容器健康檢查機(jī)制

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

Docker 容器健康檢查機(jī)制

Docker 容器健康檢查機(jī)制

示例結(jié)果如下

Docker 容器健康檢查機(jī)制

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

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

注:

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

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

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

Docker 容器健康檢查機(jī)制

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

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

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

Docker 容器健康檢查機(jī)制

總結(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)置的健康檢測(cè)機(jī)制,可以非常簡(jiǎn)潔實(shí)現(xiàn)應(yīng)用可用性監(jiān)控,自動(dòng)故障處理,和零宕機(jī)更新。

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

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

標(biāo)簽: Docker
相關(guān)文章:
主站蜘蛛池模板: 亚洲天堂男人的天堂 | 波多野结衣一区二区 | 俄罗斯黄色毛片 | 啪啪一级片 | 黄色欧美视频 | 日韩一级欧美一级一级国产 | 扒开双腿猛进入喷水免费视频 | 成人欧美一区二区三区在线 | 毛片a级三毛片免费播放 | 久久精品网站免费观看调教 | 久久永久免费 | 欧美亚洲一区二区三区 | 99这里只有精品视频 | 免费成人一级片 | 日韩麻豆 | 夜色sese| 普通话对白国产精品一级毛片 | 日韩在线视频中文字幕 | 久草在线免费资源站 | a级成人高清毛片 | 午夜日韩 | 美女扒开腿让男人桶 | japanese 色系 tube日本 | fc2久久| 亚洲欧美手机在线观看 | 美女又黄又免费 | 99成人在线视频 | 最新国产成人综合在线观看 | 操碰91| fc2成年手机免费共享视频 | 久久国产成人精品 | 亚洲欧美中文在线观看4 | 国产高清在线精品二区一 | 亚洲欧美日韩天堂 | 手机在线国产精品 | 国产成人在线综合 | 亚洲乱视频| 青青青青爽视频在线播放 | 网站在线看 | 亚洲精品国产第一区第二区国 | 国产精品特黄毛片 |