Kubernetes 複製控制器如何工作
你有沒有想過,誰負責監督和管理 Kubernetes 集群內運行的「 吊艙 」的確切數量?Kubernetes 可以通過多種方式做到這一點,但一個常見的方法是使用 「 複製控制器 (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,以確保在任何時候都有一定數量的吊艙可用。你可以通過更新副本的數量來手動擴展吊艙。
另一種可能的方法是通過使用 「 複製集 (RS)」來達到複製的目的。
(kind: ReplicaSet)
RS 的功能幾乎與 RC 相同。主要區別在於,RS 不允許滾動更新策略。
另一種實現複製的方法是通過使用 「 部署 」。
(kind: Deployment)
部署是一種更高級的容器複製方法。從功能上講,部署提供了相同的功能,但在需要時可以推出和回滾變化。這種功能之所以能夠實現,是因為部署有 「 策略類型 」 規範來用新的吊艙替換舊的吊艙。你可以定義兩種類型的部署策略:「 重新創建 」 和 「 滾動更新 」。你可以如下指定部署策略:
StrategyType: RollingUpdate
總結
容器的複製功能是大多數企業考慮採用 Kubernetes 的主要原因之一。複製可以讓你達到大多數關鍵應用程序需要的可靠性和可擴展性,作為生產的最低要求。
了解在 Kubernetes 集群中使用哪些方法來實現複製,對於決定哪種方法最適合你的應用架構考慮非常重要。
via: https://opensource.com/article/21/11/kubernetes-replicationcontroller
作者:Mike Calizo 選題:lujun9972 譯者:geekpi 校對:wxy
本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive