節(jié)點(diǎn)是Kubernetes集群的重要部分,負(fù)責(zé)運(yùn)行容器化的工作負(fù)載。它的目的是向應(yīng)用程序公開(kāi)計(jì)算、網(wǎng)絡(luò)和存儲(chǔ)資源。
head節(jié)點(diǎn)通常運(yùn)行控制平面,負(fù)責(zé)調(diào)度和管理工作負(fù)載的生命周期。worker節(jié)點(diǎn)運(yùn)行應(yīng)用程序。head節(jié)點(diǎn)和worker節(jié)點(diǎn)的集合就構(gòu)成了一個(gè)集群。
每個(gè)Kubernetes節(jié)點(diǎn)包括一個(gè)容器運(yùn)行時(shí)(比如Docker),以及一個(gè)與head通信的代理(kubelet)。節(jié)點(diǎn)可以是運(yùn)行在云中的虛擬機(jī)(VM),也可以是數(shù)據(jù)中心內(nèi)的裸金屬服務(wù)器。
【容器運(yùn)行時(shí)】
容器運(yùn)行時(shí)負(fù)責(zé)管理節(jié)點(diǎn)中運(yùn)行的每個(gè)容器的生命周期。在節(jié)點(diǎn)上調(diào)度pod之后,運(yùn)行時(shí)從注冊(cè)表中提取pod指定的鏡像。當(dāng)一個(gè)pod被終止時(shí),運(yùn)行時(shí)終止屬于這個(gè)pod的容器。Kubernetes可以與任何符合OCI的容器運(yùn)行時(shí)進(jìn)行通信,包括Docker和CRI-O。
【Kubelet】
Kubelet是Kubernetes代理,其職責(zé)是與容器運(yùn)行時(shí)交互以執(zhí)行諸如啟動(dòng)、停止和維護(hù)容器等操作。
每個(gè)kubelet還監(jiān)控pod的狀態(tài)。當(dāng)一個(gè)pod不符合部署定義的所需狀態(tài)時(shí),它可以在同一個(gè)節(jié)點(diǎn)上重新啟動(dòng)。節(jié)點(diǎn)的狀態(tài)每隔幾秒鐘通過(guò)心跳消息傳輸?shù)絟ead。如果head檢測(cè)到節(jié)點(diǎn)故障,復(fù)制控制器會(huì)觀察到這種狀態(tài)變化,然后在其他正常節(jié)點(diǎn)上調(diào)度pod。
【Kube-Proxy】
OCI是定義運(yùn)行時(shí)規(guī)范和鏡像規(guī)范的標(biāo)準(zhǔn),其目的是推動(dòng)容器運(yùn)行時(shí)和鏡像格式的標(biāo)準(zhǔn)化。
【日志記錄層】
編排器經(jīng)常使用日志記錄來(lái)收集每個(gè)節(jié)點(diǎn)上容器的資源使用情況和性能指標(biāo),例如CPU、內(nèi)存、文件和網(wǎng)絡(luò)使用情況。CNCF托管了一個(gè)軟件組件,該組件提供了一個(gè)統(tǒng)一的日志記錄層,與Kubernetes或其他編排器(稱為Fluentd)一起使用。這個(gè)組件生成Kubernetes主控制器需要的指標(biāo),以便跟蹤可用的集群資源以及整個(gè)基礎(chǔ)設(shè)施的運(yùn)行狀況。
【附加組件】
Kubernetes以附加組件的形式支持附加服務(wù)。這些可選服務(wù)(如儀表板)的部署方式與其他應(yīng)用程序相同,但與節(jié)點(diǎn)上的其他核心組件(如日志記錄層和kube-proxy)集成在一起。例如,dashboard組件從kubelet中提取指標(biāo),以可視化地顯示資源利用率。DNS附加組件基于kube-dns或CoreDNS,通過(guò)名稱解析來(lái)增強(qiáng)kube-proxy。
【工作負(fù)載是容器化的應(yīng)用程序】
控制平面和worker節(jié)點(diǎn)構(gòu)成核心集群基礎(chǔ)設(shè)施,而工作負(fù)載是部署在Kubernetes中的容器化應(yīng)用程序。
在開(kāi)發(fā)和測(cè)試微服務(wù)之后,開(kāi)發(fā)人員將其打包為容器,容器是打包為pod的最小部署單元。屬于同一應(yīng)用程序的一組容器在Kubernetes中被分組、打包、部署和管理。
Kubernetes公開(kāi)了用于部署的原語(yǔ),同時(shí)不斷地?cái)U(kuò)展、發(fā)現(xiàn)和監(jiān)控這些微服務(wù)的運(yùn)行狀況。命名空間通常用于從邏輯上分離一個(gè)應(yīng)用程序和另一個(gè)應(yīng)用程序。它們充當(dāng)一個(gè)邏輯集群,為屬于應(yīng)用程序的所有資源和服務(wù)提供定義良好的邊界和范圍。
在命名空間中,將部署以下Kubernetes原語(yǔ):
pod——pod是Kubernetes應(yīng)用程序的基本執(zhí)行單元。它是Kubernetes對(duì)象模型中最小、最簡(jiǎn)單的單元。pod也是Kubernetes應(yīng)用程序中最小的可調(diào)度項(xiàng)。如果Kubernetes是一個(gè)操作系統(tǒng),那么pod代表在集群上運(yùn)行的一組進(jìn)程,其中每個(gè)進(jìn)程可以映射到一個(gè)容器。
pod是Kubernetes工作負(fù)載管理的核心單元,充當(dāng)共享相同執(zhí)行上下文和資源的容器的邏輯邊界。將相關(guān)容器分組到pod中,可以一起運(yùn)行多個(gè)相關(guān)進(jìn)程,從而彌補(bǔ)了容器化取代第一代虛擬化時(shí)帶來(lái)的配置挑戰(zhàn)。
每個(gè)pod是一個(gè)或多個(gè)容器的集合,這些容器使用進(jìn)程間通信(IPC)進(jìn)行通信,并且可以共享存儲(chǔ)和網(wǎng)絡(luò)堆棧。在容器需要耦合并位于同一位置的場(chǎng)景中(例如,web服務(wù)器容器和緩存容器),它們可以很容易地打包在單個(gè)pod中。pod可以手動(dòng)擴(kuò)展,也可以通過(guò)稱為Horizontal Pod Autoscaling(HPA)功能定義的策略進(jìn)行擴(kuò)展。通過(guò)這種方法,作為部署一部分的pod的數(shù)量根據(jù)可用資源按比例增加。
pod實(shí)現(xiàn)了開(kāi)發(fā)和部署之間的功能分離。當(dāng)開(kāi)發(fā)人員專注于他們的代碼時(shí),運(yùn)維人員可以專注于更廣泛的情況來(lái)決定哪些相關(guān)的容器可以聚合到一個(gè)功能單元中。這樣會(huì)帶來(lái)最佳的可移植性,因?yàn)閜od只是一個(gè)或多個(gè)容器鏡像的清單。
【控制器】
在Kubernetes中,控制器通過(guò)添加額外的功能來(lái)擴(kuò)充pod,比如所需的配置狀態(tài)和運(yùn)行時(shí)特性。
部署為pod帶來(lái)聲明性更新。它通過(guò)跟蹤參與部署的pod的運(yùn)行狀況來(lái)保證始終保持所需的狀態(tài)。每個(gè)部署都管理一個(gè)ReplicSet,它維護(hù)一組穩(wěn)定的副本pod,在任何給定的時(shí)間運(yùn)行,由所需的狀態(tài)定義。
部署通過(guò)擴(kuò)展、部署歷史和回滾功能為pod帶來(lái)類似PaaS的功能。當(dāng)一個(gè)部署配置為最少兩個(gè)副本時(shí),Kubernetes確保至少有兩個(gè)pod始終在運(yùn)行,這帶來(lái)了容錯(cuò)性。即使只使用一個(gè)副本部署pod,也強(qiáng)烈建議使用部署控制器,而不是普通的pod規(guī)范。
statefulset類似于部署,但用于需要持久性、定義良好的標(biāo)識(shí)符和有保證的創(chuàng)建順序的pod。對(duì)于數(shù)據(jù)庫(kù)集群之類的工作負(fù)載,statefulset控制器將按照給定的順序創(chuàng)建一組具有可預(yù)測(cè)命名約定的高可用性pod。需要高度可用的有狀態(tài)工作負(fù)載,如Cassandra、Kafka、ZooKeeper和sqlserver,在Kubernetes中被部署為statefulset。
可以使用DaemonSet控制器來(lái)強(qiáng)制在集群的每個(gè)節(jié)點(diǎn)上運(yùn)行pod。Kubernetes在新配置的worker節(jié)點(diǎn)中自動(dòng)調(diào)度DaemonSet,因此它成為為工作負(fù)載配置和準(zhǔn)備節(jié)點(diǎn)的理想選擇。例如,如果在部署工作負(fù)載之前必須在節(jié)點(diǎn)上掛載現(xiàn)有的網(wǎng)絡(luò)文件系統(tǒng)(NFS)或Gluster文件共享,建議將pod打包并部署為DaemonSet。監(jiān)控代理可以用作DaemonSet,以確保每個(gè)節(jié)點(diǎn)都運(yùn)行監(jiān)控代理。
對(duì)于批處理和調(diào)度作業(yè),可以將pod打包為run-to-completion作業(yè)或cron作業(yè)。作業(yè)創(chuàng)建一個(gè)或多個(gè)pod,并確保指定數(shù)量的pod成功終止。配置為“運(yùn)行到完成”的pod執(zhí)行作業(yè)并退出,而cron作業(yè)將根據(jù)crontab格式定義的計(jì)劃運(yùn)行作業(yè)。
控制器根據(jù)工作負(fù)載的特征及其執(zhí)行上下文定義pod的生命周期。
編輯:青藍(lán)咨詢
來(lái)源于網(wǎng)絡(luò),如有侵權(quán)請(qǐng)及時(shí)聯(lián)系
【聯(lián)系青藍(lán)咨詢】
地址: 深圳市南山區(qū)高新南一道06號(hào)TCL大廈B座3樓309室 (公交站:大沖 地鐵站:一號(hào)線高新園C出口)
郵編:518057
電話:0755-86950769
網(wǎng)址:http://www.mycalorietracker.com
掃碼關(guān)注 了解更多課程信息