k8s etcd 简介

Etcd是CoreOS基于Raft协议开发的分布式key-value存储,可用于服务发现、共享配置以及一致性保障(如数据库选主、分布式锁等)。

如,Etcd也可以作为微服务的注册中心,比如SpringCloud也基于ETCD实现了注册中心功能,可以替代earka,具体参考:Spring Cloud Etcd

在分布式系统中,如何管理节点间的状态一直是一个难题,etcd是专门为集群环境的服务发现和注册而涉及,它提供了数据TTL失效、数据改变监视、多值、目录监听、分布式锁原子操作等功能,可以方便的跟踪并管理集群节点的状态。

Etcd被形容为Kubernetes集群的大脑,是 Kubernetes的关键组件,因为它存储了集群的整个状态:其配置,规格以及运行中的工作负载的状态。

在Kubernetes世界中,etcd用作服务发现的后端,并存储集群的状态及其配置。

Etcd被部署为一个集群,几个节点的通信由Raft算法处理。在生产环境中,集群包含奇数个节点,并且至少需要三个。

特点

etcd作为一个受到ZooKeeper与doozer启发而催生的项目,除了拥有与之类似的功能外,更专注于以下四点。

简单:基于HTTP+JSON的API让你用curl就可以轻松使用。

安全:可选SSL客户认证机制。

快速:每个实例每秒支持一千次写操作。

可信:使用Raft算法充分实现了分布式。

简单:curl可访问的用户的API(HTTP + JSON)

安全:可选的SSL客户端证书认证

快速:单实例每秒1000次写操作

可靠:使用Raft算法保证一致性

主要功能

  1. 基本的key-value存储

  2. 监听机制

  3. key的过期及续约机制, 用于监控和服务发现

  4. 原子Compare And Swap和Compare And Delete, 用于分布式锁和leader选举

架构

基础模块介绍

client 层: 包含 client v2 和 v3 两个大版本 API 客户端

API 网络层:主要包含 client 访问 server 和 server 节点之间的通信协议。client 访问 server 分为两个版本:v2 API 采用 HTTP/1.x 协议,v3 API 采用 gRPC 协议。server 之间的通信:是指节点间通过 Raft 算法实现数据复制和 Leader 选举等功能时使用的 HTTP 协议

Raft 算法层:实现了 Leader 选举、日志复制、ReadIndex 等核心算法特性,用于保障 etcd 多节点间的数据一致性、提升服务可用性等,是 etcd 的基石和亮点

功能逻辑层:etcd 核心特性实现层。如典型的 KVServer 模块、MVCC 模块、Auth 鉴权模块、Lease 租约模块、Compactor 压缩模块等,其中 MVCC 模块主要有 treeIndex 模块和 boltdb 模块组成

存储层:包含预写日志 WAL 模块、快照 Snapshot 模块、 boltdb 模块,其中 WAL 可保障 etcd crash 后数据不丢失,boltdb 则保存了集群元数据和用户写入的数据。

数据写入流程

client 发起一个更新 hello 为 world 请求后

若 Leader 收到写请求,它会将此请求持久化到 WAL 日志,并广播给各个节点

a. 若一半以上节点持久化成功,则该请求对应的日志条目被标识为已提交

b. 之后,etcdserver 模块异步从 Raft 模块获取已提交的日志条目,应用到状态机(boltdb等)

Kubernetes 中的 Etcd

在Kubernetes集群的上下文中,etcd实例可以作为Pod部署在master节点上(这是我们将在本文中使用的示例)。

相关推荐
强哥之神17 分钟前
host.docker.internal 及 host-gateway 知多少
人工智能·docker·语言模型·容器·gateway·deepseek
碧水澜庭37 分钟前
阿里云ack的创建与实战应用案例
运维·阿里云·kubernetes·云计算
菜萝卜子5 小时前
【Project】基于Prometheus监控docker平台
docker·容器·prometheus
张烫麻辣亮。7 小时前
【教程】使用docker+Dify搭建一个本地知识库
运维·docker·容器
不是笨小孩i7 小时前
如何使用Docker一键本地化部署LibrePhotos搭建私有云相册
运维·docker·容器
Dontla12 小时前
Docker run --add-host参数解析(在容器启动时向/etc/hosts文件中添加自定义的主机名与IP映射)(适用于临时调试或测试)
tcp/ip·docker·容器
西西小飞龙12 小时前
Docker和K8S中pod、services、container的介绍和关系
docker·容器·kubernetes
元气满满的热码式13 小时前
Docker数据卷操作实战
linux·运维·docker·云原生·容器
飞火流星020271 天前
docker安装etcd:docker离线安装etcd、docker在线安装etcd、etcd镜像下载、etcd配置详解、etcd常用命令、安装常见问题总结
docker·容器·etcd