Kubernetes(k8s)學習

1.什麼是Kubernetes

  • Kubernetes(k8s) 是自動化容器操作的開源平臺,這些操作包括部署,調度和節點集羣間擴展。可以將Docker看成Kubernetes內部使用的低級別組件。
  • 使用Kubernetes可以:
  1. 自動化容器的部署和複製
  2. 隨時擴展或收縮容器規模
  3. 將容器組織成組,並且提供容器間的負載均衡
  4. 很容易地升級應用程序容器的新版本
  5. 提供容器彈性,如果容器失效就替換它,等等…

1.1 集羣

集羣是一組節點(這些節點可以是物理服務器或者虛擬機)之上安裝了Kubernetes平臺。下圖展示這樣的集羣。
在這裏插入圖片描述
上圖可以看到如下組件,使用特別的圖標表示Service和Label:

  • Pod
  • Container(容器)
  • Label(標籤)
  • Replication Controller(複製控制器)
  • Service(服務)
  • Node(節點)
  • Kubernetes Master(Kubernetes主節點)

1.2 Pod

Pod(上圖綠色方框)安排在節點上,包含一組容器和卷同一個Pod裏的容器共享同一個網絡命名空間,可以使用localhost互相通信。Pod是短暫的,不是持續性實體。
可能會有以下問題思考:

  1. 如果Pod是短暫的,那麼怎麼才能持久化容器數據使其能夠跨重啓而存在呢?
    是的,Kubernetes支持卷的概念,因此可以使用持久化的卷類型。
  2. 是否手動創建Pod,如果想要創建同一個容器的多份拷貝,需要一個個分別創建出來麼?
    可以手動創建單個Pod,但是也可以使用Replication Controller使用Pod模板創建出多份拷貝,下文會詳細介紹。
  3. 如果Pod是短暫的,那麼重啓時IP地址可能會改變,那麼怎麼才能從前端容器正確可靠地指向後臺容器呢?
    這時可以使用Service,下文會詳細介紹。、

1.3 Label(標籤)

正如圖所示,一些Pod有Label。一個Label是attach(附加)到Pod的一對鍵/值對,用來傳遞用戶定義的屬性。比如,你可能創建了一個"tier"和“app”標籤,通過Label(tier=frontend, app=myapp)來標記前端Pod容器,使用Label(tier=backend, app=myapp)標記後臺Pod。然後可以使用Selectors(選擇器)選擇帶有特定Label的Pod,並且將Service或者Replication Controller應用到上面。

1.4 Replication Controller(複製控制器)

2. 是否手動創建Pod,如果想要創建同一個容器的多份拷貝,需要一個個分別創建出來麼,能否將Pods劃到邏輯組裏?

Replication Controller確保任意時間都有指定數量的Pod“副本”在運行。如果爲某個Pod創建了Replication Controller並且指定3個副本,它會創建3個Pod,並且持續監控它們。如果某個Pod不響應,那麼Replication Controller會替換它,保持總數爲3.如下面的動畫所示:
在這裏插入圖片描述
如果之前不響應的Pod恢復了,現在就有4個Pod了,那麼Replication Controller會將其中一個終止保持總數爲3。如果在運行中將副本總數改爲5,Replication Controller會立刻啓動2個新Pod,保證總數爲5。還可以按照這樣的方式縮小Pod,這個特性在執行滾動升級時很有用。

當創建Replication Controller時,需要指定兩個東西:

  • Pod模板:用來創建Pod副本的模板
  • Label:Replication Controller需要監控的Pod的標籤

現在已經創建了Pod的一些副本,那麼在這些副本上如何均衡負載呢?我們需要的是Service。

1.5 Service(服務)

3.如果Pods是短暫的,那麼重啓時IP地址可能會改變,怎麼才能從前端容器正確可靠地指向後臺容器呢?

Service是定義一系列Pod以及訪問這些Pod的策略的一層抽象。Service通過Label找到Pod組。因爲Service是抽象的,所以在圖表裏通常看不到它們的存在,這也就讓這一概念更難以理解。

現在,假定有2個後臺Pod,並且定義後臺Service的名稱爲‘backend-service’,lable選擇器爲(tier=backend, app=myapp)。backend-service 的Service會完成如下兩件重要的事情:

  • 會爲Service創建一個本地集羣的DNS入口,因此前端Pod只需要DNS查找主機名爲 ‘backend-service’,就能夠解析出前端應用程序可用的IP地址。
  • 現在前端已經得到了後臺服務的IP地址,但是它應該訪問2個後臺Pod的哪一個呢?Service在這2個後臺Pod之間提供透明的負載均衡,會將請求分發給其中的任意一個(如下面的動畫所示)。通過每個Node上運行的代理(kube-proxy)完成。這裏有更多技術細節。

下述動畫展示了Service的功能。注意該圖作了很多簡化。
在這裏插入圖片描述
有一個特別類型的Kubernetes Service,稱爲’LoadBalancer’,作爲外部負載均衡器使用,在一定數量的Pod之間均衡流量。比如,對於負載均衡Web流量很有用。

1.6 Node(節點)

節點(上圖橘色方框)是物理或者虛擬機器,作爲Kubernetes worker,通常稱爲Minion。每個節點都運行如下Kubernetes關鍵組件:

  • Kubelet:是主節點代理。
  • Kube-proxy:Service使用其將鏈接路由到Pod,如上文所述。
  • Docker或Rocket:Kubernetes使用的容器技術來創建容器。

1.7 Kubernetes Master(Kubernetes主節點)

集羣擁有一個Kubernetes Master(紫色方框)。Kubernetes Master提供集羣的獨特視角,並且擁有一系列組件,比如Kubernetes API Server。API Server提供可以用來和集羣交互的REST端點。master節點包括用來創建和複製Pod的Replication Controller。

參考:
http://dockone.io/article/932

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章