宏觀 K8s 運作(元件概述)

notion image
  • 一個 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 內部會發生什麼事?
  1. kubelet 會先收到 master node 指令,並創建一個 Pod
  1. 創建好後,kube-proxy 會去告知 iptables,目前該 Pod 可用。
  1. requests 會送到 Load Balancer由 Load Balancer 決定要把 request 交給哪個 Node
  1. 收到 requests的 Node 會經由 iptables 決定要送給哪個 Pod
  1. if 如果收到request的 Node 恰好沒有相對應可以處理 request Pod
  1. 收到 request 的 Node 會透過 iptables 把 request 轉給其他有可以處理這個 request的 Node