1.了解 Kubernetes
1.1簡(jiǎn)述功能
Kubernetes 是一個(gè)軟件系統(tǒng),它允許你在其上很容易地部署和管理容器化的應(yīng)用婉刀。
它依賴于 Linux容器的特性來(lái)運(yùn)行異構(gòu)應(yīng)用吟温, 而無(wú)須知道這些應(yīng)用的內(nèi)部詳情, 也不需要手動(dòng)將這些應(yīng)用部署到每臺(tái)機(jī)器.
通過(guò) Kubernetes 部署應(yīng)用程序時(shí)突颊,你的 集群包含多少節(jié)點(diǎn)都是 一樣的 鲁豪。集群規(guī)模不會(huì)造成什么差異性,額外的集群節(jié)點(diǎn)只是代表 一 些額外的可用來(lái)部署應(yīng)用的資源
1.2核心功能
開發(fā)者把 一個(gè)應(yīng)用列表提 到主節(jié)點(diǎn)律秃, Kubemetes 會(huì)將它們部署 到集群的工作節(jié)點(diǎn)爬橡。
組件被部署在哪個(gè)節(jié)點(diǎn)對(duì)于開發(fā)者和系統(tǒng)管理員來(lái)說(shuō)都不用 關(guān)心 。
開發(fā)者能指定一些應(yīng)用必須一起運(yùn)行棒动, Kubemetes 將會(huì)在一個(gè)工作節(jié)點(diǎn)上部署它們 糙申。
其他的將被分散部署到集群中,但是不管部署在哪兒船惨,它們都能以相同的方式互相通信柜裸。
1.3友好人群
- 幫助開發(fā)者聚焦核心應(yīng)用功能
Kubemetes 可以被當(dāng)作集群的一 個(gè)操作系統(tǒng)來(lái)看待。它降低了開發(fā)者不得不在他們的應(yīng)用里實(shí)現(xiàn)一些和基礎(chǔ)設(shè)施相關(guān)服務(wù)的心智負(fù)擔(dān)掷漱。
他們現(xiàn)在依賴于 Kubemetes 來(lái)提供這些服務(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)用組件來(lái)發(fā)現(xiàn)彼此并保證它們的運(yùn)行 奥裸。
因?yàn)槟愕膽?yīng)用程序不關(guān)心它運(yùn)行在哪個(gè)節(jié)點(diǎn)上,Kubemetes 能在任何時(shí)間遷移應(yīng)用并通過(guò)混合和匹配應(yīng)用來(lái)獲得比手動(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)上或者通過(guò)副本分別部署在多個(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)用
3.1基礎(chǔ)步驟和意義
為了在 Kubernetes 中運(yùn)行應(yīng)用,首先需要將應(yīng)用打包進(jìn)一個(gè)或多個(gè)容器鏡像市咽, 再將那些鏡像推送到鏡像倉(cāng)庫(kù)
-
然后將應(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)該通過(guò)單個(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)行起來(lái)致稀, 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)死亡或無(wú)法訪問(wè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將通過(guò)一個(gè)靜態(tài)IP地址暴露所有容器宿稀,并將該地址暴露給集群中運(yùn)行的所有應(yīng)用程序趁舀。
這是通過(guò)環(huán)境變量完成的,但是客戶端也可以通過(guò)良好的DNS查找服務(wù)IP祝沸。
kube-proxy 將確保到服務(wù)的連接可跨提供服務(wù)的容器實(shí)現(xiàn)負(fù)載均衡矮烹。服務(wù)的 IP 地址保持不變,
因此客戶端始終可以連接到它的容器罩锐,即使它們?cè)?strong>集群中移動(dòng)奉狈。
4.使用 Kubernetes 的好處
4.1簡(jiǎn)化應(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更好地利用硬件
通過(guò)在服務(wù)器上裝配 K8s跛蛋,并使用它運(yùn)行應(yīng)用程序而不是手動(dòng)運(yùn)行它們, 你己經(jīng)將應(yīng)用程序與基礎(chǔ)設(shè)施分離開來(lái)痊硕。
當(dāng)你告訴 K8s運(yùn)行你的應(yīng)用程序時(shí),你在讓它根據(jù)應(yīng)用程序的資源需求描述和每個(gè)節(jié)點(diǎn)上的可用資源選擇最合適的節(jié)點(diǎn)來(lái)運(yùn)行你的應(yīng)用程序赊级。
通過(guò)使用容器,不再用把這個(gè)應(yīng)用綁定到一個(gè)特定的集群節(jié)點(diǎn),而允許應(yīng)用程序在任何時(shí)候都在集群中自由遷移
所以在集群上運(yùn)行的不同應(yīng)用程序組件可以被混合和匹配來(lái)緊密打包到集群節(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)就 像通過(guò)云供應(yīng)商的 API 請(qǐng)求它們一樣簡(jiǎn)單
那么 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ī)差不 多牺蹄,但它們輕量許多 忘伞,并且允許更好地利用硬件 。
通過(guò)允許更簡(jiǎn)單快捷地將容器化應(yīng)用和其操作系統(tǒng)環(huán)境 一起管理沙兰, Docker改進(jìn)了現(xiàn)有的 Linux 容器技術(shù) 氓奈。
Kubernetes將整個(gè)數(shù)據(jù)中心暴露為用于運(yùn)行應(yīng)用程序的單個(gè)計(jì)算資源。
開發(fā)人員可以通過(guò)Kubernetes部署應(yīng)用程序鼎天,而無(wú)須系統(tǒng)管理員的幫助舀奶。
通過(guò)讓Kubernetes自動(dòng)地處理故障節(jié)點(diǎn), 系統(tǒng)管理員可以睡得更好斋射。