Kubernetes 入門——Kubernetes 實現應用的高可用

胡家靖

百度基礎架構部研發工程師

負責函數計算與雲原生產品的研發

本文基於百度雲原生團隊『雲原生基礎知識概述及實踐』系列視頻課程——『Kubernetes 入門—Kubernetes 實現應用高可用』梳理.

視頻課程可點擊:https://cloud.baidu.com/video-center/video.html?id=609 進行學習。

導讀

Pod 代表了 Kubernetes 中的基本部署單元,但是,在一般情況下我們不會直接使用 Pod,因爲每一次重啓它的 IP 都會發生變化;如果你希望自己的應用能自動保持健康運行而且無需手動干預,則需要通過創建 ReplicaSet 或者 Deployment 這樣的資源來管理實際的 Pod。

另外很多時候我們需要判斷 Pod 是否需要重啓,請求是否可被調度到 Pod,探針的出現使得這些問題迎刃而解。

本節課將帶領大家學習探針與 Deployment 的使用。通過實踐與學習,瞭解 Kubernetes 如何實現應用的高可用。

課程主要分爲以下四個部分:

第一部分:探針

第二部分:Deployment 的使用

第三部分:Demo

第四部分:總結

01

Kubernets 探針

當你使用 kubernetes 的時候,有沒有遇到過 Pod 在啓動後一會就掛掉然後又重新啓動這樣的惡性循環?Kubernetes 如何檢測 pod 是否還存活?雖然容器已經啓動,Kubernetes 如何知道容器的進程是否準備好對外提供服務了呢?答案是:探針

探針種類

LivenessProbe

ReadnessProbe:

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

只是字段爲 readinessProbe。

02

Deployment 的使用

ReplicaSet


1.Label Selector: 標籤選擇器,用於確定作用域
2.Replicas:副本個數,也就是作用域
3.Pod template: pod 模板

Deployment

一個 Deployment 控制器爲 Pod 和 ReplicasSet 提供聲明式的更新能力。

你負責描述 Deployment 中的 目標狀態,而 Deployment 控制器以受控速率更改實際狀態, 使其變爲期望狀態。你可以定義 Deployment 以創建新的 ReplicaSet,或刪除現有 Deployment, 並通過新的 Deployment 收養其資源。

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

   Deployment 並不直接管理 Pod

當創建 Deployment 時,ReplicaSet 也會隨之創建。在實際使用 Deployment 的時候,實際的 Pod 由 ReplicaSet 創建和管理,而不是由 Deployment 直接管理。

使用 Deployment 可以更容易地更新應用程序,因爲可以直接定義單個 Deployment 資源所需要達到的狀態,並讓 Kubernetes 處理中間狀態。

  升級 Deployment

 Deployment 支持聲明式更新,即只需要修改 Deployment 資源中的 Pod 模板,Kubernetes 會自動將實際的系統狀態收斂爲資源中定義的狀態。

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

  Deployment Recreate 升級

 Deployment Recreate 升級策略將會直接停止老版本 Pod, 並創建新的 ReplicaSet 和 Pod。並且進行流量切換。具體步驟如下所示:

缺陷是,升級過程中有一段時間沒有 Pod 運行,此時如果有外部請求,服務就處於不可用狀態,會損失一定流量。

Deployment RollingUpdate 升級

滾動升級方式如上圖所示:

Kubernetes 會先額外創建 v2 版本的 pod 以及 replicaSet。並且逐漸銷燬 v1 版本的 pod,從而實現滾動升級

同時,在生產環境中我們十分建議 Deployment 配合就緒探針使用。因爲默認情況下, Pod running 時就會接受請求。但是實際上內部服務可能並未就緒。

所以可以配合 minReadySeconds 字段,以及就緒探針等相關功能進一步使用。

03

課程總結

1、探針的使用,就緒探針與存活探針。三種探測方式

2、ReplicaSet 的工作原理,通過 label 將 pod 維持在一定數量

3、Deployment 的工作原理,升級方式以及如何回滾。

以上是本期課程的所有內容,希望對大家有幫助。

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/mmFUoHRaPi1UBNI8BJwpTw