久久福利_99r_国产日韩在线视频_直接看av的网站_中文欧美日韩_久久一

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

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

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

摘要: 在分布式系統(tǒng)中,經(jīng)常需要利用健康檢查機(jī)制來(lái)檢查服務(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ī)制來(lái)檢查服務(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)用死鎖無(wú)法繼續(xù)響應(yīng)用戶請(qǐng)求,這樣的問(wèn)題是無(wú)法通過(guò)進(jìn)程監(jiān)控發(fā)現(xiàn)的。

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

Docker 原生健康檢查能力

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

HEALTHCHECK 指令格式:

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

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

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

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

--interval=<間隔>:兩次健康檢查的間隔,默認(rèn)為 30 秒; --timeout=<間隔>:健康檢查命令運(yùn)行超時(shí)時(shí)間,如果超過(guò)這個(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)過(guò)程中的健康檢查失效不會(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í)間,開(kāi)始執(zhí)行健康檢查命令,并周期性執(zhí)行。如果單次檢查返回值非0或者運(yùn)行需要比指定 timeout 時(shí)間還長(zhǎng),則本次檢查被認(rèn)為失敗。如果健康檢查連續(xù)失敗超過(guò)了 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ù),我們希望增加健康檢查來(lái)判斷其 Web 服務(wù)是否在正常工作,我們可以用 curl來(lái)幫助判斷,其 Dockerfile 的 HEALTHCHECK 可以這么寫(xiě):

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

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

我們可以通過(guò) docker ps,來(lái)發(fā)現(xiàn)過(guò)了幾秒之后,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 來(lái)查看。我們可以通過(guò)如下命令,來(lái)獲取過(guò)去5個(gè)容器的健康檢查結(jié)果

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

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

示例結(jié)果如下

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

由于應(yīng)用的開(kāi)發(fā)者會(huì)更加了解應(yīng)用的SLA,一般建議在Dockerfile中聲明相應(yīng)的健康檢查策略,這樣可以方便鏡像的使用。對(duì)于應(yīng)用的部署和運(yùn)維人員,可以通過(guò)命令行參數(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è)新容器來(lái)取代它。這個(gè)過(guò)程中會(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)用在更新過(guò)程中請(qǐng)求不會(huì)中斷。

下面是在服務(wù)更新過(guò)程的時(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)域。

來(lái)自: click.aliyun.com/m/29196/

標(biāo)簽: Docker
相關(guān)文章:
主站蜘蛛池模板: 久久精品欧美一区二区三区麻豆 | 日韩一区二区三区在线 | 亚洲成av人片一区二区三区 | 午夜精品久久久久久久男人的天堂 | 日日操av| 国产亚洲精品美女久久久久久久久久 | 麻豆国产免费 | 久久久999精品视频 99国产精品久久久久久久 | 在线天堂视频 | 久久精品成人免费视频 | 久久久夜夜夜 | av免费网站在线观看 | 日本在线观看网站 | 国产精品无码永久免费888 | 国产欧美精品一区二区三区四区 | caoporn国产精品免费公开 | 久热中文字幕 | 亚洲精品福利在线观看 | 亚洲精品视频网 | 精品免费视频 | 国产电影一区二区 | 无毒黄网 | 91视频观看| 久久久久中文字幕 | 亚洲最黄网站 | 午夜精品久久久久久久久 | 久久综合久久久 | 一区二区三区免费 | 伊人久操 | 国产精品国产精品国产专区不片 | 久草 在线 | 国产高清不卡在线 | 97伦理在线 | 欧美日韩一区二区三区在线观看 | 三级欧美在线观看 | 91色在线| 日韩在线欧美 | www久 | 日韩大片免费播放 | 在线观看亚洲一区 | 亚洲a网|