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