工作原理:
原理圖

工作原理描述:
1>使用者通過kubectl或者API server的REST API接口,送出需要運作的docker容器(建立pod請求);
2>api server将建立pod的相關請求資料存儲到etcd(存儲中心)中;
3>scheduler監聽API server,查詢還未配置設定的Node的Pod,然後根據排程政策為這些Pod配置設定節點;
4>kube-let則負責在所在的Node節點上接收主節點發來的指令,管理Pod以及Pod中的容器,并定時向master主節點彙報節點資源的使用情況以及容器的情況;
5>controller-manager 則通過api-service監控整個叢集的狀态,并確定叢集處于預期的工作狀态
6>
基礎概念:
将Docker應用于具體的業務實作,是存在困難的——編排、管理和排程等各個方面,都不容易。于是,人們迫切需要一套管理系統,對Docker及容器進行更進階更靈活的管理。
K8S,就是基于容器的叢集管理平台,它的全稱,是kubernetes。
一個K8S系統,通常稱為一個K8S叢集(Cluster)。
這個叢集主要包括兩個部分:
一個Master節點(主節點)
一群Node節點(計算節點)
Master節點主要還是負責管理和控制。Node節點是工作負載節點,裡面是具體的容器。
Master節點包括API Server、Scheduler、Controller manager、etcd。
API Server是整個系統的對外接口,供用戶端和其它元件調用,相當于“營業廳”。
Scheduler負責對叢集内部的資源進行排程,相當于“排程室”。
Controller manager負責管理控制器,相當于“大總管”。
Node節點包括Docker、kubelet、kube-proxy、Fluentd、kube-dns(可選),還有就是Pod。
Pod是Kubernetes最基本的操作單元。一個Pod代表着叢集中運作的一個程序,它内部封裝了一個或多個緊密相關的容器。
除了Pod之外,K8S還有一個Service的概念,一個Service可以看作一組提供相同服務的Pod的對外通路接口。
Kubelet,主要負責監視指派到它所在Node上的Pod,包括建立、修改、監控、删除等。
Kube-proxy,主要負責為Pod對象提供代理。
Fluentd,主要負責日志收集、存儲與查詢。
1.ETCD[主節點安裝]
etcd服務是資料中心。用于持久化存儲資訊。要求高可用和資料一緻性。即多部署幾個master節點
存儲哪些資訊:k8s有本身的節點資訊、元件資訊、運作的pod、service都需要做持久化
2.kube-api-server[主節點安裝]
api-server提供叢集管理的API接口,包括認證授權、資料校驗、叢集狀态變更、其他子產品之間的資料互動和通信
其他子產品,都是通過api-server查詢操作資料,也就是說隻有api-server才能直接操作etcd
3.controllerManager[主節點安裝]
controllerManager是kubernetes的大腦,它通過api-service監控整個叢集的狀态,并確定叢集處于預期的工作狀态
組成:controller-manager是由 kube-controller-manager 和 cloud-controller-manager組成
kube-controller-manager是由 一系列控制器組成,Replication Controller控制副本、Node Controller節點控制、Deployment Controller管理deployment等等
cloud-controller-manager是在k8s啟用Cloud provider的時候,需要用來配合雲服務提供商的控制
4.Scheduler[主節點安裝]
kube-scheduler負責實作排程政策,配置設定排程Pod到叢集内的節點上,它監聽api-server,查詢還未配置設定的Node的Pod,然後根據排程政策為這些Pod配置設定節點
5.Calico[所有節點安裝]
Calico實作了CNI接口,是kubernetes網絡方案的一種選擇。
Calico在每一個計算節點利用Linux Kernel實作了一個高效的vRouter來負責資料轉發,
而每個vRouter通過BGP協定負責把自己上運作的workload的路由資訊像整個Calico網絡内傳播——小規模部署可以直接互聯,大規模下可通過指定的BGP route reflector來完成。 這樣保證最終所有的workload之間的資料流量都是通過IP路由的方式完成互聯的。
5.flannel[所有節點安裝]
kubernetes網絡方案的另一種選擇
6.kube-ctl[任意節點安裝]
kubectl是Kubernetes的指令行工具,是Kubernetes使用者和管理者必備的管理工具。
kubectl提供了大量的子指令,友善管理Kubernetes叢集中的各種功能。
7.kube-let[工作節點安裝]
kube-let就是會在每個工作節點上都運作一個kubelet服務程序,預設監聽10250端口。
kube-let負責接收并執行master發來的指令,管理Pod以及Pod中的容器。
每個kubelet程序會在API Server上注冊節點自身資訊,定期向master節點彙報節點的資源使用情況,并通過cAdvisor監控節點和容器的資源。
8.kube-proxy[工作節點安裝][對外]
kube-proxy保證叢集内的服務,可以被叢集外通路到。
每台工作節點上都應該運作一個kube-proxy服務,它監聽API server中service和endpoint的變化情況,并通過iptables等來為服務配置負載均衡,是讓我們的服務在叢集外可以被通路到的重要方式。
9.kube-dns[獨立服務][對内]
kube-dns保證叢集内的服務,可以被叢集内的pod互相通路到。
kube-dns為Kubernetes叢集提供命名服務,主要用來解析叢集服務名和Pod的hostname。目的是讓pod可以通過名字通路到叢集内服務。它通過添加A記錄的方式實作名字和service的解析。普通的service會解析到service-ip。headless service會解析到pod清單。