1. 程式人生 > >K8S基礎學習-了解kubernetes機理

K8S基礎學習-了解kubernetes機理

除了 存儲 用戶名 刪除 .com 實例 學習 ESS 一致性

kubernetes集群分為倆部分:

kubernetes控制平面

工作節點

控制平面的組件:

etcd分布式持久化存儲

API服務器

調度器

控制器管理器

這些組件用來存儲,管理集群狀態。但他們不是運行應用的容器。

工作節點上的組件:

kubelet

kube-proxy

docker

附加組件:提供額外的功能

DNS服務器

儀表板DASHBOARD

INGRESS控制器

性能監控工具 HEAPSTER METRICS

容器網絡接口插件 FLANNEL CALICO  

技術分享圖片

組件間如何通信

組件間只能通過API服務器通信,它們之間不會直接通信。API服務器是和ETCD通信的唯一組件,其他組件不會直接和ETCD通信,而是通過API服務器來修改集群狀態。

API服務器和其他組件的連接基本都是由組件發起的。

如果使用kubectl來連接容器時,API服務器會向kubelet發起連接。

高可用性: etcd和api服務器的多個實例可以同時並行工作,但是,調度器和控制器管理器只能有一個實例起作用,其他實例處於待命模式。

etcd是k8s存儲集群狀態和元數據的唯一的地方。

ETCD集群需要對系統的實際狀態保持一致,使用的是一致性算法(腦裂算法)如果分裂成不互聯的節點組,包含節點多的可以更改狀態,小的不可以。恢復連接後,第二個組會更新成第一個的狀態。

因此,etcd實例數量應該是奇數,偶數分裂更加容易因為數量相同而宕機。

k8s API服務器作為中心組件,其他組件或客戶端都會去調用它,以RESTful的形式提供了可以查詢,修改集群狀態的CRUD(Create,Read,Update,Delete),並將狀態存儲到etcd中。

API服務器除了提供一種一致的方式將對象存儲到etcd,也對這些對象做校驗,這樣客戶端就無法存入非法對象。

技術分享圖片

通過認證插件認證客戶端,用戶信息可以從客戶端證書或者HTTP標頭獲取。插件抽取客戶端的用戶名,用戶ID和歸屬組。

通過授權插件授權客戶端,確認用戶是否有權限執行操作。

通過準入控制插件驗證資源請求

技術分享圖片

驗證資源以及持久化存儲

請求通過了所有的準入控制插件後,API服務器會驗證存儲到ETCD的對象,然後返回一個響應給客戶端。

API服務器如何通知客戶端資源變更。

API服務器沒有做其他額外的工作。當你創建一個RS資源時,他不會去創建pod,同時它不會去管理服務的端點。那是控制器管理器的工作。

API服務器甚至沒有告訴這些服務器去做什麽。

調度器:

調度器做的就是通過API服務器更新pod的定義,然後API服務器再去通知kubelet。當目標節點上的kubelet發現該pod被調度到本節點,他就會創建並且運行pod的容器。

控制器:

API服務器只做了存儲資源到ETCD和通知客戶端有變更的工作。調度器只是給POD分配節點。控制器包括

技術分享圖片

控制器做了許多不同的事情,都通過API服務器監聽資源(部署,服務),不論是創建新對象還是更新,刪除已有對象,都對變更執行相應操作。

控制器執行一個"調和"循環,將實際狀態調整為期望狀態,然後將新的實際狀態寫入資源的status部分。

控制器之間不會直接通信,他們甚至不知道其他控制器的存在。

RC控制器自己不會去運行pod,會創建新的pod清單,發布到API服務器。讓調度器和kubelet來做調度工作並運行pod。

在POD中,有應用容器和基礎容器,

技術分享圖片

K8S基礎學習-了解kubernetes機理