溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

如何在Kubernetes中配置健康檢查

發(fā)布時(shí)間:2021-11-09 16:57:10 來(lái)源:億速云 閱讀:151 作者:柒染 欄目:云計(jì)算

本篇文章為大家展示了如何在Kubernetes中配置健康檢查,內(nèi)容簡(jiǎn)明扼要并且容易理解,絕對(duì)能使你眼前一亮,通過這篇文章的詳細(xì)介紹希望你能有所收獲。

若您的應(yīng)用程序是面向用戶的,那么確保持續(xù)可用性、盡力達(dá)到最短停機(jī)時(shí)間,是一項(xiàng)無(wú)比重要卻也不易的挑戰(zhàn)。因此,想要避免任何中斷,良好地監(jiān)控應(yīng)用程序的運(yùn)行狀況,在此顯得至關(guān)重要。

Rancher 1.6中的健康檢查

Rancher 1.6中的編排引擎Cattle,具有為部署好的服務(wù)添加HTTP或TCP健康檢查的功能。Rancher自己的健康檢查微服務(wù)提供了健康檢查支持。你可以在這此了解更多信息:

https://rancher.com/docs/rancher/v1.6/en/cattle/health-checks/

簡(jiǎn)單來(lái)說,Cattle用戶可以向服務(wù)添加TCP健康檢查。Rancher的健康檢查容器會(huì)在不同的主機(jī)上啟動(dòng),它們會(huì)測(cè)試TCP連接是否在服務(wù)容器的指定端口打開。請(qǐng)注意,對(duì)于最新版本(v1.6.20),健康檢查容器也與服務(wù)容器安排在同一主機(jī)上。

在部署服務(wù)時(shí),也可以添加HTTP健康檢查。您可以要求Rancher在指定路徑上發(fā)出HTTP請(qǐng)求,并指定預(yù)期的響應(yīng)。

這些健康檢查會(huì)定期完成,您可以自行配置檢查的間隔周期,重試/超時(shí)也是可配置的。如果健康檢查失敗,您還可以指示Rancher是否以及何時(shí)重新創(chuàng)建容器。

例如,在Cattle上運(yùn)行Nginx鏡像的服務(wù),并使用如下配置進(jìn)行HTTP健康檢查:

如何在Kubernetes中配置健康檢查

健康檢查的參數(shù)顯示在rancher-compose.yml文件中,而不是docker-compose.yml,因?yàn)榻】禉z查功能是由Rancher實(shí)現(xiàn)的。

如何在Kubernetes中配置健康檢查

下面讓我們來(lái)看看我們是否可以在Rancher 2.0中配置相應(yīng)的健康檢查。

Rancher 2.0中的健康檢查

在2.0中,Rancher使用的是原生的Kubernetes健康檢查機(jī)制:livenessProbe和readinessProbe。

參考此文檔的定義,探針(probe)是由Kubelet在容器上定期執(zhí)行的診斷:鏈接。在Rancher 2.0中,與Rancher 1.6中的跨主機(jī)健康檢查相比,健康檢查由本地運(yùn)行的Kubelet完成。

快速Kubernetes健康檢查摘要

  • livenessProbe

livenessProbe是對(duì)容器執(zhí)行的操作,用于檢查容器是否正在運(yùn)行。如果探針報(bào)告失敗,Kubernetes將終止pod容器,并根據(jù)規(guī)范中指定的重新啟動(dòng)策略重新啟動(dòng)它。

  • readinessProbe

readinessProbe用于檢查容器是否已準(zhǔn)備好接受請(qǐng)求及滿足請(qǐng)求。當(dāng)readinessProbe失敗時(shí),則不會(huì)通過公共端點(diǎn)公開pod容器,因此容器不會(huì)接收到任何請(qǐng)求。

如果您的工作負(fù)載在處理請(qǐng)求之前忙于執(zhí)行某些啟動(dòng)例程,則最好為工作負(fù)載配置readinessProbe。

可以為Kubernetes工作負(fù)載配置以下類型的livenessProbe和readinessProbe:

  • tcpSocket – Kubelet會(huì)檢查是否可以針對(duì)指定端口上的容器IP地址打開TCP連接。

  • httpGet -在指定路徑上發(fā)出 HTTP / HTTPS GET請(qǐng)求,如果它返回200和400之間的HTTP響應(yīng)代碼,則報(bào)告為成功。

  • exec - Kubelet在容器內(nèi)執(zhí)行指定的命令,并檢查命令是否以狀態(tài)0退出。

您可在此查看上述探針的更多配置詳細(xì)信息:

https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-probes/#configure-probes

在Rancher 2.0中配置健康檢查

