Kubernetes進階實戰》">《 Kubernetes進階實戰》
806
2025-04-01
1.2.3 Kubernetes概念和術語
Kubernetes使用共享網絡將多個物理機或虛擬機匯集到一個集群中,在各服務器之間進行通信,該集群是配置Kubernetes的所有組件、功能和工作負載的物理平臺。集群中一臺服務器(或高可用部署中的一組服務器)用作Master,負責管理整個集群,余下的其他機器用作Worker Node(早期版本中也稱為Minion),它們是使用本地和外部資源接收和運行工作負載的服務器,如圖1-4所示。集群中的這些主機可以是物理服務器,也可以是虛擬機(包括IaaS云端的VPS)。
(1)Master
(1)Master
Master是集群的網關和中樞,負責諸如為用戶和客戶端暴露API、跟蹤其他服務器的健康狀態、以最優方式調度工作負載,以及編排其他組件之間的通信等任務,它是用戶或客戶端與集群之間的核心聯絡點,并負責Kubernetes系統的大多數集中式管控邏輯。單個Master節點即可完成其所有的功能,但出于冗余及負載均衡等目的,生產環境中通常需要協同部署多個此類主機。Master節點類似于蜂群中的蜂王。
(2)Node
Node是Kubernetes集群的工作節點,負責接收來自Master的工作指令并根據指令相應地創建或銷毀Pod對象,以及調整網絡規則以合理地路由和轉發流量等。理論上講,Node可以是任何形式的計算設備,不過Master會統一將其抽象為Node對象進行管理。Node類似于蜂群中的工蜂,生產環境中,它們通常數量眾多。
Kubernetes將所有Node的資源集結于一處形成一臺更加強大的“服務器”,如圖1-5所示,在用戶將應用部署于其上時,Master會使用調度算法將其自動指派至某個特定的Node運行。在Node加入集群或從集群中移除時,Master也會按需重新編排影響到的Pod(容器)。于是,用戶無須關心其應用究竟運行于何處。
從抽象的視角來講,Kubernetes還有著眾多的組件來支撐其內部的業務邏輯,包括運行應用、應用編排、服務暴露、應用恢復等,它們在Kubernetes中被抽象為Pod、Service、Controller等資源類型,下面列出了幾個較為常用的資源抽象。
(1)Pod
Kubernetes并不直接運行容器,而是使用一個抽象的資源對象來封裝一個或者多個容器,這個抽象即為Pod,它也是Kubernetes的最小調度單元。同一Pod中的容器共享網絡名稱空間和存儲資源,這些容器可經由本地回環節口lo直接通信,但彼此之間又在Mount、User及PID等名稱空間上保持了隔離。盡管Pod中可以包含多個容器,但是作為最小調度單元,它應該盡可能地保持“小”,即通常只應該包含一個主容器,以及必要的輔助型容器(sidecar),如圖1-6所示
(2)資源標簽
標簽(Label)是將資源進行分類的標識符,資源標簽其實就是一個鍵值型(key/values)數據。標簽旨在指定對象(如Pod等)辨識性的屬性,這些屬性僅對用戶存在特定的意義,對Kubernetes集群來說并不直接表達核心系統語義。標簽可以在對象創建時附加其上,并能夠在創建后的任意時間進行添加和修改。一個對象可以擁有多個標簽,一個標簽也可以附加于多個對象(通常是同一類對象)之上,如圖1-7所示。
(3)標簽選擇器
標簽選擇器(Selector)全稱為“Label Selector”,它是一種根據Label來過濾符合條件的資源對象的機制。例如,將附有標簽“role: backend”的所有Pod對象挑選出來歸為一組就是標簽選擇器的一種應用,如圖1-8所示。用戶通常使用標簽對資源對象進行分類,而后使用標簽選擇器挑選出它們,例如將其創建為某Service的端點。
(4)Pod控制器
盡管Pod是Kubernetes的最小調度單元,但用戶通常并不會直接部署及管理Pod對象,而是要借助于另一類抽象—控制器(Controller)對其進行管理。用于工作負載的控制器是一種管理Pod生命周期的資源抽象,它們是Kubernetes上的一類對象,而非單個資源對象,包括ReplicationController、ReplicaSet、Deployment、StatefulSet、Job等。以圖1-9中所示的Deployment控制器為例,它負責確保指定的Pod對象的副本數量精確符合定義,否則“多退少補”。使用控制器之后就不再需要手動管理Pod對象了,用戶只需要聲明應用的期望狀態,控制器就會自動對其進行進程管理。
(5)服務資源(Service)
Service是建立在一組Pod對象之上的資源抽象,它通過標簽選擇器選定一組Pod對象,并為這組Pod對象定義一個統一的固定訪問入口(通常是一個IP地址),若Kubernetes集群存在DNS附件,它就會在Service創建時為其自動配置一個DNS名稱以便客戶端進行服務發現。到達Service IP的請求將被負載均衡至其后的端點—各個Pod對象之上,因此Service從本質上來講是一個四層代理服務。另外,Service還可以將集群外部流量引入到集群中來。
(6)存儲卷
存儲卷(Volume)是獨立于容器文件系統之外的存儲空間,常用于擴展容器的存儲空間并為它提供持久存儲能力。Kubernetes集群上的存儲卷大體可分為臨時卷、本地卷和網絡卷。臨時卷和本地卷都位于Node本地,一旦Pod被調度至其他Node,此種類型的存儲卷將無法訪問到,因此臨時卷和本地卷通常用于數據緩存,持久化的數據則需要放置于持久卷(persistent volume)之上。
(7)Name和Namespace
名稱(Name)是Kubernetes集群中資源對象的標識符,它們的作用域通常是名稱空間(Namespace),因此名稱空間是名稱的額外的限定機制。在同一個名稱空間中,同一類型資源對象的名稱必須具有唯一性。名稱空間通常用于實現租戶或項目的資源隔離,從而形成邏輯分組,如圖1-10所示。創建的Pod和Service等資源對象都屬于名稱空間級別,未指定時,它們都屬于默認的名稱空間“default”。
(8)Annotation
Annotation(注解)是另一種附加在對象之上的鍵值類型的數據,但它擁有更大的數據容量。Annotation常用于將各種非標識型元數據(metadata)附加到對象上,但它不能用于標識和選擇對象,通常也不會被Kubernetes直接使用,其主要目的是方便工具或用戶的閱讀及查找等。
(9)Ingress
Kubernetes將Pod對象和外部網絡環境進行了隔離,Pod和Service等對象間的通信都使用其內部專用地址進行,如若需要開放某些Pod對象提供給外部用戶訪問,則需要為其請求流量打開一個通往Kubernetes集群內部的通道,除了Service之外,Ingress也是這類通道的實現方式之一。
Kubernetes 網絡
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。