溫馨提示×

溫馨提示×

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

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

Kubernetes無狀態(tài)應(yīng)用的一般特征是什么

發(fā)布時間:2022-01-05 18:03:34 來源:億速云 閱讀:99 作者:柒染 欄目:云計算

Kubernetes無狀態(tài)應(yīng)用的一般特征是什么,相信很多沒有經(jīng)驗的人對此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個問題。

以 12 要素為代表的微服務(wù)標(biāo)準(zhǔn),很好地給微服務(wù)的特征做出了指導(dǎo)。然而具體到以容器形式在 Kubernetes 上運(yùn)行的無狀態(tài)業(yè)務(wù)應(yīng)用上,這個標(biāo)準(zhǔn)是有些高層的——它看重的是方法和架構(gòu)。如果僅從外在視角來對一個“順眼”的 Kubernetes 應(yīng)用進(jìn)行觀察,這個應(yīng)用應(yīng)該有什么特征呢?

依賴關(guān)系清晰

微服務(wù)應(yīng)用通常會有各種外部依賴,例如數(shù)據(jù)庫、緩存、隊列等平臺能力,或者業(yè)務(wù)上的依賴服務(wù)等,因此一個健康的微服務(wù)組合而成的應(yīng)用,必須能處理好依賴關(guān)系。

微服務(wù)的啟動順序不是固定的,并且存在獨立更新、重啟的可能。而很多應(yīng)用僅在啟動時進(jìn)行連接,這就要求在 Kubernetes 上運(yùn)行的應(yīng)用,首先在啟動時,不會因為暫時無法連接依賴服務(wù)直接崩潰;同時在運(yùn)行期間,也有處理這種隨時重連的能力。

具備自檢能力

存活檢測關(guān)注的是進(jìn)程是否活躍,是否應(yīng)該重新啟動;就緒檢測代表的是服務(wù)能力,是否應(yīng)該保存在 Service 的負(fù)載均衡池中。

在沒有設(shè)置就緒檢測的情況下,Pod 一旦啟動成功,K8s 就會把相關(guān)服務(wù)的請求發(fā)給該實例,如果這個實例啟動較慢,就有可能對業(yè)務(wù)造成損失。同理,存活和就緒檢測應(yīng)該分別進(jìn)行,例如業(yè)務(wù)阻塞時,暫時將實例摘除,但是無需重啟,即可逐步恢復(fù)服務(wù)能力。

聯(lián)系到前面的依賴關(guān)系問題,在微服務(wù)環(huán)境中,一個服務(wù)的就緒檢測應(yīng)該僅僅關(guān)注本應(yīng)用的情況,檢測過程中不應(yīng)包含對依賴服務(wù)的調(diào)用——否則所有依賴故障服務(wù)的其它服務(wù)的就緒檢查失敗,造成大面積故障。

日志采集和處理

  • 應(yīng)用不應(yīng)繼續(xù)把日志輸出到本地文件,而應(yīng)該輸出到 stdoutstderr;

  • 集群應(yīng)該針對容器的 stdout、stderr 提供統(tǒng)一的日志采集,建議使用 Daemonset 而非 Sidecar;

  • 進(jìn)行日志采集的同時,集群應(yīng)提供 ES、Loki 或其它類似機(jī)制來對日志進(jìn)行處理,并且其處理和存儲能力應(yīng)該有初步預(yù)案;

  • 應(yīng)用日志應(yīng)提供分級開關(guān),保證同一鏡像在不同環(huán)境中可以輸出不同數(shù)量和級別的日志信息。

盡量優(yōu)雅關(guān)停

  • 容器命令入口應(yīng)該有能力接收 SIGTERM,并在需要的情況下傳遞給業(yè)務(wù)主進(jìn)程;

  • 應(yīng)用進(jìn)程接收到 SIGTERM 信號之后,不應(yīng)立刻關(guān)停,而是處理好剩余的在途業(yè)務(wù);

  • 使用 preStop 等 Pod 生命周期手段來完成特定任務(wù);

  • 避免使用長連接,保持簡單負(fù)載均衡的有效性。

故障預(yù)防和應(yīng)對

  • 避免運(yùn)行單 Pod 的 Deployment;

  • 使用 Pod 軟親和避免同 Deployment 中的不同 Pod 分布在同一節(jié)點上;

  • 遭遇不可恢復(fù)的故障,應(yīng)該允許應(yīng)用崩潰,由 K8s 重新啟動;

  • 定義 PDB(Pod disruption budgets),告知 K8s 為應(yīng)用提供最低 Pod 數(shù)量保障。

資源使用

  • 必須定義 CPU 和內(nèi)存的 Requests;

  • 必須定義內(nèi)存的 Limits;

  • 同一集群中的不同微服務(wù),如果有不同 QoS 要求,應(yīng)該定義不同的 qosClass,避免被無差別驅(qū)逐。

看完上述內(nèi)容,你們掌握Kubernetes無狀態(tài)應(yīng)用的一般特征是什么的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!

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

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

AI