溫馨提示×

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

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

Kubernetes 中怎么實(shí)現(xiàn)應(yīng)用高可用

發(fā)布時(shí)間:2021-08-10 13:50:08 來(lái)源:億速云 閱讀:135 作者:Leah 欄目:云計(jì)算

這篇文章將為大家詳細(xì)講解有關(guān)Kubernetes 中怎么實(shí)現(xiàn)應(yīng)用高可用,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個(gè)參考,希望大家閱讀完這篇文章后對(duì)相關(guān)知識(shí)有一定的了解。

1. Kubernetes 探針

當(dāng)你使用 Kubernetes 的時(shí)候,有沒(méi)有遇到過(guò) Pod 在啟動(dòng)后一會(huì)就掛掉然后又重新啟動(dòng)這樣的惡性循環(huán)?Kubernetes 如何檢測(cè) Pod 是否還存活?雖然容器已經(jīng)啟動(dòng),Kubernetes 如何知道容器的進(jìn)程是否準(zhǔn)備好對(duì)外提供服務(wù)了呢?答案是:探針

探針?lè)N類

LivenessProbe

介紹:LivenessProbe 又稱存活探針,其作用主要用于檢測(cè)容器是否還在運(yùn)行。kubelet 使用存活探測(cè)器來(lái)知道什么時(shí)候要重啟容器。例如,存活探測(cè)器可以捕捉到死鎖(應(yīng)用程序在運(yùn)行,但是無(wú)法繼續(xù)執(zhí)行后面的步驟)。這樣的情況下重啟容器有助于讓應(yīng)用程序在有問(wèn)題的情況下更可用。

用途:Kubernetes 可以通過(guò)存活探針來(lái)檢查容器是否還在運(yùn)行。如果探測(cè)失敗,則 Kubernetes 將會(huì)認(rèn)為容器已經(jīng)不在運(yùn)行,將會(huì)重新啟動(dòng)容器。

探測(cè)方式:

1. HTTP:kubelet 對(duì)容器的 IP 地址指定路徑執(zhí)行 HTTP GET 請(qǐng)求。根據(jù)返回碼判斷是否探測(cè)成功

2. TCP 套接字:嘗試與容器指定端口建立TCP連接,如果建立成功則表示探測(cè)成功。

3. Exec:在容器內(nèi)執(zhí)行任意命令,檢查退出狀態(tài)碼。如返回值為0,則探測(cè)成功。

存活探針yaml文件:

綠色為 http 探針,這里請(qǐng)求容器的8080端口,如果返回是 2xx,或者 3xx,那么表示探測(cè)成功。

紅色為 exec 探針,這里執(zhí)行了一個(gè) cat 命令。

藍(lán)色的為 tcp 探針。作用為和8080端口嘗試建立 TCP 連接。

Kubernetes 中怎么實(shí)現(xiàn)應(yīng)用高可用

ReadnessProbe

介紹:就緒探針,用于探測(cè) Pod 是否已經(jīng)就緒。由于部分 Pod 啟動(dòng)時(shí)將會(huì)有較長(zhǎng)的初始化時(shí)間,就緒探針可以用于探測(cè) Pod 是否已經(jīng)初始化完畢。kubelet 使用就緒探測(cè)器可以知道容器什么時(shí)候準(zhǔn)備好了并可以開(kāi)始接受請(qǐng)求流  量,  當(dāng)一個(gè) Pod 內(nèi)的所有容器都準(zhǔn)備好了,才能把這個(gè) Pod 看作就緒了。這種信號(hào)的一個(gè)用途就是控制哪個(gè) Pod 作為 Service 的后端。在 Pod 還沒(méi)有準(zhǔn)備好的時(shí)候,會(huì)從 Service 的負(fù)載均衡器中被剔除的。

用途:就緒探針在容器生命周期中會(huì)被定期調(diào)用。確定 Pod 是否接受客戶端請(qǐng)求,當(dāng)容器的準(zhǔn)備就緒探測(cè)返回成功時(shí),表示容器已經(jīng)準(zhǔn)備好接受請(qǐng)求。

探測(cè)方式:

1.HTTP:對(duì)容器的 IP 地址指定路徑執(zhí)行 HTTP GET 請(qǐng)求。根據(jù)返回碼判斷是否探測(cè)成功

2.TCP套接字:嘗試與容器指定端口建立TCP連接,如果建立成功則表示探測(cè)成功。

3.Exec:在容器內(nèi)執(zhí)行任意命令,檢查退出狀態(tài)碼。如狀態(tài)碼為0,則探測(cè)成功。

就緒探針的yaml文件:

Kubernetes 中怎么實(shí)現(xiàn)應(yīng)用高可用

就緒探針與存活探針配置幾乎一致。

只是字段為 readinessProbe。

2. Deployment 的使用

ReplicaSet

簡(jiǎn)介:Pod 不可靠,可能會(huì)宕掉,可以配置重啟,但是如果是 Pod 所在的節(jié)點(diǎn)宕掉,Pod 就會(huì)完全丟失,如果在生產(chǎn)環(huán)境就會(huì)出現(xiàn)問(wèn)題。另外我們一般不會(huì)使用單個(gè) Pod,而是許多組相同的 Pod 來(lái)提供服務(wù),如果手動(dòng)維護(hù)的話會(huì)特別困難,特別是在集群數(shù)量比較大的時(shí)候,所以這里對(duì) ReplicaSet 進(jìn)行介紹。ReplicaSet 的目的是維護(hù)一組在任何時(shí)候都處于運(yùn)行狀態(tài)的 Pod 副本的穩(wěn)定集合。因此,它通常用來(lái)保證給定數(shù)量的、完全相同的 Pod 的可用性。

