1. 程式人生 > 實用技巧 >Replication Controller

Replication Controller

Replication Controller

Replication Controller簡稱RC,RC是Kubernetes系統中的核心概念之一,簡單來說,RC可以保證在任意時間執行Pod的副本數量,能夠保證Pod總是可用的。如果實際Pod數量比指定的多那就結束掉多餘的,如果實際數量比指定的少就新啟動一些Pod,當Pod失敗、被刪除或者掛掉後,RC都會去自動建立新的Pod來保證副本數量,所以即使只有一個Pod,我們也應該使用RC來管理我們的Pod。

現在我們來使用RC來管理我們前面使用的Nginx的Pod,YAML檔案如下:

apiVersion: v1
kind: ReplicationController
metadata:
  name: rc
-demo labels: name: rc spec: replicas: 3 selector: name: rc template: metadata: labels: name: rc spec: containers: - name: nginx-demo image: nginx ports: - containerPort: 80

上面的YAML檔案相對於我們之前的Pod的格式:

  • kind:ReplicationController
  • spec.replicas: 指定Pod副本數量,預設為1
  • spec.selector: RC通過該屬性來篩選要控制的Pod
  • spec.template: 這裡就是我們之前的Pod的定義的模組,但是不需要apiVersion和kind了
  • spec.template.metadata.labels: 注意這裡的Pod的labels要和spec.selector相同,這樣RC就可以來控制當前這個Pod了。

這個YAML檔案中的意思就是定義了一個RC資源物件,它的名字叫rc-demo,保證一直會有3個Pod執行,Pod的映象是nginx映象。

注意spec.selector和spec.template.metadata.labels這兩個欄位必須相同,否則會建立失敗的,當然我們也可以不寫spec.selector,這樣就預設與Pod模板中的metadata.labels相同了。所以為了避免不必要的錯誤的話,不寫為好。

然後我們來建立上面的RC物件(儲存為 rc-demo.yaml):

kubectl create -f rc-demo.yaml

檢視RC:

kubectl get rc

檢視具體資訊:

kubectl describe rc rc-demo

然後我們通過RC來修改下Pod的副本數量為2:

kubectl apply -f rc-demo.yaml

或者

kubectl edit rc rc-demo

而且我們還可以用RC來進行滾動升級,比如我們將映象地址更改為nginx:1.7.9:

kubectl rolling-update rc-demo --image=nginx:1.7.9

但是如果我們的Pod中多個容器的話,就需要通過修改YAML檔案來進行修改了:

kubectl rolling-update rc-demo -f rc-demo.yaml

如果升級完成後出現了新的問題,想要一鍵回滾到上一個版本的話,使用RC只能用同樣的方法把映象地址替換成之前的,然後重新滾動升級。