Kubernetes CKA課程筆記 2

Kubernetes Architecture

ZONGRU Li
6 min readOct 6, 2021

基本的K8s系統架構有兩種Node:

  1. master(或稱Control Plane Node,可以有很多個)
  2. worker(普通的Node,通常會有超多個!)

首先針對worker Node解說:

  1. 每個worker Node上可以存在許多個pods
  2. 有三個Processes一定要跑在每一個worker Node上:

a.Kubelet

b.Kube proxy

c.Container runtime

首先Container runtime:

常見的有docker,cri-o,或container-d

課程解說現今最熱門的是使用較輕量化的container-d

container-d

講師的範例Node除了container-d外還會有docker標誌

表示其中也能跑Docker images

接著Kubelet:

  1. 其主要用來控制pod的排程(schedule)
  2. 有著container與Node(機台)間的介面
  3. container runtime啟動pod過程中,分配Node(機台)resource就是靠kebelet

最後Kube proxy:

  1. K8s的Service元件將http request轉拋給pod的,就是依靠Kube proxy

2. 依樣每個Node都應該安裝Kube proxy

3. Kube proxy內含智慧的轉拋邏輯(如下圖解說)

當其中一個Node中的APP pod要發動request通過DB Service到DB pod

DB Service後續透過Kube proxy轉拋的方式將如下圖:

如上圖,在重複一次!!!每個Node都要裝好並運行以下三樣東西:

  1. Kubelet
  2. Kube proxy
  3. Container runtime

接著問題可能是:

  • 誰安排pod的排程,或replica pod掛了,誰建立新的pod?
  • 又或說誰監控(monitor) pod?
  • 誰重新設置pod排程/重新啟動pod?
  • 新的機器當作Node,誰做把機器加入為K8s Node的動作?

以上這些管理的processes都是由Master Nodes(the Control Plane)決定!

master Node解說:

在master Node中必然有四個東西在運行來控制各個worker Node:

  1. Api Server
  2. Scheduler
  3. Controller Manager
  4. etcd

以下逐一解說其功能:

Api Server:

  1. 就好像K8s cluster的gateway一樣
  2. 透過K8s cluster外部的client(或UI介面,CLI,K8s API)對Api Server發動請求
  3. 請求可能是Update或Query
  4. Api Server也扮演關卡角色做authentication(不然隨便被Update就GG)
  5. 不管是做pod的排程變更,佈署新APP pod,建新Service,或控制其他K8s元件,或只是看看cluster狀態等等...都要透過請求Api Server
  6. 這也是唯一K8s cluster的entrypoint!

Scheduler:

考量到當發動一個Schedule請求到Api Server,要求執行Scheduler建立pod

可能的順序如下圖(右邊)及以下解說

  • 請求透過API Server轉發給Scheduler
  • Scheduler內會決定pod該建立在哪一個Node
  • 其中Scheduler會參考Node的Resources剩餘量與請求所需的Resources
  • (CPU/REM…etc)或哪個Node沒那麼忙的先決定佈署pod
  • 最終要在某個Node建立pod的則是Kubelet!!!

Controller Manager:

  • 隨時偵測cluster狀態(包含pod,Node狀態)
  • 當發現某個pod掛了,就會發動請求給Scheduler
  • 通過Scheduler考量後再決定pod要佈署在哪個Node
  • 再交給Kubelet去處理啟動/建立pod
邏輯運行順序參考

etcd:

  • 是一個key value的儲存空間
  • 可以當作是cluster的大腦,儲存了所有cluster的異動
  • SchedulerController Manager兩者運作都仰賴etcd的資料
  • 例如Scheduler怎麼知道哪個worker Node的Resources比較充足可以放新的Pod? etcd提供資料!
  • 任何的Pod建立或掛掉的狀態變化都會被紀錄在etcd之中
  • 但是Pod內的APP本身產生的Data,etcd則不負責儲存!
  • 另外etcd儲存資料的方式也是分散的(因為master Node可以多個!!)
  • 並且如上圖,API Server可以做Load Balance

一般情況下最簡單的配置可能是:

2 x master Node + 3 x worker Node

並請注意經過上面解說後可以理解到

master:其運作非常重要,但所需要的Resource(CPU/REM/空間…etc)較少

worker:工作量大,需要的Resource較多

當越來越多程式改考量run在K8s cluster上時

可能就要考慮橫向擴展Node數量例如變成

3 x master Node + 6 x worker Node(之類的)

而擴展機台做法就是在空機台上...

將定義master空機台上裝好並運行:

  1. Api Server
  2. Scheduler
  3. Controller Manager
  4. etcd

將定義worker空機台上裝好並運行:

  1. Kubelet
  2. Kube proxy
  3. Container runtime

然後加進K8s cluster!

參考課程(reference)

--

--

ZONGRU Li

2022/11/17 開源部分個人筆記給LINE "Java程式語言討論區"社群,希望能對社群的技術學習做一點點貢獻.(掩面....記得退訂閱!