【云原生】Kubernetes中的List-Watch機制詳解與容器生命周期

目錄

引言

一、List-Watch機制概述

(一)基本概念

(二)工作機制

1.List操作

2.Watch操作

(三)數據流向

1.按模塊劃分

2.按整體總結

二、Pod生命周期

(一)生命周期

1.創建

2.調度

3.初始化容器啟動

4.鏡像拉取

5.容器創建與運行

6.健康檢查與就緒檢測

7.重啟策略

8.清理

9.終止

(二)生命周期狀態

1.Pending

2.Running

3.Succeeded

4.Failed

5.Unknown


引言

在Kubernetes(K8s)這個龐大的分布式系統中,資源的實時更新和響應對于維持集群的穩定性和高效性至關重要。而List-Watch機制正是Kubernetes實現這一目標的核心手段。本文將詳細介紹Kubernetes中的List-Watch機制,與容器的生命周期。包括其工作原理、應用場景以及性能優化等方面。

一、List-Watch機制概述

(一)基本概念

List-Watch是Kubernetes API Server提供的一種資源監控機制。它允許客戶端通過API Server獲取資源對象的列表(List),并通過建立長連接(Watch)來實時監控資源對象的變化。當資源對象發生創建、更新或刪除等操作時,API Server會向訂閱了相關資源的客戶端發送事件通知,實現資源的實時同步和響應

(二)工作機制

List-Watch機制的工作原理可以簡單概括為以下兩個步驟

1.List操作

客戶端向Kubernetes API Server發送List請求,指定要獲取的資源類型和篩選條件。API Server根據請求返回符合條件的資源對象列表。客戶端可以根據這個列表來初始化自己的狀態或進行其他操作。

2.Watch操作

客戶端在獲取到資源對象列表后,可以繼續向API Server發送Watch請求,建立與API Server的長連接。API Server會持續監控指定資源的變化,并將變化事件以流的形式發送給客戶端。客戶端可以解析這些事件通知,并觸發相應的處理邏輯。

(三)數據流向

1.按模塊劃分

初始化階段:Kubernetes的各種組件(如Controller Manager、Scheduler、kubelet等)在啟動時,會與APIServer建立連接,并初始化List-Watch機制。

List操作:組件向APIServer發送List請求,獲取當前集群中指定資源類型的所有資源對象列表。例如,Controller Manager可能會請求獲取所有Pod的列表。APIServer處理List請求,查詢etcd存儲系統,并將結果返回給組件。

Watch操作:組件向APIServer發送Watch請求,建立一個長連接,用于監聽指定資源類型的變化。APIServer處理Watch請求,并在內部與etcd建立Watch連接,以監聽etcd中對應資源的變化。

事件觸發:當etcd中的資源發生變化(如Pod的創建、更新或刪除)時,etcd會發送一個事件通知給APIServer。APIServer接收到事件通知后,會將事件封裝成HTTP響應,并通過之前建立的長連接發送給對應的組件。

組件處理:組件接收到APIServer發送的事件通知后,會解析通知中的信息,并根據事件的類型(如ADD、UPDATE、DELETE)執行相應的操作。例如,如果Controller Manager接收到Pod被創建的事件,它可能會觸發相應的控制器邏輯,如ReplicaSet控制器會根據Pod的創建來調整副本集的狀態。

數據同步:通過List-Watch機制,Kubernetes的各個組件能夠實時感知集群中資源的變化,并據此進行相應的操作,從而保持數據的同步和一致性。

2.按整體總結

1)這里有三個 List-Watch,分別是 Controller Manager(運行在 Master),Scheduler(運行在 Master),kubelet(運行在 Node)。 它們在進程已啟動就會監聽(Watch)APIServer 發出來的事件

2)用戶通過 kubectl 或其他 API 客戶端提交請求給 APIServer 來建立一個 Pod 對象副本。

3)APIServer將Pod對象的元數據信息存入ETCD當中,待存儲完畢后,APIServer會將確認信息返回給客戶端,同時ETCD會將創建Pod副本的事件發送給APIServer

