kubernetes


項目主頁:http://kubernetes.io/
docker僅能在單機上部署容器,而kubernetes可以統一管理各類容器,形成集群。Kubernetes作為Docker生態圈中重要一員,是Google多年大規模容器管理技術的開源版本。Kubernetes支持GCE、vShpere、CoreOS、Azure等平台,也可以直接運行在物理機上。 
Kubernetes非常適合做微服務的架構。

其主要功能如下:

1) 用戶不需要關心需要多少台機器,只需要關心軟件(服務)運行所需的環境。以服務為中心,你需要關心的是api,如何把大服務拆分成小服務,如何使用api去整合它們。

2) 以集群的方式運行管理容器。

3) 解決Docker跨機器容器之間的通訊問題。

4) Kubernetes的Pods自我修復機制使得容器集群總是運行在用戶指定的狀態。

Kubernetes有幾個重要的概念:

 

1. 

Pod

    Pod是k8s的最基本的操作單元,包含一個或多個緊密相關的容器,類似於豌豆莢的概念。一個Pod可以被一個容器化的環境看作應用層的“邏輯宿主機”(Logical Host).一個Pod中的多個容器應用通常是緊耦合的。Pod在Node上被創建、啟動或者銷毀。

   為什么k8s使用Pod在容器之上再封裝一層呢?一個很重要的原因是Docker容器之間的通信受到Docker網絡機制的限制。在Docker的世界中,一個容器需要通過link方式才能訪問另一個容器提供的服務(端口)。大量容器之間的link將是一個非常繁重的工作。通過Pod的概念將多個容器組合在一個虛擬的“主機”內,可以實現容器之間僅需通過Localhost就能相互通信了。

    一個Pod中的應用容器共享同一組資源:

  (1)PID命名空間:Pod中的不同應用程序可以看見其他應用程序的進程ID

  (2)網絡命名空間:Pod中的多個容器能訪問同一個IP和端口范圍

  (3)IPC命名空間:Pod中的多個容器能夠使用SystemV IPC或POSIX消息隊列進行通信。

  (4)UTS命名空間:Pod中的多個容器共享一個主機名

  (5)Volumes(共享存儲卷):Pod中的各個容器可以訪問在Pod級別定義的Volumes

     不建議在k8s的一個pod內運行相同應用的多個實例。也就是說一個Pod內不要運行2個或2個以上相同的鏡像,因為容易造成端口沖突,而且Pod內的容器都是在同一個Node上的

 一個Pod包含一個或者多個容器。

Pod的YAML 描述方式:

clipboard[7]
運行如下命令就會創建Pod:
kubectl create -f ./hello-world.yaml
運行如下命令就會查看Pod狀態:
$ kubectl get pods

 

2. minion/node

 

minion和node的意思是一樣的,是一個主機節點的意思。例如一個虛擬機、一個物理主機。注意,一個Pod不會跨越node。就是即使一個Pod有多個容器,里面的容器會同時存在在同一個Node中,不會分別在不同的Node中。 Kubernetes的調度器會根據Pod的資源需求定義來將Pod分配到不同的Node中(如今支持定義CPU需求、內存需求)。Kubernetes的master/slave程序運行在node里面。

 

3. Replication Controller

 

Replication 是復制的意思,用來解決Pod的線性擴容縮容問題,Replication Controller可以創建一個pod的多個副本,並且可以保證集群中該Pod的副本數量保持平衡。例如副本數量規定為10,如果某個pod掛了,數量變為9,那么Replication Controller會自動創建一個Pod,恢復到10個副本的水平。 多個副本可以在不同的Node中。 

Replication Controller的YAML  描述方式:

 

 

clipboard[8]
replicas表示副本的數量 
template是對Pod的描述。ReplicationController根據template創建多個Pod(數量=replicas),標簽為app: nginx。
運行如下命令就會創建Replication Controller:
kubectl create -f ./nginx-rc.yaml

 

4. Service

 

Service用來解決Pod的服務發現問題,因為Pod的運行狀態可以動態變化(機器切換、宕機),所以訪問端最好不要直接去訪問某個Pod,而是通過service,service能夠將請求進行轉發。

服務的YAML描述如下:

clipboard[9]

該定義創建了一個服務,會將標簽為app:nginx(selector選的)的Pod納入服務中,也就是說該服務接收到的請求會轉發給標簽為app: nginx的Pod處理。注意:service是負載均衡的,會自動分配請求給不同的Pod。有沒有覺得很方便?把Serivce暴露給客戶端,客戶端只需要請求service,不需要知道后台是個集群。

運行如下命令就會創建Service:

 

kubectl create -f ./nginx-rc.yaml

 

5. Label

 

標簽,用來做邏輯上的標記。用來關聯service、replication controller和pod.

 

 

 

Kubernetes架構

 

下圖為官方的架構圖。

 

 

 

從圖中看出,Kubernetes的架構是典型的master/Slave架構。

Master負責總體的協調控制,Slave負責具體的任務。Master/Slave的組件如下:

 

clipboard[10]

 

 

盜個圖,下圖能更清晰的展示Kubernates。

 

clipboard[11]

 

 

持續更新~~~

轉載請注明出處:http://www.cnblogs.com/stonehat/p/5148455.html

轉載請注明出處:http://www.cnblogs.com/stonehat/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM