1、master和node
k8s中的master是集群控制節點,負責整個集群的管理和控制
在master上執行著以下關鍵程序:
**kube-apiserver:**提供了http rest介面的關鍵服務程序,是k8s裡所有資源的增刪改查等操作的唯一入口,也是集群控制的入口程序
kube-controller-manager:k8s裡所有資源物件的自動化控制中心,集群內各種資源controller的核心管理者,針對每一種資源都有相應的controller,保證其下管理的每個controller所對應的資源始終處於期望狀態
kube-scheduler:負責資源排程(pod排程)的程序,通過api server的watch介面監聽新建pod副本資訊,並通過排程演算法為該pod選擇乙個最合適的node
etcd:k8s裡的所有資源物件以及狀態的資料都被儲存在etcd中
2)、node
node是k8s集群中的工作負載節點,每個node都會被master分配一些工作負載,當某個node宕機時,其上的工作負載會被master自動轉移到其他節點上
在每個node上都執行著以下關鍵程序:
kubelet:負責pod對應的容器的建立、啟停等任務,同時與master密切協作,實現集群管理的基本功能
kube-proxy:實現kubernetes service的通訊與負載均衡機制的重要元件
docker engine:docker引擎,負責本機的容器建立和管理工作
在預設情況下kubelet會向master註冊自己,一旦node被納入集群管理範圍,kubelet程序就會定時向master匯報自身的資訊(例如機器的cpu和記憶體情況以及有哪些pod在執行等),這樣master就可以獲知每個node的資源使用情況,並實現高效均衡的資源排程策略。而某個node在超過指定時間不上報資訊時,會被master判定為失敗,node的狀態被標記為不可用,隨後master會觸發工作負載轉移的自動流程2、pod
每個pod都有乙個根容器的pause容器,還包含乙個或多個緊密相關的使用者業務容器
pod裡的多個業務容器共享pause容器的ip,共享pause容器掛接的volume。在k8s裡,乙個pod裡的容器與另外主機上的pod容器能夠直接通訊
pod有兩種型別:普通的pod及靜態pod(static pod)。後者並沒被存放在k8s的etcd儲存裡,而是被存放在某個具體的node上的乙個具體檔案中,並且只在此node上啟動、執行。而普通的pod一旦被建立,就會被放入etcd中儲存,隨後會被k8s的master排程到某個具體的node上並進行繫結(binding),隨後該pod被對應的node上的kubelet程序例項化成一組相關的docker容器並啟動。在預設情況下,當pod裡的某個容器停止時,k8s會自動檢測到這個問題並且重新啟動這個pod(重啟pod裡的所有容器),如果pod所在的node宕機,就會將這個node上的所有pod重新排程到其他節點上
3、k8s建立乙個pod的流程
1)、使用者提交建立pod的請求,可以通過api server的rest api,也可用kubectl命令列工具
2)、api server處理使用者請求,儲存pod資料到etcd
3)、schedule通過和api server的watch機制,檢視到新的pod,嘗試為pod繫結node
4)、過濾主機:排程器用一組規則過濾掉不符合要求的主機,比如pod指定了所需要的資源,那麼就要過濾掉資源不夠的主機
5)、主機打分:對第一步篩選出的符合要求的主機進行打分,在主機打分階段,排程器會考慮一些整體優化策略,比如把乙個replication controller的副本分布到不同的主機上,使用最低負載的主機等
6)、選擇主機:選擇打分最高的主機,進行binding操作,結果儲存到etcd中
7)、kubelet根據排程結果執行pod建立操作: 繫結成功後,會啟動container,scheduler會呼叫api在資料庫etcd中建立乙個bound pod物件,描述在乙個工作節點上繫結執行的所有pod資訊。執行在每個工作節點上的kubelet也會定期與etcd同步bound pod資訊,一旦發現應該在該工作節點上執行的bound pod物件沒有更新,則呼叫docker api建立並啟動pod內的容器
在這期間,control manager同時會根據k8s的mainfiles檔案執行rc pod的數量來保證指定的pod副本數。而其他的元件,比如scheduler負責pod繫結的排程,從而完成整個pod的建立
K8S的架構及工作原理
1 master和node k8s中的master是集群控制節點,負責整個集群的管理和控制 在master上執行著以下關鍵程序 kube apiserver 提供了http rest介面的關鍵服務程序,是k8s裡所有資源的增刪改查等操作的唯一入口,也是集群控制的入口程序 kube controlle...
K8s 原理架構介紹 一
kubernetes是當今最流行的開源容器管理平台,它就是大名鼎鼎的google borg的開源版本。google在2014年推出了kubernetes,本文發布時最新的版本是1.11。kubernetes源於希臘語,意為舵手,k8s是乙個簡稱,因為首尾字母中間正好有8個字母。基於容器技術,kube...
K8s 原理架構介紹 一
kubernetes是當今最流行的開源容器管理平台,它就是大名鼎鼎的google borg的開源版本。google在2014年推出了kubernetes,本文發布時最新的版本是1.11。kubernetes源於希臘語,意為舵手,k8s是乙個簡稱,因為首尾字母中間正好有8個字母。基於容器技術,kube...