深入解析:Kubernetes 如何使用 etcd 作为配置中心和注册中心
在 Kubernetes 中,etcd 是核心的分布式存储组件,负责存储和管理集群的所有配置信息、状态数据以及服务注册信息。etcd 的高可用性和强一致性使得它成为 Kubernetes 的 “source of truth”,确保集群能够动态、高效地管理资源,并保证服务的稳定性和一致性。
本文将详细解析 Kubernetes 如何使用 etcd 作为配置中心和注册中心,深入剖析其工作原理、etcd 的数据结构,以及 Kubernetes 如何通过 watch 机制 实现资源的动态更新。
1. etcd 在 Kubernetes 中的角色与工作原理
在 Kubernetes 中,etcd 扮演着两个关键角色:
- 配置中心:存储 Kubernetes 集群的所有配置信息和状态数据,包括节点、Pod、Service、ConfigMap、Secret 等等。
- 注册中心:负责存储和管理服务、Pod、节点等的注册信息,并提供服务发现功能,确保服务和资源能够被动态调度和发现。
所有的 Kubernetes 组件(如 Kubelet、Scheduler、Controller Manager)都通过 API Server 访问 etcd。API Server 是唯一与 etcd 交互的组件,负责读取和写入 etcd 中的所有数据。
1.1 etcd 作为配置中心
etcd 作为配置中心,存储了 Kubernetes 集群中所有资源的状态和配置信息。任何对集群资源的创建、修改或删除操作,都会通过 API Server 写入到 etcd 中。比如,ConfigMap 和 Secret 是 Kubernetes 中两种常见的配置资源,所有的配置数据都会被存储在 etcd 中,并可以通过 API Server 动态获取和更新。
1.2 etcd 作为注册中心
etcd 还作为服务的注册中心,管理着 Kubernetes 中所有服务(Service)、Pod 和节点的注册信息。每当节点加入或 Pod 启动时,这些资源的注册信息都会通过 API Server 被存储在 etcd 中。其他 Kubernetes 组件可以通过 API Server 获取服务的状态信息,以实现服务发现和调度。
2. etcd 数据结构:如何组织 Kubernetes 的资源
etcd 中存储的 Kubernetes 资源信息是以 层次化的键值对(key-value) 形式组织的,类似于文件系统的目录结构。每个 Kubernetes 资源(如节点、Pod、ConfigMap)都有其唯一的键路径,etcd 通过这些路径来高效地组织和管理数据。
2.1 etcd 的层次化键值结构示例
在 etcd 中,Kubernetes 的资源路径通常包含以下结构:
-  节点信息: /registry/minions/{node_name}- 存储关于 Kubernetes 节点(Node)的状态信息,如节点的健康状态、资源使用情况等。
- 例如,/registry/minions/node-1存储了名为node-1的节点信息。
 
-  Pod 信息: /registry/pods/{namespace}/{pod_name}- 每个 Pod 都存储在指定的命名空间(namespace)路径下。路径的最后一部分是 Pod 的名称。
- 例如,/registry/pods/default/my-pod表示名为my-pod的 Pod 位于default命名空间下。
 
-  Service 信息: /registry/services/specs/{namespace}/{service_name}- 存储 Service 的配置信息,包括其对应的端点(Endpoints)。
- 例如,/registry/services/specs/default/my-service是名为my-service的 Service 的路径。
 
-  ConfigMap 和 Secret 信息:存储配置数据和敏感信息。 - ConfigMap:/registry/configmaps/{namespace}/{configmap_name}
- Secret:/registry/secrets/{namespace}/{secret_name}
 
