kubernetes中數據存儲etcd

etcd 在 Kubernetes 中的角色

  • 核心定位:Kubernetes 的 唯一持久化數據存儲(一致性數據庫)。

  • 職責

    • 保存整個集群的期望狀態(desired state),包括節點信息、Pod 清單、Service 定義、ConfigMap、Secrets 等所有 API 對象。
    • 提供**強一致性(CP)**保障,保證即使多個 API Server 同時讀寫,也不會出現狀態沖突。
    • 支持 Watch 機制:當 etcd 中數據變更時,API Server 能實時推送事件給控制器和客戶端。
  • 關鍵關系

    • API Server 是所有組件的 “中樞”,所有讀寫狀態都通過它。
    • Controller Manager / Scheduler 都是 被動 響應 API Server 推送的事件(watch)。
    • kubelet 負責 Pod 在 Node 上的實際運行,向 API Server 上報狀態。
    • CNI/CSI 插件由 kubelet 調用,實現網絡和存儲的實際配置。

數據存儲結構

etcd 是一個 分布式鍵值數據庫,內部使用 BoltDB(B+Tree 存儲) 作為底層存儲引擎。

  • Key 結構(邏輯路徑)

    • Kubernetes 在 etcd 中為每種資源維護一個命名空間式路徑,例如:

      /registry/pods/default/nginx-pod
      /registry/deployments/default/web-deploy
      /registry/configmaps/kube-system/coredns
      
    • /registry 是 Kubernetes 存放 API 對象的根前綴。

    • 路徑的最后一段是對象的名字(可能還帶命名空間)。

  • Value 結構

    • 實際是序列化后的 Protocol Buffers(Protobuf) 或 JSON。
    • 內含對象的 metadataspecstatus 等字段。
    • 同時存儲 ResourceVersion(單調遞增)用于一致性和 Watch。
  • 版本控制

    • etcd 每個 key 有 修改版本(mod_revision),整個數據庫有全局遞增 revision
    • Kubernetes API Server 用 resourceVersion 與 etcd revision 對應,保證讀取的一致性快照。

數據寫入流程

kubectl apply -f pod.yaml 為例:

  1. 客戶端提交
    kubectl 把 YAML 轉成 Kubernetes API 對象,通過 REST 調用 API Server。

  2. API Server 流程

    • 認證/鑒權:驗證請求是否合法。
    • 準入控制:MutatingAdmissionWebhook 可能修改對象(加默認值),ValidatingAdmissionWebhook 校驗對象合法性。
    • 序列化:將對象編碼為 Protobuf。
    • 存儲層調用:通過 Kubernetes 的 storage.Interface 調用 etcd v3 gRPC API。
  3. etcd 寫入

    • etcd leader 接收 Put 請求。
    • Leader 將寫請求通過 Raft 共識協議 復制到多數派 Follower 節點。
    • 多數節點寫入成功(持久化到本地 BoltDB WAL + B+Tree)后,Leader 提交事務并返回成功。
    • 此時 mod_revision 增加,觸發 Watch 事件。
  4. 事件分發

    • API Server Watch 機制檢測到新 revision,通知各 Controller、Scheduler、kubelet 等。
    • 各組件據此執行調度、創建容器等后續動作。

總結

維度說明
角色k8s 的唯一持久化存儲,保存集群所有 API 對象狀態
存儲結構Key-Value,Key 為 /registry/... 邏輯路徑,Value 為 Protobuf 序列化對象
一致性保障Raft 共識,強一致性,順序提交
寫入流程關鍵點API Server → 序列化 → etcd Leader → Raft 復制 → 多數派確認 → 更新 revision → 觸發 Watch

附件

etcd數據交互

在這里插入圖片描述

K8s 核心組件調用關系 + etcd 交互點 + Endpoints 數據流

