Etcd解析

    • kubernetes本身,包括各种对象的状态和元信息配置

    注意:flannel操作etcd使用的是v2的API,而kubernetes操作etcd使用的v3的API,所以在下面我们执行的时候需要设置ETCDCTL_API环境变量,该变量默认值为2。

    Etcd使用的是raft一致性算法来实现的,是一款分布式的一致性KV存储,主要用于共享配置和服务发现。关于raft一致性算法请参考该动画演示

    关于Etcd的原理解析请参考。

    使用Etcd存储Flannel网络信息

    查看Etcd中存储的flannel网络信息:

    查看flannel的配置:

    Kubernetes使用etcd v3的API操作etcd中的数据。所有的资源对象都保存在路径下,如下:

    例如我们直接从etcd中查看kubernetes集群中所有的pod的信息,可以使用下面的命令:

    此时将看到json格式输出的结果,其中的key使用了base64编码,关于etcdctl命令的详细用法请参考。

    Etcd V2与V3版本API的区别

    Etcd V2和V3之间的数据结构完全不同,互不兼容,也就是说使用V2版本的API创建的数据只能使用V2的API访问,V3的版本的API创建的数据只能使用V3的API访问。这就造成我们访问etcd中保存的flannel的数据需要使用的V2版本的客户端,而访问kubernetes的数据需要设置ETCDCTL_API=3环境变量来指定V3版本的API。

    参考