本文首發於個人公衆號 Linux雲計算網絡(id: cloud_dev),專一於乾貨分享,號內有 10T 書籍和視頻資源,後臺回覆**「1024」**便可領取,歡迎你們關注,二維碼文末能夠掃。編程
Hi,你們好,歡迎你們和我一塊兒學 K8S,這是系列第三篇。網絡
每一種技術,爲了描述清楚它的設計理念,都會自定義一堆概念或術語。在進入一門技術的研究以前,咱們有必要掃清它的基本概念。負載均衡
K8S 的操做實體,在 K8S 中,有不少的操做對象,好比容器、Pod、Deployment、Service、Node 等,咱們通通稱它們爲資源對象。工具
K8S 集羣,是計算、存儲和網絡資源的集合,K8S 基於這些資源來承載容器化的應用。雲計算
K8S 集羣的大腦,負責整個集羣的管控、資源調度。能夠部署在普通物理機或虛擬機上,爲了實現高可用,能夠部署多個 Master。spa
K8S 集羣的執行者,受 Master 指揮,負責運行和監控容器應用、管理容器的生命週期,並向 Master 按期彙報容器的狀態。一樣,Node 也能夠部署在物理機或虛擬機之上,也能夠部署多個。設計
在 K8S 集羣中,Pod 是資源調度的最小單位,一個 Pod 能夠包含一個或多個容器應用,這些容器應用彼此之間存在某種強關聯。Pod 內的全部容器應用共享計算、存儲、網絡資源。視頻
Controller 是 K8S 中負責管理 Pod 的資源對象,它定義 Pod 的部署屬性,好比有幾個副本,副本異常怎麼處理等,若是把 Pod 副本看作是一個公司職員,那麼 Controller 就像是 HR,會不斷根據人員的變更來招人知足公司的發展需求。對象
爲了知足多種業務場景,K8S 提供了多種 Controller,包括 Deployment、ReplicaSet、DaemonSet、StatefulSet、Job 等。生命週期
Deployment 是最經常使用的 Controller,定義了用戶的指望場景,實現了 Pod 的多副本管理,若是運行過程當中有一個副本掛了(員工離職),那麼 K8S 會根據 Deployment 的定義從新拉起一個副本繼續工做(招一個新員工),始終保證 Pod 按照用戶指望的狀態運行。
ReplicaSet 和 Deployment 實現了一樣的功能,確切的說是 Deployment 經過 ReplicaSet 來實現 Pod 的多副本管理。咱們一般不須要直接使用 ReplicaSet。
DaemonSet 用於每一個 Node 最多隻運行一個副本的場景,一般用於運行 Daemon。
Job 用於運行結束就刪除的應用,而其餘 Controller 則是會長期保持運行。
以上 Controller 都是無狀態的,也就是說副本的狀態信息會改變,好比當某個 Pod 副本異常重啓時,其名稱會改變。StatefulSet 提供有狀態的服務,可以保證 Pod 的每一個副本在其生命週期中名稱保持不變。這是經過持久化的存儲捲來實現的。
Label 定義了其餘資源對象所屬的標籤,相似於你在公司被分到 A 小組、B 小組。有了標籤,就能夠針對性地對每一個小組進行管理。好比把某個小組搬到哪一個辦公區(把某個 Pod 部署到哪一個 Node 上)。給指定的資源對象定義一個或多個不一樣的標籤可以實現多維度的資源分組管理,方便進行資源分配、調度、配置、部署等管理工做。
Label 選擇器,K8S 經過 Selector 來過濾篩選指定的資源對象,相似於 SQL 語句中的 where 查詢條件,Label 實現了簡單又通用的對象查詢機制。
在 K8S 中,Service 是對 Pod 對象的抽象,一般,Pod 會以多副本的形式部署,每一個 Pod 都有本身的 IP,均可以對外提供服務,但 Pod 是脆弱的,也就是說,它隨時都有可能被頻繁地銷燬和重啓,IP 也會隨之改變,這樣,服務的訪問就會出現問題。
Service 就是提出來解決這個問題的,它定義了一個虛擬 IP(也叫集羣 IP),這個 IP 在 Service 的整個生命週期內都不會改變。當有訪問到達時,Service 會將請求導向 Pod,若是存在多個 Pod,Service 還能實現負載均衡。
K8S 的存儲卷,定義了一個 Pod 中多個容器可訪問的共享目錄。和 Docker 的 Volume 不太同樣的是,K8S 的 Volume 是以 Pod 爲單位的,也就是 Volume 的生命週期和 Pod 相關,和 Pod 內的容器不相關,即便容器終止或重啓,Volume 中的數據也不會丟失,只有當 Pod 被刪除時,數據纔會丟失。
當有多個用戶或租戶使用同一個 K8S 集羣時,如何區分它們建立的資源呢?答案就是 Namespace。
Namespace 將一個物理的集羣從邏輯上劃分紅多個虛擬的集羣,每一個集羣就是一個 Namespace,不一樣 Namespace 裏的資源是徹底隔離的。每一個用戶在本身建立的 Namespace 裏操做,都不會影響到其餘用戶。
Annotation 與 Label 相似,但和 Label 不一樣 的事,Annotation 不用於過濾篩選,它只是用戶定義的某一種資源的附加信息,目的是方便外部查找該資源。有點相似於咱們常說的別名,沒有它徹底能夠,但有了它能夠很方便查找。
個人公衆號 「Linux雲計算網絡」(id: cloud_dev) ,號內有 10T 書籍和視頻資源,後臺回覆 「1024」 便可領取,分享的內容包括但不限於 Linux、網絡、雲計算虛擬化、容器Docker、OpenStack、Kubernetes、工具、SDN、OVS、DPDK、Go、Python、C/C++編程技術等內容,歡迎你們關注。