對于每個想落地kubernetes應用的工程師來說,熟悉kubernetes的架構和工作原理是必經之路,也是必須知道的知識,只有了解kubernetes的架構和工作原理才能更好的應用kubernetes 。
Kubernetes最初源于谷歌內部的Borg,提供了面向應用的容器集群部署和管理系統,所以整體的架構和borg很相似,整個架構有api server,control manager,scheduler,etcd,kubelet,kube-proxy,network-plugin等相關組件完成,整體架構如下:
Api server,Control manager,Scheduler,Etcd屬于master節點,相關組件功能如下:
1.Etcd:保存了整個集群的狀態;
2.Apiserver:提供了資源操作的唯一入口,并提供認證、授權、訪問控制、API注冊和發現等機制;
3.Controller manager:負責維護集群的狀態,比如故障檢測、自動擴展、滾動更新等;
4.Scheduler:負責資源的調度,按照預定的調度策略將Pod調度到相應的機器上;
Kubelet,Container runtine,Kube-proxy屬于woker節點,相關組件功能如下:
1.kubelet:負責維護容器的生命周期,同時也負責Volume(CSI)和網絡(CNI)的管理;
2.Container runtime:負責鏡像管理以及Pod和容器的真正運行(CRI);
3.kube-proxy:負責為Service提供cluster內部的服務發現和負載均衡;
如下為kubernetes的整個工作流程圖:
下面為一個個pod創建過程:
1.用戶提交創建Pod的請求,可以通過API Server的REST API ,也可用Kubectl命令行工具,支持Json和Yaml兩種格式;
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,docker run,scheduler會調用API在數據庫etcd中創建一個bound pod對象,描述在一個工作節點上綁定運行的所有pod信息。運行在每個工作節點上的Kubelet也會定期與etcd同步bound pod信息,一旦發現應該在該工作節點上運行的bound pod對象沒有更新,則調用Docker API創建并啟動pod內的容器;
在這期間,Control Manager同時會根據kubernetes的mainfiles文件執行rc pod的數量來保證指定的pod副本數。而其他的組件,比如scheduler負責pod綁定的調度,從而完成整個pod的創建。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。