在這里插入圖片描述

  • etcd 只與 API Server 通信
  • API Server 如何向 Controller、Scheduler、kubelet、Endpoints Controller 分發事件
  • Endpoints / EndpointSlice Controller 如何生成數據并被 kube-proxy/CoreDNS 使用
  • Node 上 kubelet 如何調用 CRI、CNI、CSI 執行實際操作

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

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

相關文章

Linux crontab定時任務

參考資料 【図解】cronの仕組み定時任務 - crontab解決ubuntu下定時任務不執行問題crontab環境變量問題💥Linux定時任務功能詳解:crontab與at命令應用指南 目錄一. 環境準備1.1 wsl開啟systemd1.2 開啟cron日志二. cron服務管理相關命令2.1 service 的方…

企業頻繁收到軟件律師函?如何徹底解決這一難題

1. 引言:律師函頻發,已成信息化管理的“隱形雷區”在工業制造、芯片、航空航天、船舶制造、醫療器械等高要求行業,軟件不僅是研發與生產的關鍵工具,更是企業數據與知識產權安全的“底座”。然而,不少企業卻在日常運營中…

在 macOS 上順利安裝 lapsolver

一、什么是 lapsolver? lapsolver 是一個用于求解線性分配問題(Linear Assignment Problem, LAP) 的 Python 庫。線性分配問題是運籌學中的經典問題,核心是在兩個集合(如“工人”與“任務”)之間找到一組最…

宋紅康 JVM 筆記 Day02|JVM的架構模型、生命周期、發展歷程

一、今日視頻區間 P13-P25 二、一句話總結 JVM的架構模型;JVM的生命周期;JVM發展歷程; 三、關鍵圖/命令 3.1 JVM的架構模型Java程序對.class字節碼文件進行反編譯操作:在idea中先運行需要反編譯的代碼,找到對應的字節碼…

Linux新手上路 | 在Ubuntu上Pluma文本編輯器的安裝與基本使用

Linux新手上路 | 在Ubuntu上Pluma文本編輯器的安裝與基本使用一、Pluma工具介紹1.1 Pluma 工具概述1.2 主要功能1.3 適用場景二、安裝Pluma2.1 安裝方法2.2 啟動Pluma工具三、漢化方法3.1 安裝漢化包3.2 設置系統語言3.3 重新打開Pluma四、基本使用方法4.1 編寫文本內容4.2 關鍵…

React 揭秘:從新手到高手的進階之路

目錄 React:前端開發新寵? React 初相識? 什么是 React? React 的核心特性? 1.組件化開發 2.虛擬 DOM 與 Diff 算法 單向數據流 搭建 React 開發環境 環境準備? 創建 React 項目 項目結構解析 React 基礎語法與核心概念 JSX 語法? 基本語法規則…

八股文小記 Servlet 過濾器-Spring MVC 攔截器-Spring AOP 攔截器區別

您對執行機制的洞察非常準確!讓我們深入分析這三種組件的調用機制及其與 AOP 節點的關系: 一、執行機制的本質區別組件調用機制實現原理Servlet 過濾器遞歸調用通過 FilterChain.doFilter() 顯式遞歸調用下一個節點Spring MVC 攔截器遍歷調用由 HandlerE…

qml 實現數值鍵盤

import QtQuick 2.0import QtQuick.Layouts 1.12 import"../pad" // PasswordKeyboard.qml import QtQuick 2.12ColumnLayout {id: keyboardspacing: 8// 鍵盤標題Text {text: "安全輸入"font.pixelSize: 16color: "#666"Layout.alignment: Qt.A…

PID控制算法

文章目錄引言一、基本原理1.1.簡介1.2.開環與閉環1.3.PID 的公式1.3.1.比例項(Proportional)1.3.2.積分項(Integral)1.3.3.微分項(Differential)1.4.連續形式與離散形式的 PID 公式1.4.1.連續形式1.4.2.離散…

MyBatis 動態數據源切換在 Spring Boot 環境下的實現方案

