●Kubernetes是Google在2014年開源的一個容器集羣管理系統,Kubernetes簡稱K8S
●K8S用於容器化應用程序的部署,擴展和管理
●K8S提供了容器編排,資源調度,彈性伸縮,部署管理,服務發現等一系類功能
●Kubernetes目標是讓部署容器化應用簡單高效
●自我修復:
●彈性伸縮:
●自動部署和回滾:
●服務發現和負載均衡:
●機密和配置管理:
●存儲編排:
●批處理:
●分爲兩個可用區,當進行更新時,會先停止可用區A的容器並更新,不會停掉B區的功能,讓服務區B的容器去接待服務,當A區更新完畢測試能否通過負載均衡調度A區的主機,如果A區的主機能夠進行訪問,會將B區主機停止去更新,讓A區上線
就是滾動式更新;適用於在線節點不能斷的,體量大的
master端:
●Kubectl:管理人員操作的命令,提供服務的是node節點裏面跑的container容器
●客戶端訪問的入口:
●Auth:對管理員進行身份驗證(驗證是否具備管理權限)
●API Server:核心;管理端的唯一訪問入口,所有的node節點安排都聽從API Server,它是一種node節點管理和任務分配機制;各組件協調者,以RESTful API提供接口服務,所有對象資源的增刪改查和監聽操作都交給APIServer處理後再提交給Etcd存儲;有一個點注意:當API Server宕掉後,只要後面node節點沒宕掉,客戶還是可以訪問的
●Etcd:分佈式鍵值存儲系統。用於保存集羣狀態數據,比如Pod Server等對象信息
理解爲記賬本(記錄集羣的所有信息)具有自動發現的功能,當創建一個新的資源信息,但是Etcd裏面沒有記錄了,那就是API出現了問題
●Controller-manager:控制資源的定義(無狀態還是有狀態),處理集羣中常規後臺任務,一個資源對應一個控制器,而ControllerManger就是負責管理這些控制檯的
●Scheduler:調度器(調度算法):根據調度算法爲新創建的Pod選擇一個Node節點,可以任意部署,可以部署再同一個節點上,也可以部署在不同的節點上;理解爲:資源創建好後,API交給它,讓他監測後面節點的狀況,對健康狀態進行統計,然後通過調度算法決定分配任務給後面的某個節點,並且告訴API服務適合創建在哪個節點上,API會再次將信息記錄在Etcd當中,注意:當人爲指定了服務創建在哪個節點,就不需要scheduler去調度
node端:
●管理員訪問入口:
●Kubelet:master端的執行代理,是Master在Node節點上的Agent,管理本機運行容器的生命週期,比如創建容器,Pod掛載數據卷,下載secret,獲取容器和節點狀態等工作。kubelet將每個Pod轉換成一組容器
●Pod:基本管理單元可以理解爲容器的集合;一個Pod可以跑多個容器,但是生產環境中一個POD只跑一個容器;管理docker容器的
●Kube-proxy:在Node節點上實現Pod網絡代理,維護網絡規劃和四層負載均衡工作
●Docker或rocket:容器引擎,運行容器
●Pod:
●Controllers:
●Service:
●Label:
●Namespaces:
●Annotations:
●Minikube
●Kubeadm
●二進制包
●Overlay Network:覆蓋網絡,在基礎網絡上疊加的一種虛擬網絡技術模式,該網絡中的主機通過虛擬鏈路連接起來,真實的物理網絡基礎上架出虛擬網絡
●VXLAN:將源數據包裝封裝到UDP,並使用基礎網絡的IP/MAC作爲外層報文頭進行封裝,然後在以太網上傳輸,到達目的地後由隧道端點解封裝並將數據發送給目標地址
●Flannel:是Overlay網絡的一種,也是將數據包封裝在另一個網絡包裏面進行路由轉發和通信,目前已經支持UDP,VXLAN,AWS VPC和GCE路由等數據轉發方式
●容器封裝過程:
1.現在有一個有效數據:「hellow world」;傳給對方節點的容器,必須先封裝IP包頭(屬於虛擬網絡)flannel幫忙封裝的,前面會有虛擬IP對應的MAC地址封裝;(這種也是同一節點的兩個容器互通的過程)
2.和其他節點的容器通訊,就需要再封裝一層物理IP(ens33網絡地址)+物理IP對應的MAC地址
3.到目標節點時,就會將物理層脫掉,留下flannel能識別的信息
4.flannel組件會將虛擬IP的那層脫掉,之後就剩下有效數據
所以真正的有效數據只有後面三層