etcd是一个高度一致的分布式键值存储,它提供了一种可靠的方式来存储需要由分布式系统或机器集群访问的数据。它可以优雅地处理网络分区期间的领导者选举,即使在领导者节点中也可以容忍机器故障。
etcd是开源的,是kubernetes主流使用的数据库
etcd独立安装方法请参考官网:https://etcd.io/docs/v3.5/install/
etcdctl是etcd的命令行客户端,开源代码地址:https://github.com/etcd-io/etcd/tree/main/etcdctl
本示例使用的etcdctl是3.5.1版本,所以默认使用api版本是v3,不用设置变量
1.如果直接使用二进制的方式安装kubernetes集群的,etcd安装包中自带了etcdctl命令
2.如果使用的kubeadm安装kubernetes集群或者安装的是minikube,需要在主机上单独安装etcdctl
3.拷贝安装包命令
ETCD安装包下载地址:https://github.com/etcd-io/etcd/releases

拷贝到系统环境中:cp etcdctl /usr/bin/
etcdctl version

4.拷贝pod内的命令
查看etcd的容器名称:docker ps|grep etcd

docker cp 容器name:/usr/local/bin/etcdctl /root/etcdctl

查询kubernetes上的etcd数据,命令格式:
etcdctl --cacert=xxx/ca.crt --cert=xxx.crt --key=xxx.key --endpoints=https://127.0.0.1:2379 COMMAND
证书目录可以查询etcd.yaml文件


使用对应的配置别名etcdctl
alias etcdctl="etcdctl --cacert=/var/lib/minikube/certs/etcd/ca.crt --cert=/var/lib/minikube/certs/etcd/healthcheck-client.crt --key=/var/lib/minikube/certs/etcd/healthcheck-client.key --endpoints=https://127.0.0.1:2379"
1.member list
成员列表信息
命令:etcdctl member list
人性化表格打印:etcdctl -w table member list

2.endpoint status
集群节点状态信息
命令:etcdctl endpoint status
JSON格式打印:etcdctl -w json endpoint status
人性化表格打印:etcdctl -w table endpoint --cluster status

PUT
写入键值对,如果key已经存在,则修改值
格式:PUT [options]
选项
示例:etcdctl put foo bar

示例:etcdctl put foo bar1 --prev-kv

GET
获取键或键范围
格式:GET [options] [range_end]
选项
示例:etcdctl get /test --prefix(通过匹配前缀获取值)

示例:etcdctl get / --prefix --keys-only(只获取key)

注意:/registry/开头的就是kubernetes的键
示例:etcdctl get /registry/pods/kube-system/etcd-minikube

DEL
删除指定的键或键范围
格式:DEL [options] [range_end]
选项
示例:etcdctl del foo

示例:etcdctl del --prefix /test

示例:etcdctl del --prev-kv foo

watch
监视键或前缀上的事件流,命令一直运行,直到遇到错误或被用户终止
格式:WATCH [options] [key or prefix] [range_end] [–] [exec-command arg1 arg2 …]
选项
示例:创建foo和删除foo

SNAPSHOT
配置快照
格式:SNAPSHOT
子命令
示例:etcdctl snapshot save bak.db

快照存储大小和查询数据库存储大小差不多

示例:etcdctl snapshot restore bak.db

这个命令3.6版本弃用,使用etcdutl命令替换
使用上面讲述的快照创建方法创建快照即可:etcdctl snapshot save bak.db
参考:https://github.com/etcd-io/etcd/tree/main/etcdctl
------------------日常记录------------------