在叢集管理方面,kubernetes 將 cluster 中的機器劃分為一個 master 節點以及一群工作節點(node)。
master 節點上運作的叢集管理相關的一套代理:
kube-apiserver
kube-controller-manager
kube-scheduler
這一套管理系統實現了整個 cluster 的自動化的資源管理、pod 調度、彈性縮放、安全管控、系統監控、容錯 ... etc
node 作為叢集管理中的工作節點,執行真正的 application,在 node 中,k8s 管理的最小值行單位為 pod。
node 上運作的 k8s 的 kubelete、kube-proxy 相關服務,而他們負責著 pod 的建立、啟動、監控、重啟、刪除、load balance .... etc
最後,在來看看傳統 IT 系統中服務擴展 & 服務升級這兩大難題,以及 k8s 所提供的全新思維。服務的擴展涉及資源配置(比方說 ... 選擇哪個 node 擴充)、虛擬機器的部屬 & 啟動,在一個複雜的核心業務系統中,擴展 & 升級 這兩大難題基本上由人工一步一步操作才能達到,不僅費時費力,而 ... 只要有人力的介入 ... 就增加了容易發生「意外」的可能性。
在 kubernetes cluster中,只需為擴展的 service 對應的 pod 建立一個 Replication Controller (RC),接下來關於該 service 升級、擴展 ... 阿哩阿雜的麻煩問題看起來就不是那麼令人頭痛了。
Replication Controller 的設定檔必須包含幾個資訊:
再建立好 RC 後, k8s 就會自動建置好 pod (如果 ... RC 有「正常」跑起來的話...),k8s 會透過 RC 中定義的 label 篩選出對應的 pod 去監控其數量 & 狀態,若是 pod 數量少於定義的 replicas ,則會依局 RC 中定義的 pod 範本來多新增 pod ,將此 pod 調度到合適的 node 上啟動運作,直到滿足 replicas 。
上面提到自動新增 pod 的部分完全是自動化的。無須人工干預,是不是棒透了呢 \0.0/
有了 RC ,服務擴展變成了一個單純簡單的數字遊戲,只要修改 replicas 即可達成,要一個 pod 、兩個 pod 還是 N 個 pod ,只需要調整一個數字就可以完成,後須 service 升級的部分也將透過修改 RC 來完成。