- 一個
cluster
有多個 node - node 與 node 之間直接用 ip 溝通
- 一個
node
有多個 pod - 一台一台的機器 / VM
- pod 與 pod 之間溝通透過 service
Replication Controller
→ 控制 pod replication 數量(auto scaling)- 每個 Replication Controller 都有屬於自己的 yaml 檔
- yaml 檔中「可以指定同時有多少個相同的Pods運行」
- 當某一 Pod 發生 crash, RC 會幫我們自動偵測、創建一個新的Pod,確保「Pod運行的數量與設定檔的指定的數量相同」
- 當機器重新開啟時,Replication Controller 會自動被建立,確保pod隨時都在運行。
- 一個
pod
有多個 container - 同一個 Pod 中的
containers
,可以透過 Pod 內部的網路直接溝通 - 可以將性質相近的服務放在同一個Pod裡
- 例:後端API service 與後端認證 service,可以放在同一個pod裡互相溝通。
localhost:port_num
-
kubelet
- kubelet 相當於 node agent,用於管理該 Node 上的所有 pods 以及與 master node 即時溝通
kube-proxy
- kube-proxy 會將目前該 Node 上所有 Pods 的資訊傳給
iptables
讓他去轉換對應的 port,送去對應的pod
創建一個新的 Pod 後,收到使用者發送的 request 時,ks8 內部會發生什麼事?
kubelet
會先收到 master node 指令,並創建一個 Pod。
- 創建好後,
kube-proxy
會去告知iptables
,目前該 Pod 可用。
- requests 會送到
Load Balancer
,由 Load Balancer 決定要把 request 交給哪個 Node
- 收到 requests的
Node
會經由 iptables 決定要送給哪個Pod
- if 如果收到request的 Node 恰好沒有相對應可以處理 request Pod
- 收到 request 的 Node 會透過 iptables 把 request 轉給其他有可以處理這個 request的 Node