kubernetes是一個開源的容器編排系統,可實現容器化應用程序的自動部署、水平擴展和管理。kubernetes集羣是master/nodes
的架構,master是管理節點,通常由3個節點組成,nodes節點稱爲工做節點,節點要多至上千個。node
更詳細的請參考官方文檔: https://kubernetes.io/zh/docs/concepts/overview/components/docker
master節點上的組件: API Server,Scheduler,Controller-Manager後端
API Server: 它提供了各種資源的增、刪、改、查以及watch等的接口,是整個kubernetes系統的中心。如Pod、Replication Controller、Service等資源。網絡
Scheduler: 調度器,默認調度器爲kube-scheduler,調度器經過 kubernetes 的 watch 機制來發現集羣中新建立且還沒有被調度到 Node 上的 Pod,調度器會將發現的每個未調度的 Pod 調度到一個合適的 Node 上來運行。架構
node節點上的組件: kubelet, 容器運行時(通常指docker引擎),kube-proxy負載均衡
kubelet: kubelet是在每一個Node節點上運行的主要 「節點代理」ide
kube-proxy: kube-proxy是每一個Node節點上運行的網絡代理,它做爲附件(addons)運行,自託管在kubernets上,
幫忙負責生成iptabels或ipvs規則,kubenetes1.11版本後(包含1.11)默認使用ipvs,以前的版本默認使用iptables。spa
kubernetes管理和調度的最小單位是Pod
,這只是一個邏輯上的概念,一個pod是運行一個或多個應用容器,Pod中的每一個容器共享網絡名字空間。代理
在node節點上把關係比較緊密的容器打上標籤歸成一類pod,而後經過Label Selector
對打上的標籤進行過濾,這樣node節點就能利用標籤選擇器來選擇出咱們須要的一類容器。code
Pod分類:
第一類. 自主式Pod 用戶向API Server發送建立一個Pod的請求,經過Scheduler選擇一個node後向kubelet發送任務,kubelet並建立好相應的Pod,當該node宕機後,該Pod從集羣中消失,不能自動遷移到其餘node。 第二類. 控制器管理的Pod ReplicationController,簡稱RC,副本控制器,它能實現始終按照用戶指定的目標狀態,在node上運行指定個數的Pod,當其中某個Pod因故障被kill後,能自動尋找合適的node,在其上運行相應的Pod,始終能保證指定個數的Pod數量。它還能實現Pod的滾動更新,並能實現回滾操做。 ReplicaSet,簡稱RS, 副本控制器: 通常不直接使用,它有一個聲明式的控制器,叫Deployment Deployment控制器,只能管理無狀態應用,Deployment還支持二級控制器,叫HPA(HorizontalPodAutoscaler),水平自動伸縮控制器,能實現自動擴容和縮容 StatefulSet 有狀態副本集控制器,管理有狀態應用 DaemonSet控制器,在每一個node上運行一個副本時使用 Job 做業控制器, Ctonjob 週期性做業控制器:
Pod是有生命週期的,一個Pod隨時都有可能被殺掉,也隨時可能有Pod被建立,因此客戶端程序要想訪問Pod中容器提供的服務,kubernetes引入了一箇中間層service,工做在Pod之上,客戶端程序直接訪問service,只要service不被刪除,那IP地址就固定,service做爲服務訪問的入口。
service是靠標籤選擇器來關聯Pod的,只要標籤相同就被關聯。service不是什麼應用程序,也不是實體組件,它只是一個iptables的一個DNAT規則,若是service後端的Pod是個時,iptables的DNAT就是多目標的負載均衡轉發,在kubernetes的1.11版中此種功能已使用ipvs(LVS)來實現。
kubernetes集羣須要三個網絡,物理主機網卡所在網絡稱爲主機節點網絡
,service上有個IP地址,此IP地址是虛擬的,只存在於iptables或ipvs中,此網絡稱爲service網絡
,Pod所在網絡稱爲pod網絡
同一個Pod內的多個容器共享網絡名稱空間,可使用lo迴環地址通訊
各Pod之間通訊經過隧道轉發報文來實現疊加網絡(Overlay Network) 來通訊
Pod與Service之間通訊是經過iptables或ipvs規則調度
Container Network Interface,容器網絡接口API。
實現CNI的組件: