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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈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;及语法&#…