Kubernetes 環(huán)境由多個(gè)組件、硬件和軟件組成,它們共同管理容器化應(yīng)用程序的部署和執(zhí)行。以下是關(guān)鍵組件以及它們?nèi)绾稳谌雸D片。
什么是容器化應(yīng)用程序?
容器化應(yīng)用程序與其所需的庫(kù)、二進(jìn)制文件和配置文件捆綁到一個(gè)容器中。并非每個(gè)應(yīng)用程序都是容器化的完美候選者。許多開(kāi)發(fā)人員遵守云原生應(yīng)用程序的十二要素應(yīng)用程序指南:
- I. 代碼庫(kù):在修訂控制中跟蹤的一個(gè)代碼庫(kù),許多部署
- 二、依賴關(guān)系:顯式聲明和隔離依賴關(guān)系
- 三、配置:將配置存儲(chǔ)在環(huán)境中
- 四。支持服務(wù):將支持服務(wù)視為附加資源
- 五、構(gòu)建、發(fā)布、運(yùn)行:嚴(yán)格分離構(gòu)建和運(yùn)行階段
- 六、進(jìn)程:將應(yīng)用程序作為一個(gè)或多個(gè)無(wú)狀態(tài)進(jìn)程執(zhí)行
- 七。端口綁定:通過(guò)端口綁定導(dǎo)出服務(wù)
- 八。并發(fā):通過(guò)流程模型橫向擴(kuò)展
- 九。可處置性:通過(guò)快速啟動(dòng)和正常關(guān)閉最大限度地提高魯棒性
- X. Dev/prod parity:保持開(kāi)發(fā)、登臺(tái)和生產(chǎn)盡可能相似
- 十一。日志:將日志視為事件流
- 十二。管理流程:將管理/管理任務(wù)作為一次性流程運(yùn)行
許多流行的語(yǔ)言和應(yīng)用程序已被容器化并位于開(kāi)源存儲(chǔ)庫(kù)中,但是使用運(yùn)行應(yīng)用程序所需的庫(kù)和二進(jìn)制文件構(gòu)建應(yīng)用程序容器可能更有效,而不是導(dǎo)入所有可用的內(nèi)容。創(chuàng)建容器可以是程序化的,從而可以創(chuàng)建持續(xù)集成和部署 (CI/CD) 管道以提高效率。容器化應(yīng)用程序?qū)儆陂_(kāi)發(fā)人員的領(lǐng)域。
什么是 Kubernetes 容器?
容器是應(yīng)用程序的標(biāo)準(zhǔn)化、獨(dú)立的執(zhí)行外殼。通常,容器將包含一個(gè)應(yīng)用程序,通常由微服務(wù)以及正確執(zhí)行所需的二進(jìn)制文件和庫(kù)組成。通過(guò)將容器限制為單個(gè)進(jìn)程,問(wèn)題診斷變得更容易,更新應(yīng)用程序也是如此。與虛擬機(jī)不同,容器不包含底層操作系統(tǒng),因此與虛擬機(jī)相比被認(rèn)為是輕量級(jí)的。Kubernetes 容器屬于開(kāi)發(fā)人員的領(lǐng)域。
什么是 Kubernetes pod?
Pod 是 Kubernetes 集群中最小的執(zhí)行單元。在 Kubernetes 中,容器不直接在集群節(jié)點(diǎn)上運(yùn)行;相反,一個(gè)或多個(gè)容器被封裝在一個(gè) pod 中。pod 中的所有應(yīng)用程序共享相同的資源和本地網(wǎng)絡(luò),從而簡(jiǎn)化了 pod 中的應(yīng)用程序之間的通信。Pod 在每個(gè)節(jié)點(diǎn)上使用一個(gè)稱為 kubelet 的代理與 Kubernetes API 和集群的其余部分進(jìn)行通信。盡管開(kāi)發(fā)人員需要 API 訪問(wèn)權(quán)限,但 pod 的管理正在過(guò)渡到DevOps的領(lǐng)域。
隨著 pod 負(fù)載的增加,Kubernetes 可以自動(dòng)復(fù)制 pod 以實(shí)現(xiàn)所需的可擴(kuò)展性。因此,設(shè)計(jì)一個(gè)盡可能精簡(jiǎn)的吊艙是很重要的。Pod 應(yīng)該包含一個(gè)主進(jìn)程以及執(zhí)行它們所需的任何幫助或“邊車”容器。
容器與 pod 有什么區(qū)別?
容器包含執(zhí)行特定流程或功能所需的代碼。在 Kubernetes 之前,組織將直接在物理或虛擬服務(wù)器上運(yùn)行容器,但沒(méi)有Kubernetes 集群提供的可擴(kuò)展性和靈活性。
Pod 為容器提供了另一層抽象。一個(gè)或多個(gè)應(yīng)用程序可以包裝到一個(gè) pod 中(想想 pod 中的豌豆),而 pod 是 Kubernetes 集群中的最小執(zhí)行單元。例如,pod 可以包含初始化容器,這些容器為容器化應(yīng)用程序代碼準(zhǔn)備環(huán)境,然后在應(yīng)用程序容器開(kāi)始執(zhí)行之前終止。Pod 是集群中最小的復(fù)制單元,因此 Pod 中的所有容器將一起向上或向下擴(kuò)展。如果應(yīng)用程序需要訪問(wèn)持久存儲(chǔ),Pod 包括持久存儲(chǔ)卷和容器。
什么是 Kubernetes 節(jié)點(diǎn)?
正如 pod 是 Kubernetes 中最小的執(zhí)行單元一樣,節(jié)點(diǎn)是 Kubernetes 集群中計(jì)算硬件的最小單元。節(jié)點(diǎn)可以是本地物理服務(wù)器,也可以是駐留在本地或云提供商處的 VM。
像容器一樣,節(jié)點(diǎn)提供了一個(gè)抽象層。如果運(yùn)營(yíng)團(tuán)隊(duì)將節(jié)點(diǎn)視為具有處理能力和內(nèi)存的簡(jiǎn)單資源,則每個(gè)節(jié)點(diǎn)都可以與下一個(gè)節(jié)點(diǎn)互換。節(jié)點(diǎn)一起工作,形成 Kubernetes 集群,隨著需求的變化自動(dòng)分配工作負(fù)載。如果一個(gè)節(jié)點(diǎn)發(fā)生故障,它會(huì)自動(dòng)從集群中刪除,并由其他節(jié)點(diǎn)接管。每個(gè)節(jié)點(diǎn)都運(yùn)行一個(gè)名為 kubelet 的代理,它與集群控制平面進(jìn)行通信。節(jié)點(diǎn)是 DevOps 和 IT 的領(lǐng)域。
Kubernetes pod 與節(jié)點(diǎn)之間有什么區(qū)別?
Pod 是可執(zhí)行代碼的抽象,節(jié)點(diǎn)是計(jì)算機(jī)硬件的抽象,所以比較有點(diǎn)像蘋(píng)果和橘子。Pod 只是 Kubernetes 中最小的執(zhí)行單元,由一個(gè)或多個(gè)容器組成,每個(gè)容器都有一個(gè)或多個(gè)應(yīng)用程序及其二進(jìn)制文件。節(jié)點(diǎn)是組成 Kubernetes 集群的物理服務(wù)器或虛擬機(jī)。節(jié)點(diǎn)是可互換的,通常不會(huì)由用戶或 IT 單獨(dú)處理,除非需要維護(hù)。
什么是 Kubernetes 控制平面?
- Kubernetes 控制平面是 Kubernetes 集群的控制器。盡管大多數(shù)集群將有一個(gè)控制平面,但可以有多個(gè)以實(shí)現(xiàn)彈性。例如,在跨可用區(qū)的大型云部署中,可能有一個(gè)控制平面在每個(gè)可用區(qū)中運(yùn)行。這些是 Kubernetes 控制平面的組件:
- apiserver:顧名思義,API 服務(wù)器公開(kāi)了 Kubernetes API,它是通信中心。通過(guò)命令行界面 (CLI) 或其他用戶界面 (UI) 進(jìn)行的外部通信傳遞到 kube-apiserver,并且所有控制平面到節(jié)點(diǎn)的通信也通過(guò) API 服務(wù)器。
- etcd:存儲(chǔ)與集群相關(guān)的所有數(shù)據(jù)的鍵值存儲(chǔ)。etcd 具有高可用性和一致性,因?yàn)閷?duì) etcd 的所有訪問(wèn)都是通過(guò) API 服務(wù)器進(jìn)行的。etcd 中的信息通常以人類可讀的 YAML(YAML Ain't Markup Language)格式化。
- scheduler:創(chuàng)建新 Pod 時(shí),該組件會(huì)根據(jù)資源需求、策略和有關(guān)地理位置和與其他工作負(fù)載的干擾的“親和性”規(guī)范將其分配給節(jié)點(diǎn)執(zhí)行。
- controller-manager:雖然 Kubernetes 集群有多個(gè)控制器功能,但它們都被編譯成一個(gè)二進(jìn)制文件。
什么是 Kubernetes 集群?
Kubernetes 集群由節(jié)點(diǎn)組成,節(jié)點(diǎn)可以是虛擬機(jī)或物理服務(wù)器。當(dāng)你使用 Kubernetes 時(shí),你總是在管理一個(gè)集群。必須至少有一個(gè) Kubernetes 控制平面實(shí)例在一個(gè)節(jié)點(diǎn)上運(yùn)行,并且至少有一個(gè)節(jié)點(diǎn)供 pod 執(zhí)行。通常,集群將有多個(gè)節(jié)點(diǎn)來(lái)處理隨著工作負(fù)載變化(無(wú)論是由于一天中的時(shí)間、季節(jié)性還是其他原因)而擴(kuò)展的應(yīng)用程序。如果從集群中添加或減少節(jié)點(diǎn),集群將根據(jù)需要自動(dòng)重新分配工作負(fù)載。
Kubernetes 節(jié)點(diǎn)與集群有什么區(qū)別?
節(jié)點(diǎn)是集群的最小元素。集群由節(jié)點(diǎn)組成。集群是一個(gè)共享 pod 整體執(zhí)行的集體,反映在 Google Kubernetes 集群項(xiàng)目的原始名稱:Borg。
什么是 Kubernetes 卷?
由于容器最初被設(shè)計(jì)為短暫且無(wú)狀態(tài)的,因此幾乎不需要解決存儲(chǔ)持久性問(wèn)題。然而,隨著更多需要從持久存儲(chǔ)讀取和寫(xiě)入的應(yīng)用程序被容器化,訪問(wèn)持久存儲(chǔ)卷的需求已經(jīng)出現(xiàn)。為了實(shí)現(xiàn)這一點(diǎn),Kubernetes 具有持久卷。獨(dú)特之處在于它們?cè)诩和獠浚志镁砜梢話燧d到集群,而無(wú)需將它們與特定節(jié)點(diǎn)、容器或 pod 關(guān)聯(lián)。持久卷可以是本地的或基于云的,并且是 DevOps 和 IT 的領(lǐng)域。
Kubernetes 的組件如何協(xié)同工作?
簡(jiǎn)而言之,應(yīng)用程序被創(chuàng)建或遷移到容器中,然后用于創(chuàng)建在 Kubernetes 集群上運(yùn)行的 Pod。創(chuàng)建 Pod 后,Kubernetes 會(huì)將它們分配給集群中的一個(gè)或多個(gè)節(jié)點(diǎn),并確保正確數(shù)量的副本 Pod 正在運(yùn)行。Kubernetes 掃描集群以確保每組 pod 都按指定運(yùn)行。