第一章 需求背景與技術選型1.1 多數據源場景概述在大型企業級應用中,單一數據庫往往無法滿足高并發和多業務線的需求,因此需要引入 多數據源 的架構設計。常見的多數據源場景包括:讀寫分離、多租戶、分庫分表以及數據源負載均衡等。讀寫分離&…

PCA降維理論詳解

文章目錄一、什么是PCA?二、為什么需要降維?三、PCA的數學原理與詳細推導視角一:最大化投影方差(Maximizing Variance)視角二:最小化重構誤差(Minimizing Reconstruction Error)四、…

Android RxJava變換操作符詳解

RxJava作為響應式編程在Android開發中的利器,其強大的變換操作符能夠幫助我們優雅地處理數據流。本文將深入講解RxJava中最常用的變換操作符及其實際應用場景。一、RxJava變換操作符概述變換操作符(Transformation Operators)用于對Observable發射的數據序列進行變換…

開源數據發現平臺:Amundsen 快速上手指南

Amundsen 是一個數據發現和元數據引擎,旨在提高數據分析師、數據科學家和工程師與數據交互時的生產力。目前,它通過索引數據資源(表格、儀表板、數據流等)并基于使用模式(例如,查詢頻率高的表格會優先于查詢…

【密碼學實戰】國密SM2算法介紹及加解密/簽名代碼實現示例

引言 在信息安全領域,密碼算法是數據保護的核心基石。2010 年,中國國家密碼管理局發布了 SM2 橢圓曲線公鑰密碼算法,作為國產密碼標準的核心成員,它憑借高效安全的特性,逐步替代 RSA 等國際算法,廣泛應用于…

QT開發中如何加載第三方dll文件

文章目錄🔧 一、隱式加載(靜態鏈接)操作步驟:?? 二、顯式加載(動態鏈接,推薦使用QLibrary)操作步驟:💻 三、直接調用Windows API(僅Windows)??…

后端學習資料 持續更新中

數據庫: 該網址包含:圖解MySql, 看明白誰也問不倒你~ 圖解計算機網絡、操作系統、計算機組成、MySQL、Redis,讓天下沒有難懂的八股文!https://xiaolincoding.com/

《嵌入式Linux應用編程(六):并發編程基礎:多進程exec函數族及多線程基礎》

一、exec函數族在一個進程里面執行另一個文件本質&#xff1a;將文本區的指令代碼替換成exec要執行的指令#include <unistd.h>參數&#xff1a;path:要執行的可執行文件的路徑和名稱arg:執行該可執行文件時需要傳遞的參數NULL&#xff1a;參數傳遞結束標志 返回值&#x…

【121頁PPT】智慧方案智慧綜合體智能化設計方案(附下載方式)

篇幅所限&#xff0c;本文只提供部分資料內容&#xff0c;完整資料請看下面鏈接 https://download.csdn.net/download/2501_92808859/91654007 資料解讀&#xff1a;【121頁PPT】智慧方案智慧綜合體智能化設計方案 詳細資料請看本解讀文章的最后內容 一、項目概述與智能化總…

Linux網絡基礎(一)

目錄 計算機網絡背景 網絡發展 初識 "協議" 網絡協議初識 協議分層 軟件分層的好處 打電話例子 OSI七層模型 TCP/IP五層(或四層)模型 參考資料 再識協議 為什么要有 TCP/IP 協議&#xff1f; 什么是 TCP/IP 協議&#xff1f; TCP/IP 協議與操作系統的關系(宏觀上&…

MySQL多表查詢案例

多表查詢本文介紹了多表查詢中的表關系概念和操作方法。主要內容包括&#xff1a;1.三種表關系類型&#xff08;一對多、多對多、一對一&#xff09;及其實現方式&#xff1b;2.多表查詢的四種連接方式&#xff08;內連接、左外連接、右外連接、自連接&#xff09;及語法&#…