背景
找一个能查看etcd
中存储的解码后的k8s
数据的方法或工具。查看开源工具[1],很久没有维护了,看相关issue
,该工具已经加入etcd-io
。
编译步骤
根据官方文档[2]操作,下载源码包:
1 | [root@node1]# git clone git@github.com:etcd-io/auger.git |
编译版本:
1 | [root@node1]# cd auger/ |
提示go
的版本不匹配,更新版本:
1 | [root@node1 auger]# vim Makefile |
继续编译:
1 | [root@node1 auger]# make release |
使用proxy.golang.org
代理导致很多依赖包下载失败,修改GOPROXY
代理
1 | [root@node1 ~]# docker exec -it 9b41dd00e91a sh |
继续编译:
1 | [root@node1 auger]# make release |
编译成功,执行二进制文件测试,提示glibc
版本没找到:
1 | [root@node1 auger]# ./build/auger -help |
查看本地的glibc
版本,发现版本不匹配:
1 | [root@node1 l14185]# rpm -qa|grep glibc |
解决方案有两个:
- 修改编译使用的镜像,找一个
glibc
版本跟节点上一致的编译镜像;- 直接在节点上编译;
以直接在节点上编译为例,下载指定版本的go
安装包,直接执行go build
命令:
1 | [root@node1]# GOOS=linux GOARCH=amd64 go build -o build/auger |
使用方法
查看帮助信息:
1 | [root@iZbp1esczkzr2k2fughijkZ auger]# ./build/auger |
查看解码后的etcd
数据:
1 | [root@node1]# ETCDCTL_API=3 etcdctl get /registry/pods/kube-system/coredns-795cc9c45c-j7nl4 | ./auger decode |
注意事项
直接使用
auger
命令时,需要保证etcd
服务未启动,或者把etcd
的数据库文件拷贝一份再解析,否则会导致解析卡住。
解析卡住的strace
命令现象如下:
1 | [root@node1]# strace ./auger checksum -f /var/lib/etcd/default.etcd/member/snap/db |
拷贝一份数据库文件,对比校验结果:
1 | [root@node1]# cp /var/lib/etcd/default.etcd/member/snap/db /root/etcd.db |