iT邦幫忙

2021 iThome 鐵人賽

DAY 12
0
DevOps

前端工程師學習 DevOps 之路系列 第 12

Day12-Kubernetes 那些事 - Replication Controller

前言

在上一篇文章提到由於 Pod 是 Stateless ,因此我們可以擴充 Pod ,今天這篇文章就要正式進入如何擴充 Pod 了,首先我們先從最簡單的 [Replication Controller](在上一篇文章提到由於 Pod 是 Stateless ,因此我們可以擴充 Pod ,今天這篇文章就要正式進入如何擴充 Pod 了,首先我們先從最簡單的 Replication Controller 開始說起。) 開始說起。

什麼是 Replication Controller?

大家看到這個名詞可能會猜到又是一個 Controller 了,沒錯 Replication Controller 也是一種 Controller 負責控制 Replication ,而 Replication 翻成中文就是複製的意思,在 K8s 中 Replication 代表的就是同一種 Pod 的複製品,有沒有覺得 K8s 蠻多設定都很相近呢XD

這邊要帶大家認識一個很重要的設定: replicareplica 就是複製品的意思,透過這個設定我們就可以快速產生一樣內容的 Pod ,舉例來說:今天設定了 replica: 2 就代表會產生兩個內容一樣的 Pod 出來。

Replication Controller 用途

上面提到 Replication Controller 可以利用設定 replica 的方式快速建立 Pod 數量,其實除了建立之外 Replication Controller 也確保了 Pod 的數量與我們設定的 replica 一致,假如今天不小心刪除了其中一個 Pod ,這時候 Replication Controller 就會自動在產生一個新的 Pod 出來填補那個空缺,所以善用 Replication Controller 可以讓我們的產品變得更加穩定,一種雞蛋不會擺在同個籃子的概念XD

Replication Controller 寫法

這邊稍微把之前寫過的 Pod 加以改寫一下。

apiVersion: v1
kind: ReplicationController
metadata:
  name: helloworld
spec:
  replica: 2
  selector:
    app: frontend
  template:
    metadata:
      labels:
        app: frontend
    spec:
      containers:
        - name: helloworld
          image: w5151381guy/helloworld
          imagePullPolicy: IfNotPresent
          ports:
            - containerPort: 8080

這份設定檔看似複雜但其實很簡單,可以發現 template 區塊內的設定基本上就是 Pod 的設定,上面再加一些 Replication Controller 自身的設定而已。

由於我們要建立的是 Replication Controller ,因此在一開始的 spec 我們要填的是 Replication Controller 的設定,所以 replica 會擺在第一個 spec 內。

再來又看到 selector 了,前面提到 Replication Controller 要控制的就是 Pod 的數量,所以這邊的 selector 就是要選取 Pod ,就跟 Service 要選取 Pod 是一樣的意思。

最後就是一個新的設定: templatetemplate 就是用來定義 Pod 的資訊,所有 Pod 的內容像是 metadataspec 等等都會寫在 template 內,所以可以把 template 想像成是一個不用寫 apiVersion 以及 kind 的 Pod 描述檔,有了這個觀念在看 template 內的描述就相當簡單了,就只是把 Pod 的內容複製過來而已,而 template 內的 spec 就是寫上 Pod 的 container 資訊嘍。

Replication Controller 建立

一樣也是要用 apply 的參數來建立描述檔。

為了查看 Replication Controller 是否有正確建立起來可以下 kubectl get replicationcontroller 但大家都知道工程師通常都蠻喜歡簡寫的,所以直接下 kubectl get rc 即可。

接下來我們就可以查看 Pod 是否真的出現 2 個,所以下了 kubectl get pod,發現真的產生兩個 Pod ,但為了不讓名字重複所以 Replication Controller 會在 Pod 名稱後面帶一些自己生成的值進去。

最後來查看 Replication Controller 是否真的會控制 Pod 數量,因此我們先下 kubectl delete pod PodName 最後再查看 Pod 發現真的有自動生成一個 Pod 出來,讓我們的 replca 始終都能保持在兩個。

這時候你可能會思考那我是不是沒辦法永遠砍掉 Replication Controller 生成的 Pod 了,因為都會不斷的生出一個新的 Pod 出來,其實是可以的我們只要把 Replication Controller 砍掉,而 Replication Controller 就會自動終止底下的 Pod ,隨後這些 Pod 也就會自動消失了。

最後一樣回到我們網頁,發現 Hello World 也有正確的顯示,代表整體是正常運行的。

小結

今天這篇文章介紹了 Replication Controller ,相信大家應該更了解 K8s 是如何控制 Pod 的數量,但其實 K8s 官方並不建議用 Replication Controller 的方式來控制 Pod ,而是建議用 Deployment 搭配 ReplicaSet 來控制。

所以下一篇文章就會來好好介紹這兩個物件,如果對於文章有任何問題都歡迎留言給我,那我們就下篇文章見嘍~


上一篇
Day11-Kubernetes 那些事 - Ingress 篇(三)
下一篇
Day13-Kubernetes 那些事 - Deployment 與 ReplicaSet(一)
系列文
前端工程師學習 DevOps 之路30

尚未有邦友留言

立即登入留言