? 大部分概念Kubernete官網(wǎng)都有詳細介紹,Kubernete中文官網(wǎng) https://kubernetes.io/zh/docs/tutorials/kubernetes-basics/?

官網(wǎng)還提供一個比較好的功能是能在線互動,見互動教程,類似實操命令初步感受。
Kubernete主要功能
基于容器的應(yīng)用部署、維護和滾動升級
負載均衡和服務(wù)發(fā)現(xiàn)
跨機器和跨地區(qū)的集群調(diào)度
自動伸縮
無狀態(tài)服務(wù)和有狀態(tài)服務(wù)
廣泛的 Volume 支持
插件機制保證擴展性
Kubernetes是谷歌開源的容器集群管理系統(tǒng)
Kubernetes 提供了很多的功能,它可以簡化應(yīng)用程序的工作流,加快開發(fā)速度。使用Kubernetes只需一個部署文件,使用一條命令就可以部署多層容器(前端,后臺等)的完整集群。
核心概念
Kubernetes 主要由以下幾個核心組件組成:
etcd 保存了整個集群的狀態(tài);
apiserver 提供了資源操作的唯一入口,并提供認(rèn)證、授權(quán)、訪問控制、API 注冊和發(fā)現(xiàn)等機制;
controller manager 負責(zé)維護集群的狀態(tài),比如故障檢測、自動擴展、滾動更新等;
scheduler 負責(zé)資源的調(diào)度,按照預(yù)定的調(diào)度策略將 Pod 調(diào)度到相應(yīng)的機器上;
kubelet 負責(zé)維護容器的生命周期,同時也負責(zé) Volume(CVI)和網(wǎng)絡(luò)(CNI)的管理;
Container runtime 負責(zé)鏡像管理以及 Pod 和容器的真正運行(CRI);
kube-proxy 負責(zé)為 Service 提供 cluster 內(nèi)部的服務(wù)發(fā)現(xiàn)和負載均衡
?典型的Kubernetes架構(gòu)圖

上圖可以看到如下組件,使用特別的圖標(biāo)表示Service和Label:
Pod
Container(容器)
Label(
)(標(biāo)簽)

Replication Controller(復(fù)制控制器)
Service(服務(wù))
Node(節(jié)點)
Kubernetes Master(Kubernetes主節(jié)點)
Pod
Pod在節(jié)點上,包含一組容器和卷。同一個Pod里的容器共享同一個網(wǎng)絡(luò)命名空間,可以使用localhost互相通信。Pod是短暫的,不是持續(xù)性實體。如果Pod是短暫的,那么我怎么才能持久化容器數(shù)據(jù)使其能夠跨重啟而存在呢? Kubernetes支持卷的概念,因此可以使用持久化的卷類型。如果Pod是短暫的,那么重啟時IP地址可能會改變,那么怎么才能從前端容器正確可靠地指向后臺容器呢?這時可以使用Service。
Lable
一些Pod有Label。一個Label是attach到Pod的一對鍵/值對,用來傳遞用戶定義的屬性。比如,你可能創(chuàng)建了一個"tier"和“app”標(biāo)簽,通過Label(tier=frontend, app=myapp)來標(biāo)記前端Pod容器,使用Label(tier=backend, app=myapp)標(biāo)記后臺Pod。然后可以使用Selectors選擇帶有特定Label的Pod,并且將Service或者Replication Controller應(yīng)用到上面。
Replication Controller
Replication Controller確保任意時間都有指定數(shù)量的Pod“副本”在運行。如果為某個Pod創(chuàng)建了Replication Controller并且指定3個副本,它會創(chuàng)建3個Pod,并且持續(xù)監(jiān)控它們。如果某個Pod不響應(yīng),那么Replication Controller會替換它,保持總數(shù)為3.如下面的動畫所示:

如果之前不響應(yīng)的Pod恢復(fù)了,現(xiàn)在就有4個Pod了,那么Replication Controller會將其中一個終止保持總數(shù)為3。如果在運行中將副本總數(shù)改為5,Replication Controller會立刻啟動2個新Pod,保證總數(shù)為5。還可以按照這樣的方式縮小Pod,這個特性在執(zhí)行滾動升級時很有用。
當(dāng)創(chuàng)建Replication Controller時,需要指定兩個東西:
Pod模板:用來創(chuàng)建Pod副本的模板
Label:Replication Controller需要監(jiān)控的Pod的標(biāo)簽。
現(xiàn)在已經(jīng)創(chuàng)建了Pod的一些副本,那么在這些副本上如何均衡負載呢?我們需要的是Service。
Service
Service是定義一系列Pod以及訪問這些Pod的策略的一層抽象。Service通過Label找到Pod組。因為Service是抽象的,所以在圖表里通??床坏剿鼈兊拇嬖?,這也就讓這一概念更難以理解。
假定有2個后臺Pod,并且定義后臺Service的名稱為‘backend-service’,lable選擇器為(tier=backend, app=myapp)。backend-service的Service會完成如下兩件重要的事情:
會為Service創(chuàng)建一個本地集群的DNS入口,因此前端Pod只需要DNS查找主機名為 ‘backend-service’,就能夠解析出前端應(yīng)用程序可用的IP地址。
現(xiàn)在前端已經(jīng)得到了后臺服務(wù)的IP地址,但是它應(yīng)該訪問2個后臺Pod的哪一個呢?Service在這2個后臺Pod之間提供透明的負載均衡,會將請求分發(fā)給其中的任意一個(如下面的動畫所示)。通過每個Node上運行的代理(kube-proxy)完成。這里有更多技術(shù)細節(jié)。
如果不進入網(wǎng)絡(luò)配置,那么達到透明的負載均衡目標(biāo)所涉及的底層網(wǎng)絡(luò)和路由相對先進。

