当前位置: 首页 > news >正文

Kubernetes之ETCD

ETCD 是 Kubernetes 的核心组件之一,它是一个分布式键值对存储数据库,专为高可用性和一致性设计。它在 Kubernetes 中的主要作用是存储所有集群数据,包括配置数据和状态信息。ETCD 是 Kubernetes 的“大脑”,其稳定性对整个集群至关重要。

Powered by Moshow@https://zhengkai.blog.csdn.net/

以下是一些关键点:

一、ETCD 的功能与特点

  • 分布式存储:ETCD 使用 Raft 一致性算法,确保数据在集群中的一致性。

  • 键值对存储:数据以键值对的形式存储,支持层级结构,类似文件系统。

  • 高性能:单实例支持每秒数千次读写操作。

  • 安全性:支持 TLS 加密和客户端证书认证。

  • 实时更新:通过 Watch 机制监听数据变化,支持事件驱动的操作。

二、ETCD内部结构

1. 存储模型

ETCD 使用了一个基于 多版本并发控制(MVCC) 的存储模型,每个键值对都有版本号,这样可以实现:

  • 数据的历史版本追踪。

  • 并发访问时的数据一致性。

  • 快速响应客户端的读写请求。

主要组件
  • 键空间(Key-Space):逻辑上的分层目录结构,键值对按字典顺序存储,支持范围查询。

  • 版本号与修订号

    • 版本号:记录每个键值的更新次数。

    • 修订号:表示整个 ETCD 数据库的更改次数。

2. Raft 协议

ETCD 使用了 Raft 共识算法来实现分布式一致性:

  • Leader 节点:处理所有的写请求,其他节点同步日志。

  • Follower 节点:只负责接收 Leader 的日志同步。

  • 日志复制:所有修改操作都会通过日志复制到其他节点,确保数据一致性。

优势
  • 强一致性:在分布式系统中,ETCD 保证了线性化一致性。

  • 高可用性:即使出现节点故障,只要大多数节点存活,集群仍然可以工作。

3. Watch 机制

ETCD 支持实时监听(Watch)键值对的变化:

  • 客户端可以通过 Watch 机制订阅某个键或范围的更新。

  • 当发生数据变更时,ETCD 会推送通知给订阅者,适合事件驱动系统。

特点
  • 高效异步通知。

  • 支持长连接,减少轮询开销。

4. Snapshot 和压缩机制

为了控制存储和性能,ETCD 定期对其日志和数据进行快照和压缩:

  • Snapshot:保存当前存储状态到磁盘,减少内存占用。

  • 压缩:删除旧的日志记录,只保留最新的数据状态。

5. 安全性

ETCD 提供了多种安全措施:

  • TLS 加密:确保传输数据的安全。

  • 认证与权限控制:支持基于角色的访问控制(RBAC),只允许授权用户访问。

6. 内存与磁盘结构

ETCD 的底层存储由 BoltDB 驱动,这是一种嵌入式键值存储数据库:

  • 内存结构:用于快速读写操作,未持久化的数据暂存在内存中。

  • 磁盘存储:通过持久化存储保证数据在重启或故障后不丢失。

三、ETCD 与 Kubernetes 的联动

ETCD 是 Kubernetes 的默认存储后端,所有的集群状态和配置数据都存储在 ETCD 中。以下是它与其他组件的交互方式:

  1. API Server:API Server 是唯一直接与 ETCD 交互的组件。它将用户的请求(如创建 Pod)转换为 ETCD 的存储操作。

  2. Controller Manager:通过 API Server 间接与 ETCD 交互,监听资源变化并执行相应的控制逻辑。

  3. Scheduler:从 ETCD 获取 Pod 信息,为其分配节点,并将调度结果存储回 ETCD。

  4. Kubelet:通过 API Server 从 ETCD 获取分配到本节点的 Pod 配置,并上报运行状态。

四、实用命令

