kubernetes概述
kubernetes面世不過短短幾年時間,kuberenetes已經成為容器編排領域事實上的標准,無論是公有雲,私有雲或混合雲,kubernetes都將作為一個為任何應用,任何環境提供容器管理框架無處不在。
簡述什么是kubernetes?
kubernetes(來自希臘語,意為什“舵手”或“飛行員”)由Joe Beda,Brendan Burns和Craig McLuckie創立,而后Google的其他幾位工程師等共同研發,並由google在2014年首次對外宣布,kubernetes的開發和涉及深受Google內部系統Borg的影響,事實上,它的許多頂級貢獻者之前也是Borg系統的開發者。
Borg是Google內部使用的大規模集群管理系統,它構建於容器技術之上,目的是實現資源管理的自動化,以及跨多個數據中心的資源利用最大化,2015年4月,borg論文伴隨kubernetes宣傳被Google首次公開。
事實,正是容器世家Google,並站在borg巨人的肩膀上,充分受益 於Borg過去數十年積累的經驗和教訓,kubernetes一面世受到關注和青睞,並迅速稱霸容器編排技術領域,很多人將kubernetes視為borg系統的一個開源實現版本,在Google內部,kubernetes的原始代號曾經是serven of Nine即星際迷航中友好的Borg角色,它標識中的舵輪有7個輪輻就是對該項目代號的致意。
kubernetesv1.0在2015年7月21發布,緊隨其后,Google與linux基金會合作組建了Cloud Native Computing Foundation (雲原生計算基金會簡稱CNCF)並將kubernetes作為核心技術對其提供。在此以后,kubereetes進入了版本快速迭代時期,,從此不斷融入了新功能,如Federation,Network Policy API,RBAC,CRD和CSI,等等,增加了對windows系統的支持。
kubernetes特點: kuberentes是一種由於在一組主機上運行和協通容器化應用程序的系統,旨在提供可預測可擴展性與高可用的方法來管理容器化應用程序和服務的生命周期的平台,用戶可以定義應用程序的運行方式,以及與其他應用程序或外部世界交互的途徑,並能實現服務的擴容和伸縮,執行平滑滾動更新,以及在不同版本的應用程序之間調度流量以及測試功能或者回滾有問題的部署,kuberentes提供了接口和可組合的平台。使得用戶能夠以高度的靈活性和可靠性定義以及管理應用程序。 有以下特點: 1.自動裝箱 2.自我修復(自愈) 3.水平擴展 4.服務發現和負載均衡 5.自動發布和回滾 6.密鑰和配置管理 7.存儲編排 8.批量處理執行
kubernetes集群的核心組件 一個典型的kubernetes集群由多個工作節點和一個集群控制平面即Master來組成。 Master組件:kubernetes的集群控制平面由多個組件組成。這些組件統一運行單一的master節點,也可以以多副本的方式同時運行在多個節點,以為master提供高可用功能,甚至可以運行在kubernetes集群之上,master主要包含以下幾個組件。 kube-apiserver:Kubernetes API server 為 api 對象驗證並配置數據,包括 pods、 services、 replicationcontrollers 和其它 api 對象,API Server 提供 REST 操作和到集群共享狀態的前端, 所有其他組件通過它進行交互。 kube-controller-manager:Controller Manager 作為集群內部的管理控制中心,負責集群內的 Node、Pod 副本、服務端點(Endpoint)、命名空間(Namespace)、服務賬號(ServiceAccount)、 資源定額(ResourceQuota)的管理,當某個 Node 意外宕機時,Controller Manager 會及時發 現並執行自動化修復流程,確保集群始終處於預期的工作狀態。 kube-scheduler: 是一個擁有豐富策略、能夠感知拓撲變化、支持特定負載的功能組件,它對 集群的可用性、性能表現以及容量都影響巨大。scheduler 需要考慮獨立的和集體的資源需 求、服務質量需求、硬件/軟件/策略限制、親和與反親和規范、數據位置、內部負載接口、 截止時間等等。如有必要,特定的負載需求可以通過 API 暴露出來。 etcd etcd key-value,只有master可以訪問 etcd是CoreOS公司開發目前是kubernetes默認使用的key-value數據存儲系統,用於保存所有集群數據,支持分布式集群功能,生產環境使用需要為etcd數據提供定期備份機制。 Node節點: kube-proxy::Kubernetes 網絡代理運行在 node 上,它反映了 node 上 Kubernetes API 中定 義的服務,並可以通過一組后端進行簡單的 TCP、UDP 流轉發或循環模式(round robin)) 的 TCP、UDP 轉發,用戶必須使用 apiserver API 創建一個服務來配置代理,其實就是 kubeproxy 通過在主機上維護網絡規則並執行連接轉發來實現 Kubernetes 服務訪問。 kubelet:是主要的節點代理,它會監視已分配給節點的pod功能如下: 向master匯報node節點的狀態信息 接受指令並在pod中創建docker容器 准備pod所需要的數據卷 返回pod的運行狀態 在node節點執行容器健康檢查 容器運行時環境 每個 容器都要提供一個容器運行時環境,它復制下載鏡像並運行容器,kubelet並未固定鏈接至容器運行時的環境,而是以插件的方式載入配置的容器環境。