k8s(一)基礎(chǔ)概念和理解

1.了解 Kubernetes

1.1簡述功能

  • Kubernetes 是一個(gè)軟件系統(tǒng),它允許你在其上很容易地部署和管理容器化的應(yīng)用。

  • 它依賴于 Linux容器的特性來運(yùn)行異構(gòu)應(yīng)用, 而無須知道這些應(yīng)用的內(nèi)部詳情, 也不需要手動(dòng)將這些應(yīng)用部署到每臺(tái)機(jī)器.

  • 通過 Kubernetes 部署應(yīng)用程序時(shí),你的 集群包含多少節(jié)點(diǎn)都是 一樣的 。集群規(guī)模不會(huì)造成什么差異性,額外的集群節(jié)點(diǎn)只是代表 一 些額外的可用來部署應(yīng)用的資源

1.2核心功能

  • 開發(fā)者把 一個(gè)應(yīng)用列表提 到主節(jié)點(diǎn), Kubemetes 會(huì)將它們部署 到集群的工作節(jié)點(diǎn)。

  • 組件被部署在哪個(gè)節(jié)點(diǎn)對(duì)于開發(fā)者和系統(tǒng)管理員來說都不用 關(guān)心 。

image-20230217161122748.png
  • 開發(fā)者能指定一些應(yīng)用必須一起運(yùn)行, Kubemetes 將會(huì)在一個(gè)工作節(jié)點(diǎn)上部署它們 。

  • 其他的將被分散部署到集群中,但是不管部署在哪兒,它們都能以相同的方式互相通信。

1.3友好人群

  • 幫助開發(fā)者聚焦核心應(yīng)用功能

Kubemetes 可以被當(dāng)作集群的一 個(gè)操作系統(tǒng)來看待。它降低了開發(fā)者不得不在他們的應(yīng)用里實(shí)現(xiàn)一些和基礎(chǔ)設(shè)施相關(guān)服務(wù)的心智負(fù)擔(dān)。

他們現(xiàn)在依賴于 Kubemetes 來提供這些服務(wù),包括服務(wù)發(fā)現(xiàn)、擴(kuò)容、負(fù)載均衡、自恢復(fù),甚至領(lǐng)導(dǎo)者的選舉 。

應(yīng)用程序開發(fā)者因此能 集中精力實(shí)現(xiàn)應(yīng)用本身 的功能而不用浪費(fèi)時(shí)間思 索怎樣集成應(yīng)用與基礎(chǔ)設(shè)施 。

  • 幫助運(yùn)維團(tuán)隊(duì)獲取更高的資源利用率

Kubemetes 將你的容器化應(yīng)用運(yùn)行在集群的某個(gè)地方,井提供信息給應(yīng)用組件來發(fā)現(xiàn)彼此并保證它們的運(yùn)行 。

因?yàn)槟愕膽?yīng)用程序不關(guān)心它運(yùn)行在哪個(gè)節(jié)點(diǎn)上,Kubemetes 能在任何時(shí)間遷移應(yīng)用并通過混合和匹配應(yīng)用來獲得比手動(dòng)調(diào)度高很多的資源利用率 。

2.Kubernetes 集群架構(gòu)

2.1基礎(chǔ)架構(gòu)

在硬件級(jí)別, 一 個(gè) Kubernetes 集群由很多節(jié)點(diǎn)組成, 這些節(jié)點(diǎn)被分成以下兩種類型 :

  • 主節(jié)點(diǎn) ,它承載著 Kubernetes控制和管理整個(gè)集群系統(tǒng)的控制面板

  • 工作節(jié)點(diǎn),它們運(yùn)行用戶實(shí)際部署的應(yīng)用

2.2 控制面板-主節(jié)點(diǎn)