通過Rancher UI,用戶可以向Kubernetes工作負(fù)載添加TCP或HTTP健康檢查。默認(rèn)情況下,Rancher會(huì)要求您為工作負(fù)載配置readinessProbe,并使用相同的配置應(yīng)用livenessProbe。您也可以選擇定義單獨(dú)的livenessProbe。

如果健康檢查失敗,則容器會(huì)根據(jù)工作負(fù)載規(guī)范中定義的restartPolicy重新啟動(dòng)。這相當(dāng)于以前的rancher-compose.yml文件中的strategy參數(shù),那時(shí)這一參數(shù)是用于使用Cattle中的健康檢查的1.6服務(wù)的。

TCP健康檢查

在Rancher 2.0中部署工作負(fù)載時(shí),用戶可以配置TCP健康檢查,以檢查是否可以在特定端口打開TCP連接。

如何在Kubernetes中配置健康檢查

以下是Kubernetes YAML規(guī)范,也就是為上文說的Nginx工作負(fù)載所配置的TCP readinessProbe。Rancher還使用相同的配置為您的工作負(fù)載添加了livenessProbe。

如何在Kubernetes中配置健康檢查

從1.6到2.0,健康檢查參數(shù)的變化:

port 變成 tcpSocket.port

response_timeout 變成

timeoutSeconds

healthy_threshold 變成 failureThreshold

unhealthy_threshold 變成

successThreshold

interval 變成 periodSeconds

initializing_timeout 變成

initialDelaySeconds

strategy 變成 restartPolicy

HTTP健康檢查

您還可以指定HTTP健康檢查,并在pod容器中提供Kubelet將發(fā)出HTTP / HTTPS GET請(qǐng)求的路徑。但是,不同于Rancher 1.6中支持任何HTTP方法,Kubernetes僅支持HTTP / HTTPS GET請(qǐng)求。

如何在Kubernetes中配置健康檢查

下面是Kubernetes YAML規(guī)范,顯示了為上文所說的Nginx工作負(fù)載配置的HTTP readinessProbe和livenessProbe。

如何在Kubernetes中配置健康檢查

健康檢查在行動(dòng)

現(xiàn)在讓我們看看當(dāng)Kubernetes中的健康檢查失敗時(shí)會(huì)發(fā)生什么,以及工作負(fù)載如何恢復(fù)。

假定在我們的Nginx工作負(fù)載上執(zhí)行上述HTTP健康檢查,在/index.html路徑上執(zhí)行HTTP GET。為了刻意使健康檢查失敗,我使用Rancher中的Execute Shell UI選項(xiàng)在pod容器中執(zhí)行了一個(gè)exec。

如何在Kubernetes中配置健康檢查

exec容器后,我移動(dòng)了健康檢查執(zhí)行GET的文件。

如何在Kubernetes中配置健康檢查

readinessProbe和livenessProbe檢查失敗,并且工作負(fù)載狀態(tài)已變?yōu)椤安豢捎谩薄?/p>

如何在Kubernetes中配置健康檢查

Kubernetes很快就殺死了原pod并重新創(chuàng)建了pod,并且由于restartPolicy設(shè)置為了Always,工作負(fù)載很快恢復(fù)了。

使用Kubectl,您可以看到這些健康檢查事件日志:

如何在Kubernetes中配置健康檢查

如何在Kubernetes中配置健康檢查

小提示:Rancher 2.0 UI提供了從Kubernetes Cluster視圖啟動(dòng)Kubectl的功能,您可以在該視圖中在集群對(duì)象上運(yùn)行原生的Kubernetes命令。

將健康檢查從Docker Compose遷移到Kubernetes Yaml?

Rancher 1.6通過自己的微服務(wù)提供了健康檢查,這就是為什么Cattle用戶添加到服務(wù)中的健康檢查參數(shù)會(huì)出現(xiàn)在rancher-compose.yml文件而不是docker-compose.yml配置文件中。

我們之前在文章《如何簡(jiǎn)潔優(yōu)雅地實(shí)現(xiàn)Kubernetes服務(wù)暴露》中使用的Kompose工具適用于標(biāo)準(zhǔn)的docker-compose.yml參數(shù),因此無(wú)法解析Rancher健康檢查構(gòu)造。目前,我們暫時(shí)無(wú)法使用此工具將Rancher 健康檢查從compose配置轉(zhuǎn)換為Kubernetes Yaml。

可用于在Rancher 2.0中添加TCP或HTTP健康檢查的配置參數(shù)與Rancher 1.6非常相似。Cattle服務(wù)使用的健康檢查配置可以完全轉(zhuǎn)換為2.0而不會(huì)丟失任何功能。

上述內(nèi)容就是如何在Kubernetes中配置健康檢查,你們學(xué)到知識(shí)或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識(shí)儲(chǔ)備,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI