文章目录
一、ETCD简介
etcd是一个高度一致的分布式键值存储,它提供了一种可靠的方式来存储需要由分布式系统或机器集群访问的数据。它可以优雅地处理网络分区期间的领导者选举,即使在领导者节点中也可以容忍机器故障。
etcd是开源的,是kubernetes主流使用的数据库
etcd独立安装方法请参考官网:https://etcd.io/docs/v3.5/install/
二、ETCD操作使用
2.1 etcdctl工具
etcdctl是etcd的命令行客户端,开源代码地址:https://github.com/etcd-io/etcd/tree/main/etcdctl
- 目前etcdctl的v3 api是默认使用,对于v2的api,需要设置变量ETCDCTL_API=2
- 如果使用的版本早于v3.4的发布版本,使用v3api需要设置ETCDCTL_API=3
本示例使用的etcdctl是3.5.1版本,所以默认使用api版本是v3,不用设置变量
2.2 安装etcdctl命令
1.如果直接使用二进制的方式安装kubernetes集群的,etcd安装包中自带了etcdctl命令
2.如果使用的kubeadm安装kubernetes集群或者安装的是minikube,需要在主机上单独安装etcdctl
- 官网下载安装包,拷贝安装包内部的etcdctl命令
- 拷贝pod内的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
2.3 常用操作命令
2.3.1 带证书别名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"
2.3.2 基本信息查询
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
2.3.3 数据查询和修改
-
PUT
写入键值对,如果key已经存在,则修改值
格式:PUT [options]
选项
- 租赁 – 附加到密钥的租赁 ID(十六进制)。
- prev-kv – 返回修改前的前一个键值对。
- ignore-value – 使用当前值更新键。
- ignore-lease – 使用当前租约更新密钥。
示例:etcdctl put foo bar
示例:etcdctl put foo bar1 --prev-kv
-
GET
获取键或键范围
格式:GET [options] [range_end]
选项
- hex – 将键和值打印为十六进制编码字符串
- limit – 最大结果数
- prefix – 通过匹配前缀获取键
- order – 结果的顺序;上升或下降
- sort-by – 排序目标;CREATE、KEY、MODIFY、VALUE 或 VERSION
- rev – 指定 kv 版本
- print-value-only – 与 write-out=simple 一起使用时只打印值
- 一致性——Linearizable(l) 或 Serializable(s)
- from-key – 使用字节比较获取大于或等于给定键的键
- keys-only – 只获取密钥
示例: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]
选项
- prefix – 通过匹配前缀删除键
- prev-kv – 返回已删除的键值对
- from-key – 使用字节比较删除大于或等于给定键的键
示例:etcdctl del foo
示例:etcdctl del --prefix /test
示例:etcdctl del --prev-kv foo
-
watch
监视键或前缀上的事件流,命令一直运行,直到遇到错误或被用户终止
格式:WATCH [options] [key or prefix] [range_end] [–] [exec-command arg1 arg2 …]
选项
- hex – 将键和值打印为十六进制编码字符串
- interactive – 开始交互式观看会话
- prefix – 如果设置了前缀,则监视前缀。
- prev-kv – 获取事件发生前的前一个键值对。
- rev - 开始观看的修订。指定修订对于观察过去的事件很有用
示例:创建foo和删除foo
-
SNAPSHOT
配置快照
格式:SNAPSHOT
子命令
- save:创建快照
- restore:恢复快照
示例:etcdctl snapshot save bak.db
快照存储大小和查询数据库存储大小差不多
示例:etcdctl snapshot restore bak.db
这个命令3.6版本弃用,使用etcdutl命令替换
三、ETCD数据备份和恢复
3.1 备份数据
使用上面讲述的快照创建方法创建快照即可:etcdctl snapshot save bak.db
3.2 恢复数据
- 停止etcd和apiserver服务
- mv数据目录到其他目录下备份(kubeadm安装的容器etcd.yaml文件中可以找到数据目录路径)
- 恢复快照:etcdctl snapshot restore bak.db --data-dir=xxx
参考:https://github.com/etcd-io/etcd/tree/main/etcdctl
------------------日常记录------------------