- ConfigMap:
2.2 etcd 数据的高效组织与查询
通过这种层次化的路径结构,etcd 能够高效地存储和查询资源数据。例如,API Server 可以快速定位某个命名空间下所有 Pod 的信息,或者根据路径查询到某个节点的健康状况。
每当 Kubernetes 的组件(如 Kubelet、Scheduler、Controller Manager)需要获取或更新集群中的资源状态时,它们会通过 API Server 访问这些路径,从而确保数据的同步和一致性。
3. Kubernetes 中的 watch 机制:动态监听和变更通知
为了实现集群的动态管理和实时响应,Kubernetes 使用了 watch 机制 来监控资源状态的变化。Kubernetes 的组件并不直接与 etcd 交互,而是通过 API Server 发起 watch 请求 来监听资源的变化。
3.1 watch 机制的工作原理
Kubernetes 中的组件(如 Kubelet、Scheduler、Controller Manager)通过 API Server 发起 watch 请求 来监听某些资源的变化。例如,Scheduler 可能会监听集群中未被调度的 Pod 列表,而 Kubelet 监听其节点上所有 Pod 的状态变化。
具体流程:
-  发起 watch 请求: - Kubernetes 组件通过 API Server 发起 HTTP 请求,指定 watch=true参数,来监控某些资源(如 Pod、Node、Service)的状态变化。
 
- Kubernetes 组件通过 API Server 发起 HTTP 请求,指定 
-  API Server 监听资源变化: - API Server 通过与 etcd 的连接,实时监听这些资源的变化。当资源的状态在 etcd 中发生变更时(如 Pod 状态变为 Running或Failed),etcd 会通知 API Server。
 
