iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 8
0
Kubernetes

Kubernetes~成為Devops工程師的必經試煉系列 第 8

Day 8 照我的腳本管理資源~Replication Controller

  • 分享至 

  • xImage
  •  

前言

我們在前三天分別介紹了 Pod, Label 與 Namespace,這些元件構築了 Kubernates 的基本操作方式,那在一班的情況下,我們要怎麼去管理不同 Pod的狀態與數量.
而 Replication Controller 幫你解決了以下的問題

  • Replication Controller 保證在 Kubernates 運作時間內,都有特定數量的Pod 正在運行,如果太多 Pod ,Replication Controller就砍掉幾個,如果太少了,Replication Controller會重新建幾個,和直接建立 Pod 不同的是, Replication Controller 會替換掉那些刪除的或者被終止的 Pod,不管刪除的原因(維護或是更新).
  • 建議即使是只創建一個pod,我們也要使用Replication Controller。 Replication Controller 就像一個進程管理器,監管著不同node上的多個pod,而不是單單監控一個node上的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

參考連結

  1. Kubernetes pods by example
  2. 名词解释 Replication Controller

上一篇
Day 7 隔離Kubernate中不同的元件 - Namespace
下一篇
DAY9 運行Kubernetes 的核心 ~ Node
系列文
Kubernetes~成為Devops工程師的必經試煉17
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言