Kubernetes 中的 Etcd 是什么?

在 Kubernetes 中,Etcd 是一种高可用键值存储系统,用于保存 Kubernetes 集群的状态数据。它提供了稳定的、可靠的存储,并有助于 Kubernetes 集群的高可用性。

Etcd 的主要作用是:

  • 存储 Kubernetes 集群的状态数据,如 Pod、Service 等对象。
  • 确保存储的数据高可用,Etcd 采用 Raft 算法实现强一致性复制。
  • 支持可靠的 Watch 监听,Kubernetes 可以实时监听数据变化并作出反应。
  • 简化 Kubernetes 集群的分布式同步与序列化问题。

Etcd 保存的主要数据有:

  • 集群状态:如 kube-apiserver 的端点(endpoint)信息等。
  • 资源配置:如 Pod、Node、Secret 等对象的序列化数据。
  • 租约(Lease):用来保活某些资源对象或锁。
  • 监听器(Watch):跟踪某些资源对象的变化。

Etcd 的工作流程是:

  1. Kubernetes 集群启动时会同时启动 Etcd 集群。
  2. Kubernetes 的各个组件通过 API 访问 Etcd,设置或获取数据。
  3. Etcd 根据操作将数据保存到稳定存储中,并同步到其他节点。
  4. Kubernetes 可以设置监听在 Etcd 上,接收数据变化事件。
  5. Etcd 采用 Raft 算法实现强一致性复制,确保高可用。
  6. Kubernetes 根据 Etcd 中的数据构建或更新其状态。

示例:

  1. 启动一个 3 节点 Etcd 集群。
  2. Kubernetes Scheduler 写入一个新 Pod 对象到 Etcd :
json
/registry/pods/default/pod1
{
  "apiVersion": "v1",
  "kind": "Pod",
  "spec": {...} 
}
  1. Etcd 将数据保存并同步到其他节点。
  2. Scheduler 也在 Etcd 上设置一个监听,监听 Pod 对象的变化。
  3. Kubelet 从 Etcd 中获取 Pod 配置并启动 Pod。
  4. Pod Controller 删除该 Pod,Etcd 中的对应数据也被删除。
  5. Scheduler 收到事件,其监听也被删除。
  6. Kubelet 接收到通知也删除对应 Pod。

所以总结来说,Etcd 的主要作用是作为 Kubernetes 的可靠数据存储系统,其主要特征是:

  1. 采用 Raft 算法实现强一致性复制和高可用。
  2. 保存 Kubernetes 集群的状态配置数据。
  3. 支持可靠的监听机制。
  4. 简化 Kubernetes 的分布式数据同步问题。
  5. 关键的存储角色, Kubernetes 运行依赖 Etcd。

它的工作流程是:

  1. Kubernetes 集群同时启动 Etcd 集群。
  2. Kubernetes 组件访问 Etcd 设置或获取数据。
  3. Etcd 保存数据并 replicates 到其他节点。
  4. Kubernetes 可以设置监听在 Etcd 上。
  5. Kubernetes 根据 Etcd 数据构建或更新状态。
  6. Etcd 确保数据高可用并同步。