LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

中間層 k8s(Kubernetes) 到底是什么,架構(gòu)是怎么樣的?

admin
2024年7月24日 23:22 本文熱度 1311

你是一個程序員,你用代碼寫了一個博客應(yīng)用服務(wù),并將它部署在了云平臺上。
但應(yīng)用服務(wù)太過受歡迎,訪問量太大,經(jīng)常會掛。

所以你用了一些工具自動重啟掛掉的應(yīng)用服務(wù),并且將應(yīng)用服務(wù)部署在了好幾個服務(wù)器上,總算抗住了。

后來你又上線了商城應(yīng)用服務(wù)和語音應(yīng)用服務(wù),隨著應(yīng)用服務(wù)變多,需求也千奇百怪。有的應(yīng)用服務(wù)不希望被外網(wǎng)訪問到,有的部署的時候要求內(nèi)存得大于 xxGB 才能正常跑。
你每次都需要登錄到各個服務(wù)器上,執(zhí)行手動操作更新。不僅容易出錯,還賊浪費時間

原本就沒時間找女朋友的你,現(xiàn)在哭得更大聲了。

那么問題就來了,有沒有一個辦法,可以解決上面的問題?當然有,沒有什么是加一個中間層不能解決的,如果有,那就再加一層
這次我們要加的中間層,叫 Kubernetes


Kubernetes的位置

Kubernetes 是什么?

Kubernetes,它是 G 家開源的神器,因為單詞太長,所以我們習慣省略中間 8 個字母,簡稱它為 k8s


k8s名稱的由來

它介于應(yīng)用服務(wù)服務(wù)器之間,能夠通過策略,協(xié)調(diào)和管理多個應(yīng)用服務(wù),只需要一個 yaml 文件配置,定義應(yīng)用的部署順序等信息,就能自動部署應(yīng)用到各個服務(wù)器上,還能讓它們掛了自動重啟,自動擴縮容。

聽起來有些厲害,它是怎么實現(xiàn)這些功能的呢?

Kubernetes 架構(gòu)原理

為了實現(xiàn)上面的功能,Kubernetes 會將我們的服務(wù)器劃為兩部分,一部分叫控制平面(control plane,以前叫master),另一部分叫工作節(jié)點,也就是 Node。簡單來說它們的關(guān)系就是老板和打工人, 用現(xiàn)在流行的說法就是訓練師和帕魯。控制平面負責控制和管理各個 Node,而 Node 則負責實際運行各個應(yīng)用服務(wù)。


k8s控制平面和Node的關(guān)系

我們依次看下這兩者的內(nèi)部架構(gòu)。

控制平面內(nèi)部組件

  • • 以前我們需要登錄到每臺服務(wù)器上,手動執(zhí)行各種命令,現(xiàn)在我們只需要調(diào)用 k8s 的提供的 api 接口,就能操作這些服務(wù)資源,這些接口都由 API Server 組件提供。

  • • 以前我們需要到處看下哪臺服務(wù)器 cpu 和內(nèi)存資源充足,然后才能部署應(yīng)用,現(xiàn)在這部分決策邏輯由 Scheduler(調(diào)度器)來完成。

  • • 找到服務(wù)器后,以前我們會手動創(chuàng)建,關(guān)閉服務(wù),現(xiàn)在這部分功能由 Controller Manager(控制器管理器)來負責。

  • • 上面的功能都會產(chǎn)生一些數(shù)據(jù),這些數(shù)據(jù)需要被保存起來,方便后續(xù)做邏輯,因此 k8s 還會需要一個存儲層,用來存放各種數(shù)據(jù)信息,目前是用的 etcd,這部分源碼實現(xiàn)的很解耦,后續(xù)可能會擴展支持其他中間件。

以上就是控制平面內(nèi)部的組件。


k8s控制平面組件

我們接下來再看看 Node 里有哪些組件。

Node 內(nèi)部組件