控制面板用于控制集群并使它工作。它包含多個(gè)組件,組件可以運(yùn)行在單個(gè)主節(jié)點(diǎn)上或者通過副本分別部署在多個(gè)主節(jié)點(diǎn)以確保高可用性。 這些組件是 :

  • Kubernetes API 服務(wù)器,你和其他控制面板組件都要和它通信

  • Scheculer,它調(diào)度你的應(yīng)用(為應(yīng)用的每個(gè)可部署組件分配一 個(gè)工作節(jié)點(diǎn)〕

  • Controller Manager,它執(zhí)行集群級(jí)別的功能,如復(fù)制組件、持續(xù)跟蹤工作節(jié)點(diǎn)、處理節(jié)點(diǎn)失敗等

  • etcd,一個(gè)可靠的分布式數(shù)據(jù)存儲(chǔ),它能持久化存儲(chǔ)集群配置


    image-20230217161949414.png

控制面板的組件持有并控制集群狀態(tài),但是它們不運(yùn)行你的應(yīng)用程序。這是由工作節(jié)點(diǎn)完成的 。

2.2工作節(jié)點(diǎn)

工作節(jié)點(diǎn)是運(yùn)行容器化應(yīng)用的機(jī)器。運(yùn)行、監(jiān)控和管理應(yīng)用服務(wù)的任務(wù)是由以 下組件完成的 :

  • Docker、rtk或其他的容器類型

  • Kubelet,它與 API 服務(wù)器通信,并管理它所在節(jié)點(diǎn)的容器

  • Kubernetes Service Proxy (kube-proxy),它負(fù)責(zé)組件之間的負(fù)載均衡網(wǎng)絡(luò)流量

3.運(yùn)行應(yīng)用

image-20230217171600012.png

3.1基礎(chǔ)步驟和意義

  • 為了在 Kubernetes 中運(yùn)行應(yīng)用,首先需要將應(yīng)用打包進(jìn)一個(gè)或多個(gè)容器鏡像, 再將那些鏡像推送到鏡像倉庫

  • 然后將應(yīng)用的描述發(fā)布到 Kubemetes API 服務(wù)器 。描述包括:

    • 諸如容器鏡像或者包含應(yīng)用程序組件的容器鏡像、這些組件如何相互關(guān)聯(lián)

    • 哪些組件需要同時(shí)運(yùn)行在同一個(gè)節(jié)點(diǎn)上和哪些組件不需要同時(shí)運(yùn)行等信息。

    • 此外該描述還包括哪些組件為內(nèi)部或外部客戶提供服務(wù)且應(yīng)該通過單個(gè)IP地址暴露 ,并使其他組件可以發(fā)現(xiàn) 。

3.2描述信息怎么運(yùn)行的容器

  • 當(dāng) API服務(wù)器處理應(yīng)用的描述時(shí),調(diào)度器調(diào)度指定組的容器到可用的工作節(jié)點(diǎn)上,

  • 調(diào)度是基于每組所需的計(jì)算資源,以及調(diào)度時(shí)每個(gè)節(jié)點(diǎn)未分配的資源。

  • 然后那些節(jié)點(diǎn)上的 Kubelet 指示容器運(yùn)行時(shí)(例如 Docker)拉取所需的鏡像并運(yùn)行容器

3.3保持容器運(yùn)行

  • 一旦應(yīng)用程序運(yùn)行起來, Kubernetes 就會(huì)不斷地確認(rèn)應(yīng)用程序的部署狀態(tài)始終與你提供的描述相匹配。

  • 如果你指出你需要運(yùn)行五個(gè) web 服務(wù)器實(shí)例,那么 Kubernetes 總是保持正好運(yùn)行五個(gè)實(shí)例。

  • 如果實(shí)例之一停止了正常工作,比如當(dāng)進(jìn) 程崩潰或停止響應(yīng)時(shí), Kubernetes 將自動(dòng)重啟它 。

  • 如果整個(gè)工作節(jié)點(diǎn)死亡或無法訪問, Kubernetes 將為在故障節(jié)點(diǎn)上運(yùn)行的所有容器選擇新節(jié)點(diǎn),并在新選擇的節(jié)點(diǎn)上運(yùn)行它們 。

3.4擴(kuò)展副本數(shù)量

  • 當(dāng)應(yīng)用程序運(yùn)行時(shí),可以決定要增加或減少副本量 ,而 Kubemetes將分別增加附加的或停止多余的副本。

  • 甚至可以把決定最佳副本數(shù)目的工作交給 Kubemetes。

  • 它可以根據(jù)實(shí)時(shí)指標(biāo)(如 CPU 負(fù)載、內(nèi)存消耗、每秒查詢或應(yīng)用程序公開的任何其他指標(biāo))自動(dòng)調(diào)整副本數(shù) 。

3.5命中移動(dòng)目標(biāo)

  • Kubemetes 可能需要在集群中遷移你的容器。當(dāng)它們運(yùn)行的節(jié)點(diǎn)失敗時(shí),或者為了給其他容器騰出地方而從節(jié)點(diǎn)移除時(shí)就會(huì)發(fā)生

  • 如果容器向運(yùn)行在集群中的其他容器或者外部客戶端提供服務(wù),那么當(dāng)容器在集群內(nèi)頻繁調(diào)度時(shí),它們?cè)撊绾握_使用這個(gè)容器?

  • 當(dāng)這些容器被復(fù)制并分布在整個(gè)集群中時(shí),客戶端如何連接到提供服務(wù)的容器呢?

  • 上述兩條中的的其他容器外部客戶端需要考慮尋找的容器是移動(dòng)的,即移動(dòng)目標(biāo)!!

  • 為了讓客戶能夠輕松地找到提供特定服務(wù)的容器,可以告訴 Kubemetes 哪些容器提供相同的服務(wù),

  • 而 Kubemetes將通過一個(gè)靜態(tài)IP地址暴露所有容器,并將該地址暴露給集群中運(yùn)行的所有應(yīng)用程序。

  • 這是通過環(huán)境變量完成的,但是客戶端也可以通過良好的DNS查找服務(wù)IP。

  • kube-proxy 將確保到服務(wù)的連接可跨提供服務(wù)的容器實(shí)現(xiàn)負(fù)載均衡。服務(wù)的 IP 地址保持不變,

  • 因此客戶端始終可以連接到它的容器,即使它們?cè)?strong>集群中移動(dòng)。