4)由于Controller-Manager 一直在監聽(Watch,通過https的6443端口)APIServer 中的事件。此時 APIServer 接受到了Create(創建Pod副本)事件,又會發送給Controller Manager

5)Controller Manager 在接到 Create 事件以后,調用其中的 Replication Controller 來保證 Node 上面需要創建的副本數量。一旦副本數量少于 RC 中定義的數量,RC 會自動創建副本。總之它是保證副本數量的 Controller(PS:擴容縮容的擔當)

6)在Controller-Manager創建Pod副本以后,APIServer會在ETCD中記錄這個Pod的詳細信息。例如Pod的副本數,Container的內容是什么

7)同樣的ETCD會將創建Pod的信息通過事件發送給APIServer

8)由于Scheduler在監聽(Watch)APIServer,APIServer會將Create事件發送到Scheduler,Scheduler接收到事件后,會根據預選與優選策略,為該事件選擇合適的node節點,

9)Scheduler 調度完畢以后會更新Pod的信息,此時的信息更加豐富了。除了知道Pod的副本數量,副本內容。還知道部署到哪個Node上面了。并將上面的Pod信息更新至API Server,

10)?APIServer更新至ETCD中,保存起來

11)ETCD將更新成功的事件發送給 APIServer,APIServer 也開始反映此 Pod 對象的調度結果

12)kubelet是在Node上面運行的進程,它也通過List-Watch的方式監聽(Watch,通過https的6443端口)APIServer發送的Pod更新的事件。kubelet會嘗試在當前節點上調用Docker啟動容器,并將Pod以及容器的結果狀態回送至APIServer,同時kubelet會負責Pod的整個生命周期

13)最后,APIServer將Pod狀態信息存入ETCD中。在ETCD確認寫入操作成功完成后,APIServer將確認信息發送至相關的kubelet,事件將通過它被接受

注釋:kubelet持續監控Pod狀態,當kubectl發送刪除、擴容、縮容等指令時,會將以上流程重復一遍,而后根據最新的情況,在node節點中調整部署資源

二、Pod生命周期

Pod的生命周期從創建開始,經歷一系列階段直至最終終止或被刪除。

(一)生命周期

1.創建

用戶通過創建一個新的Pod對象來請求Kubernetes調度器為Pod分配資源。

Kubernetes系統會賦予Pod一個唯一的ID(UID)。

2.調度

Pod被提交到集群后,調度器根據節點資源可用性和Pod的資源需求、親和性/反親和性規則等選擇合適的節點,并將Pod綁定到該節點上。

3.初始化容器啟動

若Pod定義中包含初始化容器(init containers),這些容器會在主容器啟動前按順序執行,用于設置運行主容器所需的條件或環境。

每個Init容器都必須在下一個Init容器啟動之前成功完成。

如果Pod的Init容器失敗,并且Pod的重啟策略(restartPolicy)值為“Always”,則kubelet會不斷地重啟該Init容器直到該容器成功為止。但如果Pod的重啟策略值為“Never”,則Kubernetes不會重新啟動Pod。

4.鏡像拉取

主容器對應的鏡像如果沒有在節點上,則kubelet負責從注冊表中拉取鏡像。

5.容器創建與運行

kubelet根據Pod Spec創建并啟動主容器。

容器狀態會經歷從Pending(等待中)到Running(運行中)的變化。

6.健康檢查與就緒檢測

在容器運行期間,kubelet可以配置并執行健康檢查(liveness probes)和就緒檢查(readiness probes)以確保容器正常工作。

Liveness Probe用于判斷容器是否存活,若失敗則可能重啟容器。

Readiness Probe用于決定容器是否準備好接收流量,只有當容器處于ready狀態時,Service才會將其添加到服務端點列表中。

7.重啟策略

根據Pod的重啟策略(Always、OnFailure或Never),kubelet會決定在容器退出時應采取何種行動。

8.清理

當Pod被刪除或者由于某種原因需要終止時,kubelet會按照預定義的優雅關閉策略通知容器停止服務,并等待一段時間讓容器完成任何必要的清理操作。

清理完成后,kubelet會真正刪除Pod及其相關的容器實例和其他資源。

