Kubernetes入門簡介
1. Kubernetes是什麼?
首先,Kubernetes是一個全新的基於容器技術的分散式架構領先方案。Kubernetes是Google開源的容器叢集管理系統,其提供應用部署、維護、 擴充套件機制等功能,利用Kubernetes能方便地管理跨機器執行容器化的應用,其主要功能如下:
(1)使用Docker對應用程式包裝(package)、例項化(instantiate)、執行(run)。
(2)以叢集的方式執行、管理跨機器的容器。
(3)解決Docker跨機器容器之間的通訊問題。
(4)Kubernetes的自我修復機制使得容器叢集總是執行在使用者期望的狀態。
2. 為什麼使用Kubernetes?
(1)全面擁抱微服務架構
(2)使用Kubernetes我們系統可以隨時的整體遷移
(3)Kubernetes系統具備了超強的橫向擴容能力
(4)Kubernetes提供完善的管理工具,涵蓋了包括開發、部署測試、運維監控在內的各個環節。
3. Kubernetes的體系結構
4. Kubernetes的核心概念
叢集
叢集是一組節點,這些節點可以是物理伺服器或者虛擬機器,之上安裝了Kubernetes平臺。下圖展示這樣的叢集。注意該圖為了強調核心概念有所簡化。這裡可以看到一個典型的Kubernetes架構圖。上圖可以看到如下元件,使用特別的圖示表示Service和Label:
- Pod
- Container(容器)
- Label()(標籤)
- Replication Controller(複製控制器)
- Service()(服務)
- Node(節點)
- Kubernetes Master(Kubernetes主節點)
Kubernetes Master
叢集擁有一個Kubernetes Master(紫色方框)。Kubernetes Master提供叢集的獨特視角,並且擁有一系列元件,比如Kubernetes API Server。API Server提供可以用來和叢集互動的REST端點。master節點包括用來建立和複製Pod的Replication Controller。
Pod
Pod(上圖綠色方框)安排在節點上,包含一組容器和卷。同一個Pod裡的容器共享同一個網路名稱空間,可以使用localhost互相通訊。Pod是短暫的,不是持續性實體。你可能會有這些問題:- 如果Pod是短暫的,那麼我怎麼才能持久化容器資料使其能夠跨重啟而存在呢? 是的,Kubernetes支援卷的概念,因此可以使用持久化的卷型別。
- 是否手動建立Pod,如果想要建立同一個容器的多份拷貝,需要一個個分別建立出來麼?可以手動建立單個Pod,但是也可以使用Replication Controller使用Pod模板建立出多份拷貝,下文會詳細介紹。
- 如果Pod是短暫的,那麼重啟時IP地址可能會改變,那麼怎麼才能從前端容器正確可靠地指向後臺容器呢?這時可以使用Service,下文會詳細介紹。
Lable
正如圖所示,一些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應用到上面。
Replication Controller
是否手動建立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的一些副本,那麼在這些副本上如何均衡負載呢?我們需要的是Service。
Service
如果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流量很有用。
Node
節點(上圖橘色方框)是物理或者虛擬機器器,作為Kubernetes worker,通常稱為Minion。每個節點都執行如下Kubernetes關鍵元件:- Kubelet:是主節點代理。
- Kube-proxy:Service使用其將連結路由到Pod,如上文所述。
- Docker或Rocket:Kubernetes使用的容器技術來建立容器。
5. Kubernetes的體系結構
相關文章
- 《Kubernetes零基礎快速入門》簡介
- 簡單入門Kubernetes
- Kubernetes Ingress簡單入門
- Fiddler 入門簡介
- ElasticSearch入門簡介Elasticsearch
- Docker入門簡介Docker
- GraphQL 入門簡介
- CSS 入門簡介CSS
- Redis 入門 - 簡介Redis
- ElasticSearch 入門簡介Elasticsearch
- 小白入門 - PHP簡介PHP
- phyon快速入門(python簡介)Python
- Android入門教程 | SharedPreferences 簡介Android
- GraphQL 快速入門【1】簡介
- Azure Terraform(一)入門簡介ORM
- 傲視Kubernetes(一):Kubernetes簡介
- ARouter簡單入門和介紹
- Vue.js入門 (一) - 簡介Vue.js
- gitbook 入門教程之 gitbook 簡介Git
- Azure Storage 系列(一)入門簡介
- Azure Data Factory(一)入門簡介
- Azure Key Vault(二)- 入門簡介
- Flutter入門教程(一)Flutter簡介Flutter
- 《Flink入門與實戰》簡介
- Python 入門系列 —— 1. 簡介Python
- 淺入kubernetes(1):Kubernetes 入門基礎
- Kubernetes 入門必備雲原生髮展簡史
- 【入門】分散式Session一致性入門簡介分散式Session
- EVE-NG簡單入門介紹
- MySQL入門系列:查詢簡介(二)MySql
- TypeScript基礎入門-函式-簡介TypeScript函式
- 爬蟲工程師的入門簡介爬蟲工程師
- html+css快速入門-css簡介HTMLCSS
- Kubernetes – 容器編排簡介
- Kubernetes Helm入門指南
- Azure Kubernetes Service 入門
- Kubernetes 入門基礎
- 入門Kubernetes-StatefulSets