以下是一些常用的 ETCD 命令,帮助你管理和操作 ETCD 数据库:

  • 查看集群成员

    etcdctl member list
    
  • 检查健康状态

    etcdctl endpoint health
    
  • 存储键值对

    etcdctl put <key> <value>
    
  • 获取键值对

    etcdctl get <key>
    
  • 列出所有键

    etcdctl get / --prefix --keys-only
    
  • 备份数据

    etcdctl snapshot save <backup-file>
    
  • 恢复数据

    etcdctl snapshot restore <backup-file> --data-dir=<data-directory>
    

五、如何安装ETCD

安装 ETCD 可以通过多种方式完成,以下是常见的安装方法:

1. 使用二进制文件安装

这是最直接的方法,适用于 Linux、Windows 和 macOS 系统:

  1. 下载二进制文件

    • 前往ETCD 官方 GitHub Releases 页面。

    • 下载适合你操作系统的版本。

  2. 解压文件

    tar -xvf etcd-vX.X.X-linux-amd64.tar.gz
    cd etcd-vX.X.X-linux-amd64
    
  3. 运行 ETCD

    ./etcd
    ./etcdctl version
    

2. 使用 Docker 安装

如果你有 Docker 环境,可以快速启动 ETCD:

docker run -d \
  --name etcd \
  -p 2379:2379 \
  -p 2380:2380 \
  quay.io/coreos/etcd:v3.5.0 \
  /usr/local/bin/etcd \
  --name etcd0 \
  --data-dir /etcd-data \
  --listen-client-urls http://0.0.0.0:2379 \
  --advertise-client-urls http://0.0.0.0:2379

3. 使用包管理器

  • Linux:通过 yumapt 安装(可能版本较旧)。

  • macOS:使用 brew install etcd

4. 配置 Systemd 服务(Linux)

  1. 创建数据目录:

    mkdir -p /etc/etcd /var/lib/etcd
    
  2. 创建 Systemd 配置文件 /etc/systemd/system/etcd.service,并添加启动参数。

  3. 启动服务:

    systemctl daemon-reload
    systemctl start etcd
    systemctl enable etcd
    

5. 验证安装

运行以下命令检查 ETCD 是否正常工作:

etcdctl --version
etcdctl endpoint health

 

http://www.dtcms.com/a/70810.html

相关文章:

  • 即插即用模块--KANLinear
  • c++的static和java的有何不同和联系
  • pywinauto自动安装python和java
  • 小程序配置
  • 企业数据管理的成本与效率革命
  • 社区版Uos20.9从源码编译QT5.15.2
  • 阿里云企业邮箱出现故障怎么处理?
  • 算法日记40:最长上升子序列LIS(单调栈优化)n*log^n
  • 如何通过Odoo 18采购模块优化管理供应商价格表
  • [CISCN 2022 初赛]ezpop(没成功复现)
  • Java多线程与高并发专题——原子类和 volatile、synchronized 有什么异同?
  • Mac中nvm切换node版本失败,关闭终端再次打开还是之前的node
  • Protobuf 学习与实践
  • JVM--垃圾回收
  • 网络空间安全(32)Kali MSF基本介绍
  • 【DevOps】 基于数据驱动的Azure DevOps案例实现
  • VS2019下载链接
  • C++的名称空间
  • C# 异步编程
  • RAG技术深度解析:从原理到企业级应用实战
  • 串排序(信息学奥赛一本通-2048)
  • TMS320F28P550SJ9学习笔记12:简单的Modbus协议
  • 如何将一个盘做成 lvm 盘并挂载
  • LeetCode --- 440周赛
  • HarmonyOS第24天:鸿蒙应用安全秘籍:如何为用户数据筑牢防线?
  • YOLOE:实时查看任何事物
  • 类和对象(中)
  • Hive SQL 精进系列: JSON_TUPLE 快速提取多键值
  • QT6.8.2在线安装记录
  • 【async 和 await】