9.終止

Pod完全從節點上移除。

此外,Pod生命周期中還包括容器啟動后鉤子(post-start hook)和停止前鉤子(pre-stop hook),這些鉤子允許在容器啟動后和停止前執行特定的操作。

(二)生命周期狀態

Pod的生命周期狀態主要包括

1.Pending

Pod已經被Kubernetes系統接受,但是有一個或多個容器鏡像尚未創建。

Pod等待被調度到一個節點上。可能涉及下載鏡像、分配IP地址、執行初始化容器等操作。

如果Pod一直處于等待中,可能是由于資源不足、調度問題或其他原因導致。

2.Running

Pod已經被調度至某節點,所有容器都已經被kubelet創建完成,且至少有一個容器處于啟動、重啟或運行過程中。

3.Succeeded

Pod中的所有容器都已成功完成并退出。

通常適用于一次性或批處理作業。

4.Failed

Pod中的一個或多個容器由于某種原因失敗。

這可能是由于容器的退出代碼非零、初始化容器失敗、依賴資源不可用等原因導致。

5.Unknown

由于某種原因,Pod的狀態無法確定。

這可能是由于與API服務器的通信問題或其他異常情況導致。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/16910.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/16910.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/16910.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

CMake-1 cmake簡介及安裝使用

文章目錄 1. CMake 簡單介紹2. CMake 安裝使用 1. CMake 簡單介紹 為什么需要CMake 寫過C語言的都知道,C語言項目使用Makefile進行管理,而隨著項目復雜度的增加 Makefile編寫的難度也隨之增加,而且在不同平臺Makefile 語法規則是不一樣的&am…

5款好用的AI寫作軟件,一鍵生成高質量文章

在當今信息快速發展的時代,AI寫作軟件逐漸成為創作者們的得力助手。它們能夠憑借先進的技術和算法,一鍵生成高質量的文章,為創作者們節省大量的創作時間和精力。以下是5款備受好評的AI寫作軟件,下面在本文中分享給大家&#xff0c…

20240522金融讀報:出口信用保險提效蘇易融碳中和機票貸款差異化投放替代數據征信培育壯大數字經濟

1、印發通知從響應速度、承保力度、承包評審要素、產業鏈范圍、定制化、線上化、便利化等方面去充分發揮出口信用保險作用。(這也可以作為這個貸款業務擔保時的一個考慮項吧) 2、蘇易融:匯集江蘇轄內特定客群信貸產品,可一站式查…

BitConverter類型,Byte數組與其他基本類型數據之間的轉換

BitConvert對于byte數組轉換為其他的基本變量很方便,是我們開發必須要學會的類型轉換,因為我在使用中使用的比較多,創作不易,大家點贊關注收藏。 GetBytes(XX)將基本變量轉換成字節數組,C#在數據存儲在計算機中的方式…

kettle學習之表的輸入輸出

需求 把表A里的數據傳送到表B中,在此之前,清空表B內的數據 表輸入 執行SQL腳本 表輸出

一文帶你學會如何部署個人博客到云服務器,并進行域名備案與解析!

哈嘍,大家好呀!這里是碼農后端。之前我給大家介紹了如何快速注冊一個自己的域名,并創建一臺自己的阿里云ECS云服務器。本篇將介紹如何將個人博客部署到云服務器,并進行域名備案與解析。 1、域名備案 注冊了域名并購買了云服務器之…

探索自動化辦公的新境界:批量操作與智能管理

新書上架~👇全國包郵奧~ python實用小工具開發教程http://pythontoolsteach.com/3 歡迎關注我👆,收藏下次不迷路┗|`O′|┛ 嗷~~ 目錄 一、自動化辦公的必要性與價值 二、基礎操作與自動化腳本 三、Python在自動化辦公中的應用…

Meme幣總市值突破630億美元 以太坊ETF獲批意味著代幣化資產“完全安全”

近日,數字貨幣市場再次掀起軒然大波。一方面,Meme幣總市值突破了630億美元,令人瞠目結舌;另一方面,以太坊ETF的獲批也引發了市場的廣泛關注,被視為代幣化資產的“完全安全”標志。 Meme幣總市值飆升 Meme幣…

