在 Kubernetes 中,Etcd 是一种高可用键值存储系统,用于保存 Kubernetes 集群的状态数据。它提供了稳定的、可靠的存储,并有助于 Kubernetes 集群的高可用性。
Etcd 的主要作用是:
- 存储 Kubernetes 集群的状态数据,如 Pod、Service 等对象。
- 确保存储的数据高可用,Etcd 采用 Raft 算法实现强一致性复制。
- 支持可靠的 Watch 监听,Kubernetes 可以实时监听数据变化并作出反应。
- 简化 Kubernetes 集群的分布式同步与序列化问题。
Etcd 保存的主要数据有:
- 集群状态:如 kube-apiserver 的端点(endpoint)信息等。
- 资源配置:如 Pod、Node、Secret 等对象的序列化数据。
- 租约(Lease):用来保活某些资源对象或锁。
- 监听器(Watch):跟踪某些资源对象的变化。
Etcd 的工作流程是:
- Kubernetes 集群启动时会同时启动 Etcd 集群。
- Kubernetes 的各个组件通过 API 访问 Etcd,设置或获取数据。
- Etcd 根据操作将数据保存到稳定存储中,并同步到其他节点。
- Kubernetes 可以设置监听在 Etcd 上,接收数据变化事件。
- Etcd 采用 Raft 算法实现强一致性复制,确保高可用。
- Kubernetes 根据 Etcd 中的数据构建或更新其状态。
示例:
- 启动一个 3 节点 Etcd 集群。
- Kubernetes Scheduler 写入一个新 Pod 对象到 Etcd :
json
/registry/pods/default/pod1
{
"apiVersion": "v1",
"kind": "Pod",
"spec": {...}
}
- Etcd 将数据保存并同步到其他节点。
- Scheduler 也在 Etcd 上设置一个监听,监听 Pod 对象的变化。
- Kubelet 从 Etcd 中获取 Pod 配置并启动 Pod。
- Pod Controller 删除该 Pod,Etcd 中的对应数据也被删除。
- Scheduler 收到事件,其监听也被删除。
- Kubelet 接收到通知也删除对应 Pod。
所以总结来说,Etcd 的主要作用是作为 Kubernetes 的可靠数据存储系统,其主要特征是:
- 采用 Raft 算法实现强一致性复制和高可用。
- 保存 Kubernetes 集群的状态配置数据。
- 支持可靠的监听机制。
- 简化 Kubernetes 的分布式数据同步问题。
- 关键的存储角色, Kubernetes 运行依赖 Etcd。
它的工作流程是:
- Kubernetes 集群同时启动 Etcd 集群。
- Kubernetes 组件访问 Etcd 设置或获取数据。
- Etcd 保存数据并 replicates 到其他节点。
- Kubernetes 可以设置监听在 Etcd 上。
- Kubernetes 根据 Etcd 数据构建或更新状态。
- Etcd 确保数据高可用并同步。