Linux中國

Kubernetes 複製控制器如何工作

你有沒有想過,誰負責監督和管理 Kubernetes 集群內運行的「 吊艙 pod 」的確切數量?Kubernetes 可以通過多種方式做到這一點,但一個常見的方法是使用 「 複製控制器 ReplicationController (RC)」。RC 負責管理吊艙的生命周期,並確保在任何時候運行著所需的指定數量的吊艙。但另一方面,它不負責高級的集群能力,如執行自動擴展、準備度和活躍探測以及其他高級的複製能力。Kubernetes 集群中的其他組件可以更好地執行這些功能。

簡而言之,RC 的職責有限,通常用於不需要複雜邏輯就能達到某些要求的具體實現(例如,確保所需的吊艙數量總是與指定的數量相符)。如果超過了所需的數量,RC 會刪除多餘的,並確保即使在節點故障或吊艙終止的情況下,也有相同數量的存在。

簡單的事情不需要複雜的解決方案,對我來說,這就是 RC 如何被使用的一個完美的比喻。

如何創建一個 RC

像大多數 Kubernetes 資源一樣,你可以使用 YAML 或 JSON 格式創建一個 RC,然後將其發布到 Kubernetes API 端點。

$ kubectl create -f rcexample.yaml
 replicationcontroller/rcexample created

現在,我將深入一下 rcexample.yaml 的樣子。

apiVersion: v1
kind: ReplicationController   →  RC 描述符    
metadata:
 name: rcexample            →  複製控制器名字              
spec:
 replicas: 3                 → 預期的吊艙數量      
 selector:                  → 這個 RC 的吊艙選擇器
   app: nginx                        
 template:                  → 用於創建新吊艙的模板    
   metadata:                        
     labels:                        
       app: nginx                    
   spec:                            
     containers:                    
     - name: nginx                  
       image: nginx

進一步解釋,這個文件在執行時創建了一個名為 rcexample 的 RC,確保三個名為 nginx 的吊艙實例一直在運行。如果一個或所有的 app=nginx 吊艙沒有運行,新的吊艙將根據定義的吊艙模板創建。

一個 RC 有三個部分:

  • 複製品:3
  • 吊艙模板:app=nginx
  • 吊艙選擇器:app=nginx

注意,吊艙模板要與吊艙選擇器相匹配,以防止 RC 一直創建吊艙。如果你創建的 RC 的吊艙選擇器與模板不匹配,Kubernetes API 伺服器會給你一個錯誤。

為了驗證 RC rcexample 是否被創建:

$ kubectl get po
NAME     READY   STATUS       RESTARTS  AGE
rcexample-53thy  0/1  Running         0     10s
rcexample-k0xz6  0/1  Running         0     10s
rcexample-q3vkg  0/1  Running         0     10s

要刪除 RC:

$ kubectl delete rc rcexample
 replicationcontroller "rcexample" deleted

注意,你可以對 RC 中的服務使用 滾動更新 策略,逐個替換吊艙。

其他複製容器的方法

在 Kubernetes 部署中,有多種方法可以實現容器的複製。Kubernetes 成為容器平台的主要選擇的主要原因之一是複製容器以獲得可靠性、負載平衡和擴展的原生能力。

我在上面展示了你如何輕鬆地創建一個 RC,以確保在任何時候都有一定數量的吊艙可用。你可以通過更新副本的數量來手動擴展吊艙。

另一種可能的方法是通過使用 「 複製集 ReplicaSet (RS)」來達到複製的目的。

(kind: ReplicaSet)

RS 的功能幾乎與 RC 相同。主要區別在於,RS 不允許滾動更新策略。

另一種實現複製的方法是通過使用 「 部署 Deployments 」。

(kind: Deployment)

部署是一種更高級的容器複製方法。從功能上講,部署提供了相同的功能,但在需要時可以推出和回滾變化。這種功能之所以能夠實現,是因為部署有 「 策略類型 StrategyType 」 規範來用新的吊艙替換舊的吊艙。你可以定義兩種類型的部署策略:「 重新創建 Recreate 」 和 「 滾動更新 RollingUpdate 」。你可以如下指定部署策略:

StrategyType: RollingUpdate

總結

容器的複製功能是大多數企業考慮採用 Kubernetes 的主要原因之一。複製可以讓你達到大多數關鍵應用程序需要的可靠性和可擴展性,作為生產的最低要求。

了解在 Kubernetes 集群中使用哪些方法來實現複製,對於決定哪種方法最適合你的應用架構考慮非常重要。

via: https://opensource.com/article/21/11/kubernetes-replicationcontroller

作者:Mike Calizo 選題:lujun9972 譯者:geekpi 校對:wxy

本文由 LCTT 原創編譯,Linux中國 榮譽推出


本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive

對這篇文章感覺如何?

太棒了
0
不錯
0
愛死了
0
不太好
0
感覺很糟
0
雨落清風。心向陽

    You may also like

    Leave a reply

    您的郵箱地址不會被公開。 必填項已用 * 標註

    此站點使用Akismet來減少垃圾評論。了解我們如何處理您的評論數據

    More in:Linux中國