kubernetes基礎架構及原理


kubernetes簡稱“k8s” 其中“8”代表的是“k”和“s”中間的8個字母。

k8s是Google公司開發的Borg項目中獨立出來的容器編排工具,然后將其捐獻給CNCF這個組織,然后發揚光大。

 

Kubernetes主要由以下幾個核心組件組成:

  • etcd保存了整個集群的狀態;
  • apiserver提供了資源操作的唯一入口,並提供認證、授權、訪問控制、API注冊和發現等機制;
  • controller manager負責維護集群的狀態,比如故障檢測、自動擴展、滾動更新等;
  • scheduler負責資源的調度,按照預定的調度策略將Pod調度到相應的機器上;
  • kubelet負責維護容器的生命周期,同時也負責Volume(CVI)和網絡(CNI)的管理;
  • Container runtime負責鏡像管理以及Pod和容器的真正運行(CRI);
  • kube-proxy負責為Service提供cluster內部的服務發現和負載均衡;

除了核心組件,還有一些推薦的Add-ons:

  • kube-dns負責為整個集群提供DNS服務
  • Ingress Controller為服務提供外網入口
  • Heapster提供資源監控
  • Dashboard提供GUI
  • Federation提供跨可用區的集群
  • Fluentd-elasticsearch提供集群日志采集、存儲與查詢

 

k8s基礎架構:

 

k8s各組件間工作流程:

①運維人員向kube-apiserver發出指令(我想干什么,我期望事情是什么狀態)(以下kube-apiserver簡稱apiserver、kube-controller-manager簡稱controller、kube-scheduler簡稱scheduler)

②api響應命令,通過一系列認證授權,把pod數據存儲到etcd,創建deployment資源並初始化。(期望狀態)

③controller通過list-watch機制,監測發現新的deployment,將該資源加入到內部工作隊列,發現該資源沒有關聯的pod和replicaset,啟用deployment controller創建replicaset資源,再啟用replicaset controller創建pod。

④所有controller被創建完成后.將deployment,replicaset,pod資源更新存儲到etcd。

⑤scheduler通過list-watch機制,監測發現新的pod,經過主機過濾、主機打分規則,將pod綁定(binding)到合適的主機。

⑥將綁定結果存儲到etcd。

⑦kubelet每隔 20s(可以自定義)向apiserver通過NodeName 獲取自身Node上所要運行的pod清單.通過與自己的內部緩存進行比較,新增加pod。

⑧kubelet創建pod。

⑨kube-proxy為新創建的pod注冊動態DNS到CoreOS。給pod的service添加iptables/ipvs規則,用於服務發現和負載均衡。

⑩controller通過control loop(控制循環)將當前pod狀態與用戶所期望的狀態做對比,如果當前狀態與用戶期望狀態不同,則controller會將pod修改為用戶期望狀態,實在不行會將此pod刪掉,然后重新創建pod。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM