後端技術雜談11:十分鐘理解Kubernetes核心概念
本系列文章將整理到我在GitHub上的《Java面試指南》倉庫,更多精彩內容請到我的倉庫裡檢視
本文轉自
喜歡的話麻煩點下Star哈
本系列文章將整理於我的個人部落格:
www.how2playlife.com
該系列博文會介紹常見的後端技術,這對後端工程師來說是一種綜合能力,我們會逐步瞭解搜尋技術,雲端計算相關技術、大資料研發等常見的技術喜提,以便讓你更完整地瞭解後端技術棧的全貌,為後續參與分散式應用的開發和學習做好準備。
如果對本系列文章有什麼建議,或者是有什麼疑問的話,也可以關注公眾號【Java技術江湖】聯絡我,歡迎你參與本系列博文的創作和修訂。
十分鐘帶你理解Kubernetes核心概念
本文將會簡單介紹 Kubernetes的核心概念。因為這些定義可以在Kubernetes的文件中找到,所以文章也會避免用大段的枯燥的文字介紹。相反,我們會使用一些圖表(其中一些是動畫)和示例來解釋這些概念。我們發現一些概念(比如Service)如果沒有圖表的輔助就很難全面地理解。在合適的地方我們也會提供Kubernetes文件的連結以便讀者深入學習。
容器特性、映象、網路;Kubernetes架構、核心元件、基本功能;Kubernetes設計理念、架構設計、基本功能、常用物件、設計原則;Kubernetes的資料庫、執行時、網路、外掛已經落地經驗;微服務架構、元件、監控方案等。
這就開始吧。
什麼是Kubernetes?
Kubernetes(k8s)是自動化容器操作的開源平臺,這些操作包括部署,排程和節點叢集間擴充套件。如果你曾經用過Docker容器技術部署容器,那麼可以將Docker看成Kubernetes內部使用的低階別元件。Kubernetes不僅僅支援Docker,還支援Rocket,這是另一種容器技術。
使用Kubernetes可以:
- 自動化容器的部署和複製
- 隨時擴充套件或收縮容器規模
- 將容器組織成組,並且提供容器間的負載均衡
- 很容易地升級應用程式容器的新版本
- 提供容器彈性,如果容器失效就替換它,等等…
實際上,使用Kubernetes只需一個 部署檔案,使用一條命令就可以部署多層容器(前端,後臺等)的完整叢集:
$ kubectl create -f single-config-file.yaml
kubectl是和Kubernetes API互動的命令列程式。現在介紹一些核心概念。
叢集
叢集是一組節點,這些節點可以是物理伺服器或者虛擬機器,之上安裝了Kubernetes平臺。下圖展示這樣的叢集。注意該圖為了強調核心概念有所簡化。 這裡可以看到一個典型的Kubernetes架構圖。
上圖可以看到如下元件,使用特別的圖示表示Service和Label:
- Pod
- Container(容器)
- Label(標籤)
- Replication Controller(複製控制器)
- Service(服務)
- Node(節點)
- Kubernetes Master(Kubernetes主節點)
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使用的容器技術來建立容器。
Kubernetes Master
叢集擁有一個Kubernetes Master(紫色方框)。Kubernetes Master提供叢集的獨特視角,並且擁有一系列元件,比如Kubernetes API Server。API Server提供可以用來和叢集的REST端點。master節點包括用來建立和複製Pod的Replication Controller。
下一步
現在我們已經瞭解了Kubernetes核心概念的基本知識,你可以進一步閱讀Kubernetes
使用者手冊。使用者手冊提供了快速並且完備的學習文件。
如果迫不及待想要試試Kubernetes,可以使用
Google Container Engine。Google Container Engine是託管的Kubernetes容器環境。簡單註冊/登入之後就可以在上面嘗試示例了。
原文連結:
Learn the Kubernetes Key Concepts in 10 Minutes(翻譯:崔婧雯)
===========================
譯者介紹
崔婧雯,現就職於IBM,高階軟體工程師,負責IBM WebSphere業務流程管理軟體的系統測試工作。曾就職於VMware從事桌面虛擬化產品的質量保證工作。對虛擬化,中介軟體技術,業務流程管理有濃厚的興趣。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69951287/viewspace-2665254/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 後端技術雜談6:白話虛擬化技術後端
- 後端技術雜談7:OpenStack的基石KVM後端
- 後端技術雜談8:OpenStack架構設計後端架構
- 後端技術雜談2:搜尋引擎工作原理後端
- 後端技術雜談5:雲端計算的前世今生後端
- 30分鐘理解GraphQL核心概念
- 後端技術雜談12:捋一捋大資料研發的基本概念後端大資料
- 後端技術雜談4:Elasticsearch與solr入門實踐後端ElasticsearchSolr
- 後端技術雜談3:Lucene基礎原理與實踐後端
- 後端技術雜談1:搜尋引擎基礎倒排索引後端索引
- 十分鐘理解Redux核心思想,過目不忘。Redux
- Kubernetes核心概念
- 十分鐘明白什麼是容器技術
- 理解「業務」與「技術」概念
- 不重視技術,何談掌握核心技術?
- RPC核心概念理解RPC
- Kubernetes概念及核心物件物件
- kubernetes雜談之(二)Pod初談
- 技術雜談 之 室內導航
- 十分鐘理解Java中的弱引用Java
- webpack (1)——核心概念的理解Web
- 簡單理解OpenTracing技術中的span概念
- Redis核心技術筆記11-15Redis筆記
- 十分鐘理解 Java 中的動態代理Java
- 五分鐘學後端技術:如何學習後端工程師必學的訊息佇列後端工程師佇列
- 五分鐘學後端技術:一篇文章教你讀懂大資料技術棧!後端大資料
- 談談對搜尋技術Elastic Search&Lucene的理解AST
- Java後端技術概覽Java後端
- 如何學習後端技術?後端
- Kubernetes Dashboard - 每天5分鐘玩轉 Docker 容器技術(173)Docker
- Flutter核心技術與實戰 11 | 生命週期Flutter
- GSLB是什麼?談談對該技術的一點理解
- 01 . 容器編排簡介及Kubernetes核心概念
- 揭祕有狀態服務上 Kubernetes 的核心技術
- 睡前十分鐘
- Java Web後端技術 (下) - 3.MyBatis 複雜對映&配置檔案深入JavaWeb後端MyBatis
- ChatGPT 背後核心技術的白話版ChatGPT
- 技術簡介——後端開發後端