4.使用 Kubernetes 的好處

4.1簡化應(yīng)用程序部署

  • k8s將其所有工作節(jié)點(diǎn)公開為一個(gè)部署平臺(tái),因此應(yīng)用程序開發(fā)人員可以自己開始部署應(yīng)用程序,不需要了解組成集群的服務(wù)器。

  • 現(xiàn)在所有節(jié)點(diǎn)都是一組等待應(yīng)用程序使用它們的計(jì)算資源。開發(fā)人員通常不關(guān)心應(yīng)用程序運(yùn)行在哪個(gè)服務(wù)器上,只要服務(wù)器能夠?yàn)閼?yīng)用程序提供足夠的系統(tǒng)資源即可。

  • 如果開發(fā)人員因?yàn)楣?jié)點(diǎn)異構(gòu)原因確實(shí)想知道自己的程序跑到了那個(gè)節(jié)點(diǎn),節(jié)點(diǎn)硬件符不符合自己的需求。

  • 那么可以直接告訴k8s你這個(gè)程序想跑那個(gè)節(jié)點(diǎn)即可

4.2更好地利用硬件

  • 通過在服務(wù)器上裝配 K8s,并使用它運(yùn)行應(yīng)用程序而不是手動(dòng)運(yùn)行它們, 你己經(jīng)將應(yīng)用程序與基礎(chǔ)設(shè)施分離開來。

  • 當(dāng)你告訴 K8s運(yùn)行你的應(yīng)用程序時(shí),你在讓它根據(jù)應(yīng)用程序的資源需求描述和每個(gè)節(jié)點(diǎn)上的可用資源選擇最合適的節(jié)點(diǎn)來運(yùn)行你的應(yīng)用程序。

  • 通過使用容器,不再用把這個(gè)應(yīng)用綁定到一個(gè)特定的集群節(jié)點(diǎn),而允許應(yīng)用程序在任何時(shí)候都在集群中自由遷移

  • 所以在集群上運(yùn)行的不同應(yīng)用程序組件可以被混合和匹配來緊密打包到集群節(jié)點(diǎn)。這將確保節(jié)點(diǎn)的硬件資源得到盡可能好的利用。

  • 可以隨時(shí)在集群中移動(dòng)應(yīng)用程序的能力,使得 Kubemetes 可以比人工更好地利用基礎(chǔ)設(shè)施

4.3健康檢查和自修復(fù)

  • K8s 監(jiān)控你的應(yīng)用程序組件和它們運(yùn)行的節(jié)點(diǎn),并在節(jié)點(diǎn)出現(xiàn)故障時(shí)自動(dòng)將它們重新調(diào)度到其他節(jié)點(diǎn)。

  • 運(yùn)維不用去重新部署應(yīng)用,專注修復(fù)節(jié)點(diǎn)本身,然后將其修好送回硬件資源池

4.4自動(dòng)擴(kuò)容

  • Kubemetes 監(jiān)視每個(gè)應(yīng)用程序使用 的資源,并不斷調(diào)整每個(gè)應(yīng)用程序 的運(yùn)行實(shí)例數(shù) 量。

  • 如果 Kubemetes 運(yùn)行在 云基礎(chǔ)設(shè)施上,在這些基礎(chǔ)設(shè)施中,添加額外的節(jié)點(diǎn)就 像通過云供應(yīng)商的 API 請(qǐng)求它們一樣簡單

  • 那么 Kubemetes 甚至可以根據(jù)部署的應(yīng)用程序的需要自動(dòng)地將整個(gè)集群規(guī)模放大或縮小 。

5.小結(jié)

  • 單體應(yīng)用程序更容易部署,但隨著時(shí)間的推移更難維護(hù),并且有時(shí)難以擴(kuò)展。

  • 基于微服務(wù)的應(yīng)用程序體系結(jié)構(gòu)使每個(gè)組件的開發(fā)更容易,但是很難配置和部署它們作為單個(gè)系統(tǒng)工作。

  • Linux 容器提供的好處與虛擬機(jī)差不 多,但它們輕量許多 ,并且允許更好地利用硬件 。

  • 通過允許更簡單快捷地將容器化應(yīng)用和其操作系統(tǒng)環(huán)境 一起管理, Docker改進(jìn)了現(xiàn)有的 Linux 容器技術(shù) 。

  • Kubernetes將整個(gè)數(shù)據(jù)中心暴露為用于運(yùn)行應(yīng)用程序的單個(gè)計(jì)算資源。

  • 開發(fā)人員可以通過Kubernetes部署應(yīng)用程序,而無須系統(tǒng)管理員的幫助。

  • 通過讓Kubernetes自動(dòng)地處理故障節(jié)點(diǎn), 系統(tǒng)管理員可以睡得更好。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容