antony@notes:~/kubernetes$ cat "HA-K8s-Control-plane-components-之間如何運作.md"
HA K8s Control-plane components 之間如何運作?
HA K8s Control-plane components 之間如何運作?
1. Preface
本篇文章會深度探討在高可用的 Kubernetes 叢集中,Control-plane nodes 上的 Components (kube-apiserver, etcd, …等)之間會如何運作,並借由 kubectl create 建立一個 Deployment 來實踐理論。
2. 先備知識

由以上 K8s 官網文件中的叢集架構圖可以看到單一台 Control-plane 內部的元件有 4 個,讓我們先來認識他們:
kube-apiserver: 負責接受前端管理者透過 CLI ( Command Line Interface, 命令模式 ) 或是在 Web UI 上面點點選選的方式下達的命令,並且kube-controller-manager和kube-scheduler要正常運作也需要對它呼叫 API Request。- 在接收到 API Request 後,還會對這個 request 進行身份的驗證,並確保該身份有足夠的權限可以執行 request 內要做的動作。
kube-controller-manager:負責維護 K8s 叢集的狀態,它會試圖將當前叢集狀態移動到更接近所需狀態的地方,例如偵測節點是否故障、偵測 Pod 是否毀損等,並作出回應,此時期望的狀態是節點跟 pod 是否處於健康,Controller-manager 會去確認這些狀態,並在故障時做出對應的處理。- 在這個元件裡面內定會執行很多個 controller processes。從邏輯上講,每個 controller 都是一個單獨的程序,但是為了降低複雜性,它們都被編譯到同一個可執行檔案,並在一個程序中執行,所以它會被稱為 manager。
- controller process 可以想像成執行 bash script while true 迴圈的一個程序,裡面會去比對 node, pod, …等物件當前的狀態與期望的狀態是否一致。
kube-scheduler: 負責監控新建立的 Pod ,選擇出最適合的節點讓 Pod 在上面運作。排程決策會有兩個階段,- Predicates (過濾) 階段:會先根據 pod 的規格檢查有哪些節點有足夠的硬體資源適合執行這個 pod。
- Priorities(評分) 階段:負責對通過 Predicates 的節點進行評分 (0-10 分),最終選擇分數最高的節點。
etcd:負責儲存 K8s 叢集的狀態,也就是 K8s 運作時產生的重要資料都會
