用打比方的方法,10分鐘給你講清楚Kubernetes
Kubernetes容器編排系統背后的概念可能很難理解。這里做了一個簡單的類比:把房子里的房間出租,幫助你了解Kubernetes是如何工作的。
如何在房子里出租房間
想象一下你擁有一座有10個房間的房子。你想通過在線住宿服務出租其中的三個房間。你有兩個選擇:發布廣告,自己管理一切;雇人幫你做。
想省事兒,你決定雇傭一個租賃代理來處理這些事情。你與代理的合同規定:
- ——在任何時候,都應該有三個房間出租給客人。
- ——每個房間有兩張床。
- ——每次客人預訂時,鑰匙都需要在適當的時間交給客人。
- ——每次客人離開時,房間都要打掃干凈。
- ——如果有太多的預訂請求(例如在假日期間),那么可預訂的房間可以從3個增加到10個。
就這樣!你不用操什么心了,愿意的話可以不時地用電話聯系代理了解情況。
如何管理租賃
代理雇傭員工來滿足你的需求。假設有三個員工管理三個房間:一號房間預訂后,員工一確保房間狀況良好,提供鑰匙,清潔服務等。
床是最基本的實體,因為它是客人過夜的最低要求。
代理將員工、房間、床位、預訂等所有信息保存在筆記本上。代理還記錄員工的休假時間,以便在某個員工生病或休假時將另一名員工分配到房間。代理根據需要使用電話聯系員工。
當客人在線預訂房間時,預訂會被重定向到一個確保該房間準備就緒的員工。客人來了,拿到鑰匙,晚上睡在床上,走的時候打掃房間,然后重復這個循環。
這聽起來很簡單,但這和Kubernetes有什么關系?
Kubernetes的類似之處
你通過雇用其他員工的代理實現自動化,這與Kubernetes對應用程序的操作類似。下面是它的工作原理。
假設你是一個應用程序開發者。類比出租房中最基本的實體是床,應用程序(滿足用戶需求的最基本實體)運行在容器中。應用程序的“房間”稱為pod,它是應用程序運行的地方。
節點或工作節點本質上是一臺運行pod的機器。
代理的員工確保客房功能齊全。在Kubernetes里,你沒有員工,但有kubelet。kubelet是節點內的一個代理,它確保在該節點內運行的pod是健康的。
租賃代理對應于Kubernetes中的兩件事:kube-scheduler和kube-controller manager。就像代理決定應該將哪個房間分配給哪個員工一樣,kube-scheduler根據可用的資源及其需求來決定哪個pod在哪個節點上運行。記住,節點是一臺機器,而pod在節點內運行。就像代理決定員工下班時要做什么一樣,kube-controller manager決定當節點宕機或機器因任何原因停止工作時該做什么。
代理的筆記本上記錄了關于出租多少房間、有多少張床空著、哪個員工在做什么等所有細節,它與etcd數據存儲相對應。這就是配置數據存儲的地方,例如,如果你需要三個pod一直在運行。
Kubernetes中的主節點和worker節點類似于代理和員工用來通信的電話。主API-server類似于代理的電話,而每個worker節點的kube-proxy則類似于員工的電話。
API-server、etcd、kube-controller manager和kube-scheduler組成了這個Kubernetes實例的控制中心。
部署
你(房主)和代理之間的合同相當于在Kubernetes中的部署。部署包括一組需求,比如需要運行多少個pod,需要什么資源(例如CPU)等。Kubernetes確保無需人工干預即可滿足這些要求。
還記得協議中的額外條款嗎?如果有太多客人預訂,該怎么辦?這相當于Kubernetes中的自autoscaling。這意味著Kubernetes可以擴展你的服務,隨著應用程序用戶的增加,為你提供更多的pod,就像你可以在更多的客人試圖預訂時提供更多的房間一樣。正如你不能將預訂擴展到超過10個房間一樣,你可能需要為自動縮放設置一個上限,因為你不能隨意地繼續增加pod。