etcd2和etcd3是不兼容的,两者的api参数也不一样,详细请查看 etcdctl -h 。

可以使用api2 和 api3 写入 etcd3 数据,但是需要注意,使用不同的api版本写入数据需要使用相应的api版本读取数据。

api 2 使用方法

ETCDCTL_API=2 etcdctl ls /

api 3 使用方法

ETCDCTL_API=3 etcdctl get /

问题一、etcd3 没有 ls 使用 get 替代

例如:查询所有key 或 value :

$ export ETCDCTL_API=3

$ export ETCD_ENDPOINTS="https://192.168.5.7:2379,https://192.168.5.8:2379,https://192.168.5.86:2379"

$ etcdctl --endpoints=${ETCD_ENDPOINTS} get / --prefix --keys-only

$ etcdctl --endpoints=${ETCD_ENDPOINTS} get / --prefix --print-value-only |jq [.]

使用证书查询:

$ export ETCDCTL_API=3

$ export ETCD_ENDPOINTS="https://192.168.5.7:2379,https://192.168.5.8:2379,https://192.168.5.86:2379"

$ etcdctl --endpoints=${ETCD_ENDPOINTS} --cacert=/etc/kubernetes/ssl/ca.pem --cert=/etc/kubernetes/ssl/admin.pem --key=/etc/kubernetes/ssl/admin-key.pem --prefix --keys-only=true get /

问题二、创建修改一个键值对

api v2版本:

$ etcdctl set test hello

api v3版本:

$ etcdctl put test hello

参考:

https://github.com/coreos/etcd/issues/6904