有一個特別類型的Kubernetes Service,稱為'LoadBalancer',作為外部負載均衡器使用,在一定數(shù)量的Pod之間均衡流量。比如,對于負載均衡Web流量很有用。
Pod與Service
每個Pod都提供了一個獨立的Endpoint(Pod IP+ContainerPort)以被客戶端訪問,多個Pod副本組成了一個集群來提供服務(wù),一般的做法是部署一個負載均衡器來訪問它們,為這組Pod開啟一個對外的服務(wù)端口如8000,并且將這些Pod的Endpoint列表加入8000端口的轉(zhuǎn)發(fā)列表中,客戶端可以通過負載均衡器的對外IP地址+服務(wù)端口來訪問此服務(wù)。運行在Node上的kube-proxy其實就是一個智能的軟件負載均衡器,它負責(zé)把對Service的請求轉(zhuǎn)發(fā)到后端的某個Pod實例上,并且在內(nèi)部實現(xiàn)服務(wù)的負載均衡與會話保持機制。Service不是共用一個負載均衡器的IP地址,而是每個Servcie分配一個全局唯一的虛擬IP地址,這個虛擬IP被稱為Cluster IP。
Node IP
Node節(jié)點的IP地址,是Kubernetes集群中每個節(jié)點的物理網(wǎng)卡的IP地址,是真是存在的物理網(wǎng)絡(luò),所有屬于這個網(wǎng)絡(luò)的服務(wù)器之間都能通過這個網(wǎng)絡(luò)直接通信;
Pod IP
Pod的IP地址,是Docker Engine根據(jù)docker0網(wǎng)橋的IP地址段進行分配的,通常是一個虛擬的二層網(wǎng)絡(luò),位于不同Node上的Pod能夠彼此通信,需要通過Pod IP所在的虛擬二層網(wǎng)絡(luò)進行通信,而真實的TCP流量則是通過Node IP所在的物理網(wǎng)卡流出的;
Cluster IP
Service的IP地址。特性如下:
僅僅作用于Kubernetes Servcie這個對象,并由Kubernetes管理和分配IP地址;
無法被Ping,因為沒有一個“實體網(wǎng)絡(luò)對象”來響應(yīng);
只能結(jié)合Service Port組成一個具體的通信端口;
Node IP網(wǎng)、Pod IP網(wǎng)域Cluster IP網(wǎng)之間的通信,采用的是Kubernetes自己設(shè)計的一種編程方式的特殊的路由規(guī)則,與IP路由有很大的不同;
Node
節(jié)點(上圖橘色方框)是物理或者虛擬機器,作為Kubernetes worker,通常稱為Minion。每個節(jié)點都運行如下Kubernetes關(guān)鍵組件:
Kubelet:是主節(jié)點代理。
Kube-proxy:Service使用其將鏈接路由到Pod,如上文所述。
Docker或Rocket:Kubernetes使用的容器技術(shù)來創(chuàng)建容器。
Kubernetes Master
集群擁有一個Kubernetes Master。Kubernetes Master提供集群的獨特視角,并且擁有一系列組件,比如Kubernetes API Server。API Server提供可以用來和集群交互的REST端點。master節(jié)點包括用來創(chuàng)建和復(fù)制Pod的Replication Controller。
應(yīng)用
Kubernetes進行藍綠部署
應(yīng)用程序更新到一個新版本時,部署功能能夠幫您對容器進行滾動更新,若有異??勺詣踊貪L。
Kubernetes在騰訊游戲的應(yīng)用
接入容器數(shù)超過兩萬,接入的業(yè)務(wù)也有兩百多款,包括手游、端游、頁游。

基于Kubernetes的Spark集群部署
相比于在物理機上部署,在Kubernetes集群上部署Spark集群,具有以下優(yōu)勢:
快速部署:安裝1000臺級別的Spark集群,在Kubernetes集群上只需設(shè)定worker副本數(shù)目replicas=1000,即可一鍵部署。
快速升級:升級Spark版本,只需替換Spark鏡像,一鍵升級。
彈性伸縮:需要擴容、縮容時,自動修改worker副本數(shù)目replicas即可。
高一致性:各個Kubernetes節(jié)點上運行的Spark環(huán)境一致、版本一致
高可用性:如果Spark所在的某些node或pod死掉,Kubernetes會自動將計算任務(wù),轉(zhuǎn)移到其他node或創(chuàng)建新pod。
強隔離性:通過設(shè)定資源配額等方式,可與WebService應(yīng)用部署在同一集群,提升機器資源使用效率,從而降低服務(wù)器成本。
Kubernetes、Docker Swarm、 Mesos

網(wǎng)易云容器如何解決Kubernetes在公有云上的問題

微服務(wù)持續(xù)集成 Spring Cloud + GitLab + Docker + K8S

微服務(wù)組成:Gateway api網(wǎng)關(guān)>消費端>服務(wù)端 和 一個注冊中心,共4個Spring Boot項目?

?Kubernetes實際要用起來問題還有很多,需要躺很多坑,搭建起一套Kubernetes環(huán)境就可能會讓你從入門到放棄,再接再勵。
資料來源:
http://www.dockone.io/article/932