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 共识算法,一个变更需要取得大多数节点同意才有会效。