Node 是實際的工作節(jié)點,它既可以是裸機服務(wù)器,也可以是虛擬機。它會負責實際運行各個應(yīng)用服務(wù)。多個應(yīng)用服務(wù)共享一臺 Node 上的內(nèi)存和 CPU 等計算資源。


Node可以是裸機服務(wù)器或虛擬機

在文章開頭,我們聊到了部署多個應(yīng)用服務(wù)的場景。以前我們需要上傳代碼到服務(wù)器,而用了 k8s 之后,我們只需要將服務(wù)代碼打包成Container Image(容器鏡像),就能一行命令將它部署。

如果你不了解容器鏡像的含義,你可以簡單理解為它其實就是將應(yīng)用代碼和依賴的系統(tǒng)環(huán)境打了個壓縮包,在任意一臺機器上解壓這個壓縮包,就能正常運行服務(wù)。為了下載和部署鏡像,Node 中會有一個 Container runtime 組件。


將容器鏡像粗略理解為壓縮包

每個應(yīng)用服務(wù)都可以認為是一個 Container(容器), 并且大多數(shù)時候,我們還會為應(yīng)用服務(wù)搭配一個日志收集器 Container 或監(jiān)控收集器 Container,多個 Container 共同組成一個一個 Pod,它運行在 Node 上。


一個pod內(nèi)有多個容器

k8s 可以將 pod 從某個 Node 調(diào)度到另一個 Node,還能以 pod 為單位去做重啟和動態(tài)擴縮容的操作。
所以說 Pod 是 k8s 中最小的調(diào)度單位


Node調(diào)度Pod

另外,前面提到控制平面會用 Controller Manager (通過API Server)控制 Node 創(chuàng)建和關(guān)閉服務(wù),那 Node 也得有個組件能接收到這個命令才能去做這些動作,這個組件叫 kubelet,它主要負責管理和監(jiān)控 Pod。最后,Node 中還有個 Kube Proxy ,它負責 Node 的網(wǎng)絡(luò)通信功能,有了它,外部請求就能被轉(zhuǎn)發(fā)到 Pod 內(nèi)。


控制平面和Node的組件

Cluster

控制平面和Node 共同構(gòu)成了一個 Cluster,也就是集群。在公司里,我們一般會構(gòu)建多個集群, 比如測試環(huán)境用一個集群,生產(chǎn)環(huán)境用另外一個集群。同時,為了將集群內(nèi)部的服務(wù)暴露給外部用戶使用,我們一般還會部署一個入口控制器,比如 Ingress 控制器(比如Nginx),它可以提供一個入口讓外部用戶訪問集群內(nèi)部服務(wù)。


生產(chǎn)和測試環(huán)境

kubectl 是什么

上面提到說我們可以使用 k8s 提供的 API 去創(chuàng)建服務(wù),但問題就來了,這是需要我們自己寫代碼去調(diào)用這些 API 嗎?答案是不需要,k8s 為我們準備了一個命令行工具 kubectl,我們只需要執(zhí)行命令,它內(nèi)部就會調(diào)用 k8s 的 API。


kubectl調(diào)用k8s的API

接下來我們以部署服務(wù)為例子,看下 k8s 是怎么工作的。

怎么部署服務(wù)?

首先我們需要編寫 YAML 文件,在里面定義 Pod 里用到了哪些鏡像,占用多少內(nèi)存和 CPU 等信息。然后使用 kubectl 命令行工具執(zhí)行 kubectl apply -f xx.yaml ,此時 kubectl 會讀取和解析 YAML 文件,將解析后的對象通過 API 請求發(fā)送給 Kubernetes 控制平面內(nèi) 的 API Server。API Server 會根據(jù)要求,驅(qū)使 Scheduler 通過 etcd 提供的數(shù)據(jù)尋找合適的 Node, Controller Manager 會通過 API Server 控制 Node 創(chuàng)建服務(wù),Node 內(nèi)部的 kubelet 在收到命令后會開始基于 Container runtime 組件去拉取鏡像創(chuàng)建容器,最終完成 Pod 的創(chuàng)建。