深圳比創達電子EMC|EMC電磁兼容性行業:挑戰與機遇并存

隨著電子技術的迅猛發展,電磁兼容性(EMC)已成為各行各業不可忽視的關鍵問題。EMC是指設備或系統在其電磁環境中能正常工作且不對該環境中任何事物構成不能承受的電磁騷擾的能力。 一、EMC電磁兼容性行業的現狀 EMC電磁兼容性行業作為電子技…

[數據集][目標檢測]道路井蓋下水道井蓋開關閉和檢測數據集VOC+YOLO格式407張2類別

數據集格式:Pascal VOC格式YOLO格式(不包含分割路徑的txt文件,僅僅包含jpg圖片以及對應的VOC格式xml文件和yolo格式txt文件) 圖片數量(jpg文件個數):407 標注數量(xml文件個數):407 標注數量(txt文件個數):407 標注類別…

構建php環境、安裝、依賴、nginx配置、ab壓力測試命令

目錄 php簡介 官網php安裝包 選擇下載穩定版本 (建議使用此版本,文章以此版本為例) 安裝php解析環境 準備工作 安裝依賴 zlib-devel 和 libxml2-devel包。 安裝擴展工具庫 安裝 libmcrypt 安裝 mhash 安裝mcrypt 安裝php 選項含…

深入理解一下棧

1、棧:數據結構 為什么 main()方法 最先執行,最后結束? 當然是因為 main()方法入棧啦。 2、棧:棧內存,主管程序的運行,生命周期和現成同步; 線程結束,棧內內存也就釋放了&#xff0c…

STM32_RCC

1、RCC RCC即Reset and Clock Control,復位和時鐘控制。通過stm32f10x結構圖可以看出RCC控制著stm32的AHB系統總線,而AHB總線又橋接APB1和APB2,分別通過它們控制不同的片上外設。如果要使用某個片上外設的功能,必須先通過…

SpringBoot集成騰訊IM流程

1.application.yaml中添加IM配置信息 #im模塊 im: identifier: admin sdkappid: 1400888888 key: ccf2dc88c1ca232cfabbd24906d5091ab81ba0250224abc 2.封裝IM工具類 Component Getter RefreshScope public class ImAdminSignConfig {/*** 簽名*/private String usersig;…

Apache Doris 基礎(一) -- Getting Started

Apache Doris 開源、實時數據倉庫 Apache Doris是一個用于實時分析的現代數據倉庫。 它提供大規模閃電般的實時數據分析。 實時獲取和存儲 在一秒鐘內基于推的微批處理和基于拉的流數據獲取。實時更新,追加和預聚合的存儲引擎閃電般的查詢 使用列式存儲引擎、MPP架構…

CDGP|數據治理策略揭秘:因企制宜,實現精準管控新高度

隨著信息化、數字化的深入推進,數據已經成為企業最重要的資產之一。如何高效、安全地管理和利用數據,成為企業面臨的重要課題。數據治理策略的制定與實施,成為解決這一問題的關鍵所在。本文將探討如何因企制宜,制定符合企業實際情…

23種設計模式全面總結 | 快速復習(附PDF+MD版本)

本篇文章是對于23種設計模式的一個全面的總結,受限于文章篇幅無法對每個設計模式做到全面的解析,但幾乎每個設計模式都提供了案例和類圖結構,非常適合快速復習和在學習設計模式之前的全預習把握。 💡文章的 pdf markdown 版本可通…

Mysql的復制技術

一、異步復制: 主服務器上的事務更新了數據后,就不管從服務器是否立刻跟上,主服務器繼續處理其他事務,而從服務器會在它空閑的時候去檢查并應用這些更新。 ——老師(源服務器)給學生(從服務器&…

JSP期末要點復習

一、JSP工作原理 1.客戶端請求JSP頁面:用戶通過瀏覽器發送一個請求到服務器,請求一個特定的JSP頁面。這個請求被服務器上的Web容器(如Apache Tomcat)接收。 2.JSP轉換為Servlet:當JSP頁面第一次被請求時&#xff0…