[Kubernetes] Kubernetes 基礎(三) Pod Controller - ReplicaSet
前言
上篇文章 - [Kubernetes] Kubernetes 基礎(二) Pod 操作 討論如何透過 kubectl 指令對 K8s 做一系列的操作,本篇主要記錄 Pod Controller 中的 ReplicaSet
什麼是 ReplicaSet?
上篇文章有提到 Pod 是 K8s 的最小運算單元,若今有負載平衡的需求時,是無法只單靠 Pod 來達成的,因為一個 Pod 即一個應用程式,只會運行一份(本身無複製能力)。
某些情況下會需要可以運行多份應用程式,做負載平衡、分散流量,而 ReplicaSet
可以幫助我們達成這件事。
ReplicaSet 幾項重點:
- 副本的概念、管理相同的 Pod
- 確保可在任何時間點 Pod 可以保有指定數量的副本 -> 會事先在 ReplicaSet 裡定義好數量,超過定義好的數量就砍掉多的,反之則補回來。
- 確保 Pod 是可用的、可存取的
- Pod 和 ReplicaSet 是不同的資源,透過
selector
將兩者綁一起
在實作之前,我們可先透過 kubectl api-resources
指令列出所有支援的 API 資源,以及該項資源的縮寫,後續針對不同資源操作時,可以用縮寫做替換。
由於本文重點在討論 ReplicaSet
這項 API 資源,可搭配 grep
只擷取 ReplicaSet
相關資訊
1 |
|
output
1 |
|
實作
列出 ReplicaSet
1 |
|
範例
replicasets.yml
1 |
|
需注意幾個上方範例中的欄位:
- seletor: ReplicaSet 透過 seletor 裡定義的 matchLabels 與 Pod 的 labels 對應。上方範例是對應到
app: myapp-nginx-demo
這個 Label - 第一層的 spec: 用於描述 ReplicaSet
- 第二層的 spec: 用於描述 Pod 裡的 Container
- template: 用於定義 Pod
將上述範例進行 apply
1 |
|
get
查看剛剛建立的 ReplicaSet
1 |
|
output
1 |
|
輸出結果裡面,DESIRED 表期望跑多少個 Ready 的 Pod; CURRENT 表目前跑多少個 Pod; READY 表目前多少個 Pod 是處於 Ready 狀態。
成功建立 ReplicaSet
後看一下 Pod 資訊看是不是有三個 Pod
1 |
|
試著砍掉其中一個 Pod
1 |
|
過一段時間後再下 get
指令會發現 ReplicaSet
已生出新的 Pod,並把數量控制在 3 個。
若把 get
改為 describe
列出 Pod 細部資訊:
1 |
|
由於 Pod 是由 ReplicaSet
去管理,故有一個名為 Controlled By 的欄位用來記錄哪個 ReplicaSet
來管理資源,透過 yaml 的方式辨識該 Pod 是單獨的 Pod 還是上頭(範例是ReplicaSet
)有其他元件控制。
概念圖
上圖解釋 ReplicaSet
的概念與流程,包含 Pod 數量,以及 seletor
對應的 Pod label
一般在定義 ReplicaSet
的時候,Pod 的 label 與 seletor
的 label 都會設定一樣
總結
最後簡短定義 ReplicaSet
:
確保相同的 Pod 在任意時間內皆會有符合目標的 Pod 數量於 Cluster 中運行
相較於後面會談論到的 Daemonset ,Daemonset 是確保節點數量要一致且只能有一個
本篇文章記錄了如何透過 ReplicaSet
來建立多個 Pod,由 ReplicaSet
幫我們控制好 Pod 數量。
下一篇會針對 Pod 底下的 Controller - Deployment
做討論。