- API Server 通过与 etcd 的连接,实时监听这些资源的变化。当资源的状态在 etcd 中发生变更时(如 Pod 状态变为 
-  事件推送: - 当资源发生变化时,API Server 会将变化的数据通过 HTTP 流式传输 推送给发起 watch 的组件。通过这种方式,组件能够实时获取到资源的最新状态,而不需要频繁轮询。
 
-  组件处理事件: - 例如,当 Kubelet 监听到 Pod 被分配到其节点上时,它会根据事件中的信息启动容器并管理 Pod 的运行。
 
3.2 使用 watch 实现注册中心的变更通知
服务注册中心的变化(如节点、Pod 或 Service 的创建、更新、删除)也是通过 watch 机制进行动态同步的。以下是注册中心变更的典型流程:
-  节点注册和状态更新:当节点加入集群或状态发生变化时,API Server 会通知 Controller Manager 和 Scheduler。这些组件会通过 watch 机制收到节点的更新,Scheduler 可以根据节点的可用性进行调度决策。 
-  Pod 创建和状态更新:当新 Pod 被调度到某个节点时,API Server 会将 Pod 的注册信息存储到 etcd 中。Kubelet 通过 watch 监听其节点上的 Pod 更新事件,并根据新 Pod 的状态调整容器的管理。 
-  Service 的动态发现:Kubernetes 中的 Service 使用 watch 机制保持与其后端 Pod 的同步。当某个 Pod 被删除或添加时,Service 的端点信息会自动更新。Kube Proxy 和 CoreDNS 通过 watch 监听这些服务的变化,并及时更新负载均衡规则或 DNS 解析信息。 
4. etcd 在 Kubernetes 中的高可用性与容错机制
为了保证 Kubernetes 集群的高可用性,etcd 通常被部署为一个 多节点集群。通过 Raft 共识算法,etcd 保证了集群的强一致性,即使部分节点出现故障,系统仍然可以正常工作。
4.1 etcd 的高可用架构
etcd 集群由多个节点组成,通常为 3 个或 5 个节点,以保证在集群中出现少量节点故障时,仍能保证数据的一致性和高可用性。
-  数据复制与一致性:etcd 的每个节点存储相同的数据副本。当一个写入操作发生时,etcd 通过 Raft 算法确保大多数节点(如 3 个节点中的 2 个)确认该操作后,数据才会被提交并同步到其他节点。 
-  领导者选举:etcd 集群中的节点分为 领导者(Leader)和 追随者(Follower)。领导者负责处理所有的写操作,并将更新同步给追随者。如果领导者节点出现故障,集群会自动发起领导者选举,确保系统的正常运行。 
4.2 etcd 故障恢复与数据备份
Kubernetes 中还提供了对 etcd 数据的备份和恢复机制,以应对数据丢失或集群崩溃的情况。通过定期对 etcd 进行数据备份,管理员可以在系统发生重大故障时快速恢复集群状态。
5. 总结:Kubernetes 如何高效使用 etcd
etcd 是 Kubernetes 中至
关重要的组件,承担了 配置中心 和 注册中心 的双重角色。通过其强一致性和高可用性,etcd 能够确保 Kubernetes 集群中的资源信息始终是最新且可靠的。Kubernetes 的各个组件通过 API Server 使用 watch 机制 实时监控资源的变化,确保集群中的所有资源能够及时响应和动态管理。
关键点回顾:
- etcd 数据结构:etcd 使用层次化的键值对结构来存储 Kubernetes 集群中的资源和配置信息,确保数据的高效组织和查询。
- watch 机制:Kubernetes 组件通过 API Server 发起 watch 请求来监听资源状态的变化,API Server 通过流式传输实时推送变更事件。
- 高可用性与故障恢复:etcd 通过 Raft 共识算法和领导者选举机制保证数据的一致性和高可用性,支持多节点复制和自动故障恢复。
理解 Kubernetes 与 etcd 的结合,有助于我们更好地掌握 Kubernetes 的底层架构,并在实际操作中实现高效的容器编排和资源管理。
相关文章:
深入解析:Kubernetes 如何使用 etcd 作为配置中心和注册中心
在 Kubernetes 中,etcd 是核心的分布式存储组件,负责存储和管理集群的所有配置信息、状态数据以及服务注册信息。etcd 的高可用性和强一致性使得它成为 Kubernetes 的 “source of truth”,确保集群能够动态、高效地管理资源,并保…...
 
MQ高级:RabbitMQ小细节
在之前的学习中,我们只介绍了消息的发送,但是没有考虑到异常的情况,今天我们就介绍一些异常情况,和细节的部分。 目录 生产者可靠性 生产者重连 生产者确认 MQ可靠性 持久化 Lazy Queue 消费者可靠性 消费者确认机制 失…...
 
期权卖方怎么选择权利金高的品种,期货VIX高低对行情有什么影响
VIX指数——全称为芝加哥期权交易所市场波动率指数,俗称恐慌指数。 是衡量波动性的重要指标。VIX指数上升,预期未来市场波动性会增加。VIX指数下降,预期未来市场波动性会降低。 期货VIX指数最新价格排序 期权卖方尽量选择期货VIX指数在25以…...
内存对齐的原理和使用
1. 什么是内存对齐? 内存对齐是指将数据存储在内存中时,按照数据类型的大小,将数据放在特定的内存边界上。例如,4 字节的 int 通常放在能够被 4 整除的地址上,8 字节的 double 则放在能被 8 整除的地址上。 2. 为什么…...
 
搭建企业级私有仓库harbor
华子目录 harbor简介实验环境准备下载软件包安装docker-cehosts解析 实验步骤配置https加密传输解压进入解压目录,修改文件配置启动harbor 测试客户端配置harbor本地加速器注意 通过docker compose管理harbor harbor简介 harbor是由wmware公司开源的企业级docker r…...
互联网前后端分离的开发场景,一般会员和数据权限的判断是放在前端还是后端?
推荐学习文档 golang应用级os框架,欢迎stargolang应用级os框架使用案例,欢迎star案例:基于golang开发的一款超有个性的旅游计划app经历golang实战大纲golang优秀开发常用开源库汇总想学习更多golang知识,这里有免费的golang学习笔…...
 
李宏毅机器学习2022-HW8-Anomaly Detection
文章目录 TaskBaselineReportQuestion2 Code Link Task 异常检测Anomaly Detection 将data经过Encoder,在经过Decoder,根据输入和输出的差距来判断异常图像。training data是100000张人脸照片,testing data有大约10000张跟training data相同…...
 
用户体验分享 | YashanDB V23.2.3安装部署
近期崖山新版体验过程中,总能看到用户提问:openssl版本问题、monit命令找不到问题、yashan用户权限问题、数据库重装问题 今日整理了多位用户的安装经验,希望能够帮助到大家~ 1.Lucifer三思而后行 :YashanDB 个人版数据库安装部…...
【漏洞复现】泛微OA E-Office /E-mobile/App/init.php 任意文件上传漏洞
免责声明: 本文旨在提供有关特定漏洞的信息,以帮助用户了解潜在风险。发布此信息旨在促进网络安全意识和技术进步,并非出于恶意。读者应理解,利用本文提到的漏洞或进行相关测试可能违反法律或服务协议。未经授权访问系统、网络或应用程序可能导致法律责任或严重后果…...
 
SpringCloudEureka实战:搭建EurekaServer
1、依赖引入 <dependencies><!-- 注册中心 --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-server</artifactId></dependency> </dependencies> <de…...
 
DataLight(V1.4.5) 版本更新,新增 Ranger、Solr
DataLight(V1.4.5) 版本更新,新增 Ranger、Solr DataLight 迎来了重大的版本更新,现已发布 V1.4.5 版本。本次更新对平台进行了较多的功能拓展和优化,新增了对 Ranger 和 Solr 服务组件的支持,同时对多项已…...
 
深度解析:Python蓝桥杯青少组精英赛道与高端题型概览
目录 一、蓝桥杯青少组简介二、赛项组别与年龄范围三、比赛内容与题型1. 基础知识范围2. 题型设置2.1 选择题2.2 编程题 3. 考试时长 四、奖项设置与激励措施五、总结 一、蓝桥杯青少组简介 蓝桥杯全国软件和信息技术专业人才大赛(简称“蓝桥杯”)是由工…...
 
如何使用SCCMSecrets识别SCCM策略中潜在的安全问题
关于SCCMSecrets SCCMSecrets是一款针对SCCM策略的安全扫描与检测工具,该工具旨在提供一种有关 SCCM 策略的全面安全检测方法。 该工具可以从各种权限级别执行,并将尝试发现与策略分发相关的潜在错误配置。除了分发点上托管的包脚本外,它还将…...
Qt 信号重载问题--使用lambda表达式--解决方法
在connect()中,使用lambda表达式时遇到信号重载,无法识别使用哪个参数时,可通过以下方法处理: 1. 使用QOverload: Qt5.7才有 connect(comboBox,QOverload<int>::of(&QComboBox::currentIndexChanged), [](int index)…...
并行编程实战——TBB框架的应用之一Supra的基础
一、TBB的应用 在前面分析了TBB框架的各种基本知识和相关的基础应用。这些基础的应用很容易通过学习文档或相关的代码来较为轻松的掌握。为了能够更好的理解TBB框架的优势,这里从一个开源的应用程序来分析一下TBB在其中的更高一层的抽象应用,以方便开发…...
std::vector
std::vector是C标准库中一个非常强大的容器类,它提供了动态数组的功能。std::vector可以自动调整大小,提供了随机访问的能力,同时还支持在序列的尾部高效地添加和删除元素。 当创建一个空的std::vector对象时,它不分配任何内存&a…...
Java Web 之 Cookie 详解
在 JavaWeb 开发中,Cookie 就像网站给浏览器贴的小纸条,用于记录一些用户信息或状态,方便下次访问时识别用户身份或进行个性化服务。 也可以这么理解: 场景一:想象一下,你去一家咖啡店,店员认…...
linux系统下让.py文件开机自启动
一 创建服务文件 1、打开终端 2、切换到root用户 sudo su3、创建一个新的systemd服务文件 nano /etc/systemd/system/total_test0619.service 4、在服务文件中添加以下内容 [Unit] DescriptionRun total_test0619.py at startup[Service] Typesimple ExecStart/usr/bin/n…...
linux远程桌面:xrdp 安装失败
window 如何远程 Linux 桌面 安装xrdp yum install xrdpsystemctl start xrdp 如果找不到软件包,就安装epel源,最好改成国内镜像的 在 /etc/yum.repos.d/ 下创建epel.repo,内容如下 [epel] nameExtra Packages for Enterprise Linux 7 - $basearch …...
9.30Python基础-元组(补充)、字典、集合
Python元组(tuple)补充 1、元组的不可变性 元组(tuple)是Python中的一种内置数据类型,用于存储不可变的序列。虽然元组本身不可变,但元组内的元素如果是可变对象(如列表)ÿ…...
 
突破不可导策略的训练难题:零阶优化与强化学习的深度嵌合
强化学习(Reinforcement Learning, RL)是工业领域智能控制的重要方法。它的基本原理是将最优控制问题建模为马尔可夫决策过程,然后使用强化学习的Actor-Critic机制(中文译作“知行互动”机制),逐步迭代求解…...
React hook之useRef
React useRef 详解 useRef 是 React 提供的一个 Hook,用于在函数组件中创建可变的引用对象。它在 React 开发中有多种重要用途,下面我将全面详细地介绍它的特性和用法。 基本概念 1. 创建 ref const refContainer useRef(initialValue);initialValu…...
电脑插入多块移动硬盘后经常出现卡顿和蓝屏
当电脑在插入多块移动硬盘后频繁出现卡顿和蓝屏问题时,可能涉及硬件资源冲突、驱动兼容性、供电不足或系统设置等多方面原因。以下是逐步排查和解决方案: 1. 检查电源供电问题 问题原因:多块移动硬盘同时运行可能导致USB接口供电不足&#x…...
 
1.3 VSCode安装与环境配置
进入网址Visual Studio Code - Code Editing. Redefined下载.deb文件,然后打开终端,进入下载文件夹,键入命令 sudo dpkg -i code_1.100.3-1748872405_amd64.deb 在终端键入命令code即启动vscode 需要安装插件列表 1.Chinese简化 2.ros …...
【RockeMQ】第2节|RocketMQ快速实战以及核⼼概念详解(二)
升级Dledger高可用集群 一、主从架构的不足与Dledger的定位 主从架构缺陷 数据备份依赖Slave节点,但无自动故障转移能力,Master宕机后需人工切换,期间消息可能无法读取。Slave仅存储数据,无法主动升级为Master响应请求ÿ…...
 
JUC笔记(上)-复习 涉及死锁 volatile synchronized CAS 原子操作
一、上下文切换 即使单核CPU也可以进行多线程执行代码,CPU会给每个线程分配CPU时间片来实现这个机制。时间片非常短,所以CPU会不断地切换线程执行,从而让我们感觉多个线程是同时执行的。时间片一般是十几毫秒(ms)。通过时间片分配算法执行。…...
【C++从零实现Json-Rpc框架】第六弹 —— 服务端模块划分
一、项目背景回顾 前五弹完成了Json-Rpc协议解析、请求处理、客户端调用等基础模块搭建。 本弹重点聚焦于服务端的模块划分与架构设计,提升代码结构的可维护性与扩展性。 二、服务端模块设计目标 高内聚低耦合:各模块职责清晰,便于独立开发…...
鸿蒙DevEco Studio HarmonyOS 5跑酷小游戏实现指南
1. 项目概述 本跑酷小游戏基于鸿蒙HarmonyOS 5开发,使用DevEco Studio作为开发工具,采用Java语言实现,包含角色控制、障碍物生成和分数计算系统。 2. 项目结构 /src/main/java/com/example/runner/├── MainAbilitySlice.java // 主界…...
React---day11
14.4 react-redux第三方库 提供connect、thunk之类的函数 以获取一个banner数据为例子 store: 我们在使用异步的时候理应是要使用中间件的,但是configureStore 已经自动集成了 redux-thunk,注意action里面要返回函数 import { configureS…...
音视频——I2S 协议详解
I2S 协议详解 I2S (Inter-IC Sound) 协议是一种串行总线协议,专门用于在数字音频设备之间传输数字音频数据。它由飞利浦(Philips)公司开发,以其简单、高效和广泛的兼容性而闻名。 1. 信号线 I2S 协议通常使用三根或四根信号线&a…...
