這二天玩了一下 minikube,把所理解的一些概念記錄一下~
整體的設計結構(請 AI 畫的精美圖片~)
當開始執行 K8s 的時候,一個 cluster 就算是誕生了。它就是像是一個大框框,接下來所有 k8s 所需要的資源都會被放在這個 cluster 裡面。在 cluster 裡面,基本上可以簡單的二分法成 主節點(master node) & 從節點(worker node)。
可以理解成是 K8s 的大腦,負責接受指令、監控跟管理 worker node。但它自己本身並不會去執行業務程式(例:實際在跑的網站或程式),實際在工作的是 worker node。
在 master node 裡,有幾個重要的元件:
實際在工作地方,像是開發的程式或服務都是放在這裡面來執行。
minikube kubectl -- get pods 指令,其實是能看到都是以 pod 的方式在運作。而 systemctl status kubelet 就能看到 kubelet 在作業系統上執行的狀況。在 K8s 裡,最小單位是 pod。而一個 Pod 裡面可以包含「一個或多個」 container。但雖然可以有多個 container,對 k8s 來說他還是只認識 pod,再底下的 container 它就不曉得了。
在實務上,一個 pod 裡面通常就只會放一個 container。好處是資源分配簡單,職責也較能切開。但 survey 的過程中有看到一個 sidecar 模式,像是把 log 蒐集後打出去、動態更新參數設定等,也就是這個第二個 container 是一種輔助的概念,跑得不是主程式。
看到最白話的解釋就是 deployment 的計畫書……。基本上就是告訴 k8s 要執行哪個 image,然後需要有幾個 pod,k8s 就會自動幫你維持這個數量。假設 pod 有遇到問題時,k8s 參考的依據就是這份 deployment。如果壞掉一個,那 k8s 就會自動建立一個新的 pod 來補上。
另外像 rolling deployment 也可以透過這份 deployment 計畫書來完成,只要把新版本的 image 做好,然後更新 deployment 的定義,k8s 就會自動的一個一個 pod 來進行 rolling 更新。


k8s 裡面可能會住了一堆 pod,而這些 pod 也可能都住在不同的 worker node,預設外部是都沒有辦法直接溝通,中間會需要透過 service 來進行溝通。所以從外面進來的請假求,第一關都是先到 service,然後 service 再把請求轉發給 pod。
自己照著書本在亂玩 minikube 的時候,的確有看到一種俄羅斯娃娃的概念。也就是在我的 EC2 主機上,會看到 minikube 的 container,然後這個 container 裡面,又再是 minikube 的各個元件的 container 在執行,的確是蠻特別的。不得不讚嘆一下 k8s 的架構的確是蠻多巧思的。