作者信息:https://home.cnblogs.com/u/huangjiabobk

在K8S中,etcd数据库中数据如何更改?

在Kubernetes(K8s)中,etcd中的数据更改主要发生在以下几个场景中:

  1. 创建、更新和删除Kubernetes资源对象
    当用户在Kubernetes中创建(POST)、更新(PUT)或删除(DELETE)一个资源对象(如Pod、Service、Deployment等)时,Kubernetes API服务器会将这些更改转换为对etcd的相应操作。API服务器会将更改后的资源对象数据写入etcd,或者从etcd中删除相应的数据。
  2. Kubernetes控制器的操作
    Kubernetes中的控制器(如ReplicaSet控制器、Deployment控制器等)会监视集群的状态,并根据需要创建、更新或删除资源对象。这些操作同样会导致对etcd中数据的更改。
  3. etcd的自身维护操作
    尽管etcd主要是被Kubernetes用于存储资源对象数据,但etcd自身也有一些维护操作可能会更改数据,例如数据压缩、快照、备份和恢复等。

在etcd中更改数据的过程大致如下:

  1. Raft一致性协议
    所有的数据更改请求都会首先发送给etcd集群中的一个节点(称为leader节点)。该节点会使用Raft一致性协议来确保更改在所有节点上达成一致。Raft协议通过选举leader、提交日志和复制状态机等机制来确保数据的一致性。
  2. 写入请求处理
    当接收到一个写请求(如创建一个Pod)时,leader节点会:
    • 将写请求追加到自己的日志中。
    • 使用Raft协议将该请求复制到集群中的其他节点。
    • 等待大多数节点确认已经提交该请求。
    • 一旦确认提交,leader节点会将更改应用到本地状态机,并通知其他节点应用更改。
  3. 数据复制和同步
    非leader节点会接收并复制leader节点的日志条目,并在本地应用这些更改,以保持与leader节点的数据同步。这个过程确保了即使leader节点发生故障,其他节点也能继续提供服务,并保证数据的一致性。
  4. 数据持久化
    一旦数据更改被应用到状态机,etcd会将更改持久化到磁盘上,以确保即使发生故障也能恢复数据。
  5. 响应客户端
    一旦数据更改成功,etcd会向发起写请求的客户端返回成功响应。

综上所述,需要注意的是,etcd的设计保证了即使在网络分区或节点故障的情况下,也能保持数据的一致性。这是通过Raft协议中的选举、日志复制和提交等机制实现的。此外,etcd还提供了事务功能,允许用户将多个操作组合成一个原子操作来执行,这进一步增强了数据的一致性。

posted @ 2024-02-28 09:15  黄嘉波  阅读(82)  评论(0编辑  收藏  举报
版权声明:原创作品,谢绝转载!否则将追究法律责任。--作者 黄嘉波