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节点上(这是我们将在本文中使用的示例)。

相关推荐
仙柒41514 小时前
Docker存储原理
运维·docker·容器
快乐的哈士奇17 小时前
LangFuse 自托管实战:选型理由、Docker 部署与常用配置全解析
运维·人工智能·docker·容器
weixin_4492900118 小时前
Docker + MySQL 在 Windows 11 上的本地安装部署文档
mysql·docker·容器
Ysn071919 小时前
中文乱码:在 Docker 容器中设置中文语言环境
运维·python·docker·容器
米高梅狮子19 小时前
01.CentOS-Stream-8-packstack安装OpenStack
linux·云原生·容器·kubernetes·centos·自动化·openstack
亚空间仓鼠21 小时前
Docker容器化高可用架构部署方案(十三)
docker·容器·架构
米高梅狮子21 小时前
01.mysql的备份与恢复
运维·数据库·mysql·docker·容器·kubernetes·github
云游牧者1 天前
K8S存储体系全解-从PV-PVC-SC到StatefulSet持久化实战
云原生·容器·kubernetes·pvc·pv·sc·进阶存储卷
古城小栈1 天前
K8s 认证、授权 系统
云原生·容器·kubernetes
码点滴1 天前
K8s 节点“半死“状态如何自动愈合?AI Agent 构建智能自愈与健康量化体系
人工智能·容器·kubernetes