雲端容器化技術與資源調度

認識 Kubernetes 的基本觀念

Kubernetes 是什麼?

  • Kubernetes (簡稱 K8S),是 Google 開源出來的容器管理(Orchestration) 平台。
  • 透過分散式架構,來進行容器的部署、維運、擴充。

K8S 可達成什麼目標?

  • 自動進行工作負載均衡
  • 藍/綠部署
  • 滾動部署
  • 管理無狀態 / 有狀態應用程式
  • 觸發定時作業 (Cron Job)
  • 原生提供服務發現(Service Discovery) 功能
  • 提供各種軟硬體整合介面

一致性的部署操作

  • 地端 / 雲端
  • 裸機 / VM

各種版本的下 K8S 都使用同一套 API 來操作,管理方式完全一致。

K8S 架構

k8s arch

  • Master: 是集群的主要控制單元,其用於管理其工作負載並指導整個系統的通信。
  • etcd: 是 k8s 所使用的資料庫。etcd 是由CoreOS開發,是一種持久性、輕量型、分布式的 Key-Value 數據存儲組件。etcd 的個節點可保持在任何給定時間點內保持資料的一致性。
  • API Server: 是外界控制與管理 K8S 群集的管道,使用 JSON over HTTP 的方式實現。
  • Controller Manager: 當部署命令下達進 K8S 後,Controller Manager 負責監看整體叢集內的狀態變化,並作出對應的新增、修改、刪除資源的決策與動作。
  • Scheduler: 當部署命令下達進 K8S 後,Schedule 負責決定哪個 Pod (一個或多個容器) 該跑在哪台節點上。Scheduler 需不斷的追蹤每節點上的資源利用率,以確保工作負載不會超過可用資源。

我們可以這樣理解 Controller Manager 與 Scheduler 的工作分配: Controller Manager 決定要增加運行3個容器,而Scheduler 負責決定這3個容器該放在哪裡。

  • Kubelet: 負責每個節點的運行狀態,確保節點上的所有容器都正常運行。Kubelet 會按照 Master 的指示來處理啟動,停止和維護應用程式容器; 同時,Kubelet 也負責監看節點的狀態,並回報給 Master 進行決策。
  • cAdvisor: cAdvisor (Container Advisor) 負責採集節點與容器的資源利用狀況,如CPU、RAM、網路、檔案系統等。
  • Kube-Proxy: Kube-Proxy 負責實現是網絡代理和負載平衡,根據傳入請求的 IP 和Port,Kube-Proxy 會將流量轉發到指定的合適的容器中。