至此服務(wù)完成創(chuàng)建。


部署應(yīng)用服務(wù)

整個過程下來,我們只需要寫一遍 yaml 文件,和執(zhí)行一次 kubectl 命令,比以前省心太多了!部署完服務(wù)后,我們來看下服務(wù)是怎么被調(diào)用的。

怎么調(diào)用服務(wù)?

以前外部用戶小明,直接在瀏覽器上發(fā)送 http 請求,就能打到我們服務(wù)器上的 Nginx,然后轉(zhuǎn)發(fā)到部署的服務(wù)內(nèi)。用了 k8s 之后,外部請求會先到達 Kubernetes 集群的 Ingress 控制器,然后請求會被轉(zhuǎn)發(fā)到 Kubernetes 內(nèi)部的某個 Node 的 Kube Proxy 上,再找到對應(yīng)的 pod,然后才是轉(zhuǎn)發(fā)到內(nèi)部容器服務(wù)中,處理結(jié)果原路返回,到這就完成了一次服務(wù)調(diào)用。


用戶調(diào)用k8s內(nèi)應(yīng)用服務(wù)的流程

到這里我們就大概了解了 k8s 的工作原理啦,它本質(zhì)上就是應(yīng)用服務(wù)和服務(wù)器之間的中間層,通過暴露一系列 API 能力讓我們簡化服務(wù)的部署運維流程。

并且,不少中大廠基于這些 API 能力搭了自己的服務(wù)管理平臺,程序員不再需要敲 kubectl 命令,直接在界面上點點幾下,就能完成服務(wù)的部署和擴容等操作,是真的嘎嘎好用。

總結(jié)

  • • k8s 是 G 家開源的神器,用于管理海量容器服務(wù)。

  • • k8s 集群內(nèi)分為控制平面和 Node,控制平面是大腦,負責發(fā)指令,Node 是手腳,負責執(zhí)行任務(wù)。

  • • 控制平面內(nèi)有 API Server,Scheduler,Controller Manager 以及 etcd 等組件。Node 中含有 Pod,Kubelet,Container runtime, Kube Proxy 等組件。控制平面和 Node 共同構(gòu)成一個 Cluster。

  • • 文章通過怎么部署服務(wù)和怎么調(diào)用服務(wù)兩個例子將這些組件串聯(lián)了起來,方便大家加深理解。

最后給大家留一個問題,我們提到 k8s 的時候,一般會提一下 docker, 但為了避免大家混淆,我在寫這篇文章的時候,只字不提 docker,你知道 docker 和 k8s 之間是什么關(guān)系嗎?


該文章在 2024/7/24 23:22:22 編輯過
關(guān)鍵字查詢
相關(guān)文章
正在查詢...
點晴ERP是一款針對中小制造業(yè)的專業(yè)生產(chǎn)管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國內(nèi)大量中小企業(yè)的青睞。
點晴PMS碼頭管理系統(tǒng)主要針對港口碼頭集裝箱與散貨日常運作、調(diào)度、堆場、車隊、財務(wù)費用、相關(guān)報表等業(yè)務(wù)管理,結(jié)合碼頭的業(yè)務(wù)特點,圍繞調(diào)度、堆場作業(yè)而開發(fā)的。集技術(shù)的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業(yè)的高效ERP管理信息系統(tǒng)。
點晴WMS倉儲管理系統(tǒng)提供了貨物產(chǎn)品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質(zhì)期管理,貨位管理,庫位管理,生產(chǎn)管理,WMS管理系統(tǒng),標簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務(wù)都免費,不限功能、不限時間、不限用戶的免費OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved

黄频国产免费高清视频,久久不卡精品中文字幕一区,激情五月天AV电影在线观看,欧美国产韩国日本一区二区
午夜福利在线观看一区二区 | 日韩免费在线观看视频 | 日本久久道色综合久久 | 在线欧美日韩国产 | 免费人成在线观看99 | 色综合伊人丁香五月婷婷综合缴情 |