etcdctl无法读取Go客户端写入的key问题求助
问题解决:etcdctl读取v3客户端写入的key提示未找到
这问题我之前也碰到过,根源其实是etcd的v2和v3 API数据隔离导致的:你用Go的clientv3库写入的数据是存在etcd的v3存储里的,但默认情况下,v3.2.x版本的etcdctl会使用v2 API来读取数据——这两个版本的存储是完全独立的,所以自然找不到你写入的abc key。
下面给你两种快速解决的方法:
方法1:临时指定etcdctl使用v3 API
直接在执行命令时通过环境变量或者参数指定API版本:
- 用环境变量的方式:
ETCDCTL_API=3 ./etcd-v3.2.12-linux-amd64/etcdctl get abc
- 或者用命令参数的方式:
./etcd-v3.2.12-linux-amd64/etcdctl --api=3 get abc
执行完上面的命令,你应该就能看到输出abc和123了。
方法2:永久设置默认使用v3 API
如果不想每次都加参数,可以把环境变量加到你的shell配置文件里(比如bash的~/.bashrc或者zsh的~/.zshrc):
echo "export ETCDCTL_API=3" >> ~/.bashrc source ~/.bashrc
之后再直接执行./etcd-v3.2.12-linux-amd64/etcdctl get abc就可以正常读取v3存储的数据了。
补充说明
etcd从v3版本开始做了存储架构的重构,v2和v3的API对应的存储是完全隔离的,简单说就是:
- 用v2客户端/工具写入的数据,只能用v2的方式读取
- 用v3客户端/工具写入的数据,只能用v3的方式读取
所以以后再碰到类似问题,先确认一下两边使用的API版本是否一致就行。
内容的提问来源于stack exchange,提问作者小明湖畔
相关产品推荐
相关产品推荐

