Kubernetes: Internal: Component: etcd

 9th June 2021 at 4:11pm

Key fact:

  • etcd 保存了 k8s 集群的所有状态和元信息
  • etcd 仅被 kube-api-server 使用
    • kube-api-server 可以实现 乐观锁 来提升性能
    • 未来可以容易地替换掉 etcd(如有必要)

kube-api-server 实现乐观锁的机制是:

  • 给集群中每一个 resource 都带上一个版本号(在 metadata.resourceVersion 中体现)
  • 每次修改资源都会增加版本号
  • client 请求修改资源时,需要先拉现在的资源以获得版本号,再请求做修改
    • 如果请求修改时该资源的版本号已经变化,kube-api-server 会报错,client 需要再拉、再请求修改

etcd 使用 RAFT 共识算法,一个变更需要取得大多数节点同意才有会效。