Kubernetes做爲容器編排生態圈中重要一員,是Google大規模容器管理系統borg的開源版本實現,吸取借鑑了google過去十年間在生產環境上所學到的經驗與教訓。 Kubernetes提供應用部署、維護、 擴展機制等功能,利用Kubernetes能方便地管理跨機器運行容器化的應用。當前Kubernetes支持GCE、vShpere、CoreOS、OpenShift、Azure等平臺,除此以外,也能夠直接運行在物理機上.kubernetes是一個開放的容器調度管理平臺,不限定任何一種言語,支持java/C++/go/python等各種應用程序 。
kubernetes是一個完備的分佈式系統支持平臺,支持多層安全防禦、准入機制、多租戶應用支撐、透明的服務註冊、服務發現、內建負載均衡、強大的故障發現和自我修復機制、服務滾動升級和在線擴容、可擴展的資源自動調度機制、多粒度的資源配額管理能力,完善的管理工具,包括開發、測試、部署、運維監控,一站式的完備的分佈式系統開發和支撐平臺。前端
實際上,使用Kubernetes只需一個部署文件,使用一條命令就能夠部署多層容器(前端,後臺等)的完整集羣java
(1)Podnode
Pod是Kubernetes中最小部署單元,全部的容器均在Pod中運行,一個Pod能夠承載一個或者多個相關的容器。Pod中容器共享存儲和網絡,同一個Pod中的容器會部署在同一個docker宿主機上而且可以共享資源。python
(2)Serviceweb
Service是一個應用服務抽象,定義了Pod邏輯集合和訪問這個pod集合的策略(好比訪問策略)。Service代理Pod集合對外表現爲一個訪問入口,分配一個機器IP地址,來自這個IP的請求將負載均衡轉發到後端Pod中的容器。Service經過Lable Selector選擇一組Pod提供服務。算法
(3)Volumedocker
數據卷後端
(4)Namespaceapi
是kubernetes系統中的另外一個重要的概念,經過將系統內部的對象「分配」到不一樣的Namespace中,造成邏輯上分組的不一樣項目、小組或用戶組,便於不一樣的分組在共享使用整個集羣的資源的同時還能被分別管理。Kubernetes集羣在啓動後,會建立一個名爲「default」的Namespace,若是不特別指明Namespace,則用戶建立的Pod、RC、Service都被系統建立到「default」的Namespace中。安全
(5)Label
Label機制是K8S中一個重要設計,經過Label進行對象弱關聯,靈活地分類和選擇不一樣服務或業務,讓用戶根據本身特定的組織結構以鬆耦合方式進行服務部署。Label是一對KV,對用戶而言很是有意義的,但對K8S自己而言沒有直接意義的。Label能夠在建立對象時指定,也能夠在後期修改,每一個對象能夠擁有多個標籤,但key值必須是惟一的。
(6)RC(Replication Controller)
Replication Controller確保任什麼時候候Kubernetes集羣中有指定數量的pod副本(replicas)在運行, 若是少於指定數量的pod副本(replicas),Replication Controller會啓動新的Container,反之會殺死多餘的以保證數量不變。Replication Controller使用預先定義的pod模板建立pods,一旦建立成功,pod 模板和建立的pods沒有任何關聯,能夠修改pod 模板而不會對已建立pods有任何影響,也能夠直接更新經過Replication Controller建立的pods。對於利用pod 模板建立的pods,Replication Controller根據label selector來關聯,經過修改pods的label能夠刪除對應的pods。
(7)Deployment
Kubernetes Deployment提供了官方的用於更新Pod和Replica Set(下一代的Replication Controller)的方法,您能夠在Deployment對象中只描述您所指望的理想狀態(預期的運行狀態),Deployment控制器爲您將如今的實際狀態轉換成您指望的狀態,例如,您想將全部的webapp:v1.0.9升級成webapp:v1.1.0,您只需建立一個Deployment,Kubernetes會按照Deployment自動進行升級。如今,您能夠經過Deployment來建立新的資源(pod,rs,rc),替換已經存在的資源等。
Deployment集成了上線部署、滾動升級、建立副本、暫停上線任務,恢復上線任務,回滾到之前某一版本(成功/穩定)的Deployment等功能,在某種程度上,Deployment能夠幫咱們實現無人值守的上線,大大下降咱們的上線過程的複雜溝通、操做風險。
(8)StatefulSet
使用Deployment建立的Pod是無狀態的,當掛在Volume以後,若是該Pod掛了,Replication Controller會再run一個來保證可用性,可是因爲是無狀態的,Pod掛了的時候與以前的Volume的關係就已經斷開了,新起來的Pod沒法找到以前volume。StatefulSet 的目的就是給爲數衆多的有狀態負載提供正確的控制器支持。
當應用有如下任意要求時,StatefulSet的價值就體現出來了。
● 穩定的、惟一的網絡標識。
● 穩定的、持久化的存儲。
● 有序的、優雅的部署和擴展。
● 有序的、優雅的刪除和中止。
(9)DaemonSet
DaemonSet可以讓全部(或者一些特定)的Node節點運行同一個pod。當節點加入到kubernetes集羣中,pod會被(DaemonSet)調度到該節點上運行,當節點從kubernetes集羣中被移除,被(DaemonSet)調度的pod會被移除,若是刪除DaemonSet,全部跟這個DaemonSet相關的pods都會被刪除。
(10)Job
在有些場景下,是想要運行一些容器執行某種特定的任務,任務一旦執行完成,容器也就沒有存在的必要了。在這種場景下,建立pod就顯得不那麼合適。因而就是了Job,Job指的就是那些一次性任務。經過Job運行一個容器,當其任務執行完之後,就自動退出,集羣也再也不從新將其喚醒。還能夠執行定時任務。
1.kubectl
客戶端命令行工具,將接受的命令格式化後發送給kube-apiserver,做爲整個系統的操做入口。
2.kube-apiserver
做爲整個系統的控制入口,以REST API服務提供接口。
3.kube-controller-manager
用來執行整個系統中的後臺任務,包括節點狀態情況、Pod個數、Pods和Service的關聯等。
4.kube-scheduler
負責節點資源管理,接受來自kube-apiserver建立Pods任務,並分配到某個節點。
5.etcd
負責節點間的服務發現和配置共享。
6.kube-proxy
運行在每一個計算節點上,負責Pod網絡代理。定時從etcd獲取到service信息來作相應的策略。
7.kubelet
運行在每一個計算節點上,做爲agent,接受分配該節點的Pods任務及管理容器,週期性獲取容器狀態,反饋給kube-apiserver。
8.DNS
一個可選的DNS服務,用於爲每一個Service對象建立DNS記錄,這樣全部的Pod就能夠經過DNS訪問服務了。
1.Kubectl(user commands): k8s APIs客戶端工具,經過用戶輸入命令操做APIs資源
2.認證,用戶輸入命令要經過APIs的認證
3.認證經過以後,交由APIs中REST中對象處理(Kubernetes以RESTFul形式開放接口,用戶可操做的REST對象有三個Pod,service,controller)
4.APIs中的操做處理都會持久化存儲到一個分佈式存儲etcd
5.Scheduler調度組件,會檢測REST對象中是否有新的動做產生,並將具體操做,根據算法下發到node節點中
6.Controller經過API Server提供的接口實時監控整個集羣的每一個資源對象的當前狀態,當發生各類故障致使系統狀態發生變化時,會嘗試將系統狀態修復到「指望狀態」
7.kubeletl相似於一個agent,處理AIPs下發的任務,如建立Pod、容器、獲取節點信息等
8.proxy負責網絡代理,Service具體實現就是有proxy處理,維護網絡規則和四層負載均衡工做