工作原理:RepicaSet 是通過(guò)一組字段來(lái)定義的,包括一個(gè)用來(lái)識(shí)別可獲得的 Pod 的集合的選擇算符,一個(gè)用來(lái)標(biāo)明應(yīng)該維護(hù)的副本個(gè)數(shù)的數(shù)值,一個(gè)用來(lái)指定應(yīng)該創(chuàng)建新 Pod 以滿足副本個(gè)數(shù)條件時(shí)要使用的 Pod 模板等等。每個(gè) ReplicaSet 都通過(guò)根據(jù)需要?jiǎng)?chuàng)建和 刪除 Pod 以使得副本個(gè)數(shù)達(dá)到期望值,進(jìn)而實(shí)現(xiàn)其存在價(jià)值。當(dāng) ReplicaSet 需要?jiǎng)?chuàng)建新的 Pod 時(shí),會(huì)使用所提供的 Pod 模板。

工作過(guò)程:ReplicaSet 的目的是維護(hù)一組在任何時(shí)候都處于運(yùn)行狀態(tài)的 Pod 副本的穩(wěn)定集合。因此,它通常用來(lái)保證給定數(shù)量的、完全相同的 Pod 的可用性。

Kubernetes 中怎么實(shí)現(xiàn)應(yīng)用高可用

每次 ReplicaSet 會(huì)監(jiān)控當(dāng)前 Pod 的數(shù)量,如果 Pod 數(shù)量多于要求的數(shù)量,則會(huì)自動(dòng)刪除一 部分。否則會(huì)自動(dòng)創(chuàng)建,創(chuàng)建過(guò)程中會(huì)使用模板創(chuàng)建。

Kubernetes 中怎么實(shí)現(xiàn)應(yīng)用高可用

ReplicaSet 為故障節(jié)點(diǎn)上運(yùn)行的 Pod 創(chuàng)建了新的替代副本,輕松地實(shí)現(xiàn)了 pod 的水平伸縮。

如果你更改了一個(gè) Pod 的標(biāo)簽,就有可能讓它脫離它所屬的 ReplicaSet。

同理,如果你想將一個(gè) Pod 歸到 Replicas Set 中,也可以使用修改標(biāo)簽的方式將其增加到 ReplicaSet 中。

ReplicaSet yaml 示例

Kubernetes 中怎么實(shí)現(xiàn)應(yīng)用高可用

1.Label Selector: 標(biāo)簽選擇器,用于確定作用域
2.Replicas:副本個(gè)數(shù),也就是作用域
3.Pod template: Pod模板

Deployment

一個(gè) Deployment 控制器為 Pod 和 ReplicasSet 提供聲明式的更新能力。

你負(fù)責(zé)描述 Deployment 中的 目標(biāo)狀態(tài),而 Deployment 控制器以受控速率更改實(shí)際狀態(tài), 使其變?yōu)槠谕麪顟B(tài)。你可以定義 Deployment 以創(chuàng)建新的 ReplicaSet,或刪除現(xiàn)有 Deployment, 并通過(guò)新的 Deployment 收養(yǎng)其資源。

Deployment yaml示例

Kubernetes 中怎么實(shí)現(xiàn)應(yīng)用高可用

Deployment yaml 文件與 ReplicaSet 十分相似, 只是多了 strategy 字段。該字段主要用于描述升級(jí)方式。

Deployment 并不直接管理 Pod

當(dāng)創(chuàng)建 Deployment 時(shí),ReplicaSet 也會(huì)隨之創(chuàng)建。在實(shí)際使用 Deployment 的時(shí)候,實(shí)際的 Pod 由 ReplicaSet 創(chuàng)建和管理,而不是由 Deployment 直接管理。

使用 Deployment 可以更容易地更新應(yīng)用程序,因?yàn)榭梢灾苯佣x單個(gè)Deployment 資源所需要達(dá)到的狀態(tài),并讓 Kubernetes 處理中間狀態(tài)。

Kubernetes 中怎么實(shí)現(xiàn)應(yīng)用高可用

升級(jí) Deployment

Deployment 支持聲明式更新,即只需要修改 Deployment 資源中的 Pod 模板,Kubernetes 會(huì)自動(dòng)將實(shí)際的系統(tǒng)狀態(tài)收斂為資源中定義的狀態(tài)。

Kubernetes 中怎么實(shí)現(xiàn)應(yīng)用高可用

Deployment 支持不同的升級(jí)策略,主要分為 RollingUpdate 以及 Recreate 模式,本策略在 deployment.spec.strategy 字段中定義。詳情可以使用 kubectl explain 命令獲取。

Deployment Recreate 升級(jí)

Deployment Recreate 升級(jí)策略將會(huì)直接停止老版本 Pod, 并創(chuàng)建新的 ReplicaSet 和 Pod。并且進(jìn)行流量切換。具體步驟如下所示:

Kubernetes 中怎么實(shí)現(xiàn)應(yīng)用高可用

缺陷是,升級(jí)過(guò)程中有一段時(shí)間沒(méi)有Pod運(yùn)行,此時(shí)如果有外部請(qǐng)求,服務(wù)就處于不可用狀態(tài),會(huì)損失一定流量。

Deployment RollingUpdate 升級(jí)

Kubernetes 中怎么實(shí)現(xiàn)應(yīng)用高可用

關(guān)于Kubernetes 中怎么實(shí)現(xiàn)應(yīng)用高可用就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到。

向AI問(wèn)一下細(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