iT邦幫忙

2022 iThome 鐵人賽

DAY 17
0
DevOps

從認識Docker到精通系列 第 17

第十七天-Replication Controller

  • 分享至 

  • xImage
  •  

Replication Controller


Replication Controller 是在k8s上負責管理 pod 數量和狀態的 controller,我們可以利用他來做到以下幾件事:

  • 可以指定同時間運行的pod的數量,當某一個 pod crashed 或是 fail 時,會自動創建一個新的pod,確保 pod 的數量和指定的數量相同
  • 每當機器重啟時,Controller 也會自動建立並依據設定檔 deploy pod

接下來就來講講 Replication Controller 的設定檔要怎麼寫

Pod 的設定檔

阿不是要寫controller的嗎?
因為他跟pod的設定檔滿像的,所以就..一起寫

以下是一個簡單的 pod 設定檔

apiVersion: v1
kind: Pod
metadata:
  name: nginx
spec:
  containers:
  - name: nginx
    image: nginx:1.14.2
    ports:
    - containerPort: 80

可以看見其中幾個比較重要的部分

  • apiVersion:apiVersion 代表著目前 K8s 中該文件的核心版本號
  • kind:記錄這個YAML是給誰的
  • metadata:metadata 為 pod 的一些資料,作用跟html header中<meta>的作用類似,有三個比較重要的 key
    • name:指定pod的名稱
    • labels:pod的分群管理用,之後會寫道
    • annotations:類似於labels,用來記錄使用者附加的自定義資訊
  • specsspecs的作用則是定義 container 之用,內容跟 docker-compose.yml作用類似,可以定義映像、容器名稱、對外埠口等等

那麼像上面的 yaml檔,內容就是啟用一個pod,便在pod內的 container運行nginx的映像,並開啟80口對外接收服務。

在建立完 pod.yaml 之後,我們可以利用 kubectl create 的指令來在一個 development 中建立 pod:

kubectl create -f pod.yaml

接著可以用

kubevtl get pods

來檢視當前的 pod 狀態,當Status變成Running時,便啟動完成了

另外還有其他的指令,如 kubectl describe 便可以看到我們設置的 meta 資料、kubectl port-forward <podname> port:port 可以把 port forward出來等等,但今天重點不在那邊就改天再講吧

Replication Controller YAML file

一樣從範例開始:

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

我們可以看到上面的YAML檔一樣有著 apiVersionkindmetadata、和 spec四個部分,他們的作用基本相同,kind 因為這個YAML是給Controller用得因此變成 replicationController,最大不同點是在 spec的部分,多了一些不同的 tag

  • replicasselector:定義的 pod 數量、以及定義選擇的 pod 的條件 (依據 pod 的label)
  • template:pod的模板,controller會依據這裡的資訊創建 pod
    • metadata:作用和pod的YAML相同,但注意metadata 內的 labels 必須包含在 selector中,不然會報錯 (不可能叫他生成一個他管不了的pod吧)
    • spec:一樣

總結上面的YAML檔,就是確保任一時候label=nginx的pod數量為3
最後一樣來到了deploy的部分,還是跟pod的YAML檔相同,使用的指令為kubectl create -f <YAML name>

可以利用 kubectl get pods,就會看見我們創建的3個pod啦!


上一篇
第十六天- k8s 在 windows 上的安裝&deploy一個簡單的網站
下一篇
第十八天 - Deployment
系列文
從認識Docker到精通30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言