我們在前三天分別介紹了 Pod, Label 與 Namespace,這些元件構築了 Kubernates 的基本操作方式,那在一班的情況下,我們要怎麼去管理不同 Pod的狀態與數量.
而 Replication Controller 幫你解決了以下的問題
我們用一個的範例建立3個 nginx web server
apiVersion: v1
kind: ReplicationController
metadata:
name: nginx
spec:
replicas: 3
selector:
app: nginx
template:
metadata:
name: nginx
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80
用以下的指令建立
$ kubectl create -f https://k8s.io/examples/controllers/replication.yaml
replicationcontroller/nginx created
用 kubectl describe 的指令查詢剛剛建立的 nginx
$ kubectl describe replicationcontrollers/nginx
Name: nginx
Namespace: default
Selector: app=nginx
Labels: app=nginx
Annotations: <none>
Replicas: 3 current / 3 desired
Pods Status: 0 Running / 3 Waiting / 0 Succeeded / 0 Failed
....
可以看到目前有3個 Pod 其中有 3個正在下載或是部署.
約等5分鐘後,可以看到Pod 的 Status 改變了
$ kubectl describe replicationcontrollers/nginx
Name: nginx
Namespace: default
Selector: app=nginx
Labels: app=nginx
Annotations: <none>
Replicas: 3 current / 3 desired
Pods Status: 3 Running / 0 Waiting / 0 Succeeded / 0 Failed
....
透過以下指令,可以只印出剛剛建立的 nging pod 名稱
$ pods=$(kubectl get pods --selector=app=nginx --output=jsonpath={.items..metadata.name})
echo $pods
nginx-3ntk0 nginx-4ok8v nginx-qrm3m
假如我們現在手動刪除其中一個Pod,我們來看看會發生什麼事
$ kubectl delete pod nginx-3ntk0
pod "nginx-3ntk0" deleted
再來查詢目前的 Pod
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
nginx-3ntk0 0/1 Terminating 0 21m
nginx-4ok8v 1/1 Running 0 21m
nginx-qrm3m 1/1 ContainerCreating 0 2m
nginx-63jwq 1/1 Running 0 21m
可以看到Replication controller偵測到一個Pod終止服務時,產生新的Pod,來確保Pod的數量維持在 3個。
我們還可以透過以下指令調整 Replication controller 裡 監控 Pod 的數量
$ kubectl scale --replicas=6 -f https://k8s.io/examples/controllers/replication.yaml
replicationcontroller nginx scaled
最後,當我們刪除 Replication controller 時,要注意由 Replication controller 產生的 Pod 也會因此終止。
$ kubectl delete rc nginx
replicationcontroller nginx deleted
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
nginx-3ntk0 1/1 Terminating 0 21m
nginx-4ok8v 1/1 Terminating 0 21m
nginx-qrm3m 1/1 Terminating 0 2m
nginx-63jwq 1/1 Terminating 0 21m
nginx-kscwe 1/1 Terminating 0 7m
nginx-pqak7 1/1 Terminating 0 7m
如果要確保刪掉 Replication controller 這些 Pod 仍能運作 需輸入以下指令
$ kubectl delete rc nginx --cascade=false