雲端容器化技術與資源調度
認識 Kubernetes 的基本觀念
Kubernetes 是什麼?
- Kubernetes (簡稱 K8S),是 Google 開源出來的容器管理(Orchestration) 平台。
- 透過分散式架構,來進行容器的部署、維運、擴充。
K8S 可達成什麼目標?
- 自動進行工作負載均衡
- 藍/綠部署
- 滾動部署
- 管理無狀態 / 有狀態應用程式
- 觸發定時作業 (Cron Job)
- 原生提供服務發現(Service Discovery) 功能
- 提供各種軟硬體整合介面
一致性的部署操作
- 地端 / 雲端
- 裸機 / VM
各種版本的下 K8S 都使用同一套 API 來操作,管理方式完全一致。
K8S 架構
- 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 會將流量轉發到指定的合適的容器中。