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 中。以下是它与其他组件的交互方式:
-
API Server:API Server 是唯一直接与 ETCD 交互的组件。它将用户的请求(如创建 Pod)转换为 ETCD 的存储操作。
-
Controller Manager:通过 API Server 间接与 ETCD 交互,监听资源变化并执行相应的控制逻辑。
-
Scheduler:从 ETCD 获取 Pod 信息,为其分配节点,并将调度结果存储回 ETCD。
-
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 系统:
-
下载二进制文件:
-
前往ETCD 官方 GitHub Releases 页面。
-
下载适合你操作系统的版本。
-
-
解压文件:
tar -xvf etcd-vX.X.X-linux-amd64.tar.gz cd etcd-vX.X.X-linux-amd64
-
运行 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:通过
yum
或apt
安装(可能版本较旧)。 -
macOS:使用
brew install etcd
。
4. 配置 Systemd 服务(Linux)
-
创建数据目录:
mkdir -p /etc/etcd /var/lib/etcd
-
创建 Systemd 配置文件
/etc/systemd/system/etcd.service
,并添加启动参数。 -
启动服务:
systemctl daemon-reload systemctl start etcd systemctl enable etcd
5. 验证安装
运行以下命令检查 ETCD 是否正常工作:
etcdctl --version
etcdctl endpoint health