Kubernetes是Google在2014年6月開源的一個容器集羣管理系統,使用Go語言開發,Kubernetes也叫K8S。
K8S是Google內部一個叫Borg的容器集羣管理系統衍生出來的,Borg已經在Google大規模生產運行十年之久。
K8S主要用於自動化部署、擴展和管理容器應用,提供了資源調度、部署管理、服務發現、擴容縮容、監控等一整套功能。
2015年7月,Kubernetes v1.0正式發佈,截止到2018年1月27日最新穩定版本是v1.9.2。
Kubernetes目標是讓部署容器化應用簡單高效。算法
官方網站:www.kubernetes.iodocker
pod中容器之間共享數據,能夠使用數據卷數據庫
容器內服務可能進程堵塞沒法處理請求,能夠設置監控檢查策略保證應用健康性。後端
控制器維護着pod副本數量,保證一個pod或一組同類的pod數據始終可用api
根據設定的指定(cpu利用率) 自動縮放pod副本數網絡
使用環境變量或DNS服務插件保證容器中的程序發現pod入口訪問地址.架構
一組pod副本分配一個私有的集羣IP地址,負載均衡轉發請求到後端容器。在集羣內部其它pod可經過這個clusterIP訪問應用。負載均衡
更新服務不中斷,一次更新一個pod,而不是同時刪除整個服務。分佈式
經過文件描述部署服務,使得應用程序部署變得更高效工具
Node節點組件集成cAdvisor資源收集工具,可經過heapster彙總整個集羣節點資源數據。而後存儲到InfluxDB時序數據庫,再由Grafana展現
支持角色訪問控制(RBAC)認證受權等策略
Pod是最小部署單元,一個pod有一個或多個容器組成,pod中容器共享存儲和網絡,在同一臺docker主機上運行。
Service一個應用服務抽象,定義了pod邏輯集合和訪問這個pod集合的策略
Service代理Pod集合對外表現是爲一個訪問入口,分配一個集羣IP地址,來自這個IP的請求將負載均衡轉發後端Pod中的容器。
Service經過lable selector選擇一組pod提供服務
數據卷,共享pod中容器使用的數據。
命名空間將對象邏輯上分配到不一樣Namespace,能夠是不一樣的項目,用戶等區分管理,並設定控制策略,
標籤用於區分對象(好比Pod,Service),鍵/值對存在,每一個對象能夠有多個標籤,經過標籤關聯對象
下一代Replication Controller。確保任何給定時間指定的Pod副本數量,並提供聲明式更新等功能。
RC與RS惟一區別就是lable selector支持不一樣,RS支持新的基於集合的標籤,RC僅支持基於等式的標籤。
Deployment是一個更高層次的API對象,它管理ReplicaSets和Pod,並提供聲明式更新等功能。
官方建議使用Deployment管理ReplicaSets,而不是直接使用ReplicaSets,這就意味着可能永遠不須要直接操做ReplicaSet對象。
StatefulSet適合持久性的應用程序,有惟一的網絡標識符(IP),持久存儲,有序的部署、擴展、刪除和滾動更新。
DaemonSet確保全部(或一些)節點運行同一個Pod。當節點加入Kubernetes集羣中,Pod會被調度到該節點上運行,當節點從集羣中移除時,DaemonSet的Pod會被刪 除。刪除DaemonSet會清理它全部建立的Pod。
一次性任務,運行完成後Pod銷燬,再也不從新啓動新容器。還能夠任務定時運行。
k8s API,集羣的統一入口,各組件協調者,以HTTP API提供接口服務,全部對象資源的增刪改查和監聽操做都交給APIServer處理後再提交給Etcd存儲。
處理集羣中常規後臺任務,一個資源對應一個控制器,而ControllerManager就是負責管理這些控制器的
根據調度算法爲新建立的pod選擇一個Node節點
kubelet是Master在Node節點上的Agent,管理本機運行容器的生命週期,好比建立容器,Pod掛載數據卷
下載secret、獲取容器和節點狀態等工做。kubelet將每一個pod轉換成一組容器。
在Node節點上實現pod網絡代理,維護網絡規則和四層負載均衡工做
運行容器
分佈式鍵值存儲系統。用於保持集羣狀態,好比pod,service等對象信息。