kubernetes数据库etcd的简单操作及备份恢复

文章目录

  • 一、ETCD简介
  • 二、ETCD操作使用
    • 2.1 etcdctl工具
    • 2.2 安装etcdctl命令
    • 2.3 常用操作命令
      • 2.3.1 带证书别名etcdctl
      • 2.3.2 基本信息查询
      • 2.3.3 数据查询和修改
  • 三、ETCD数据备份和恢复
    • 3.1 备份数据
    • 3.2 恢复数据

一、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
kubernetes数据库etcd的简单操作及备份恢复_第1张图片
拷贝到系统环境中: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文件
kubernetes数据库etcd的简单操作及备份恢复_第2张图片在这里插入图片描述

使用对应的配置别名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 数据查询和修改

  1. PUT

    写入键值对,如果key已经存在,则修改值

    格式:PUT [options]

    选项

    • 租赁 – 附加到密钥的租赁 ID(十六进制)。
    • prev-kv – 返回修改前的前一个键值对。
    • ignore-value – 使用当前值更新键。
    • ignore-lease – 使用当前租约更新密钥。

    示例:etcdctl put foo bar
    kubernetes数据库etcd的简单操作及备份恢复_第3张图片
    示例:etcdctl put foo bar1 --prev-kv
    在这里插入图片描述

  2. 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(通过匹配前缀获取值)
    kubernetes数据库etcd的简单操作及备份恢复_第4张图片

    示例:etcdctl get / --prefix --keys-only(只获取key)
    kubernetes数据库etcd的简单操作及备份恢复_第5张图片
    注意:/registry/开头的就是kubernetes的键

    示例:etcdctl get /registry/pods/kube-system/etcd-minikube
    kubernetes数据库etcd的简单操作及备份恢复_第6张图片

  3. DEL

    删除指定的键或键范围

    格式:DEL [options] [range_end]

    选项

    • prefix – 通过匹配前缀删除键
    • prev-kv – 返回已删除的键值对
    • from-key – 使用字节比较删除大于或等于给定键的键

    示例:etcdctl del foo
    在这里插入图片描述

    示例:etcdctl del --prefix /test
    kubernetes数据库etcd的简单操作及备份恢复_第7张图片

    示例:etcdctl del --prev-kv foo
    kubernetes数据库etcd的简单操作及备份恢复_第8张图片

  4. watch

    监视键或前缀上的事件流,命令一直运行,直到遇到错误或被用户终止

    格式:WATCH [options] [key or prefix] [range_end] [–] [exec-command arg1 arg2 …]

    选项

    • hex – 将键和值打印为十六进制编码字符串
    • interactive – 开始交互式观看会话
    • prefix – 如果设置了前缀,则监视前缀。
    • prev-kv – 获取事件发生前的前一个键值对。
    • rev - 开始观看的修订。指定修订对于观察过去的事件很有用

    示例:创建foo和删除foo
    在这里插入图片描述

  5. 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

------------------日常记录------------------

你可能感兴趣的:(kubernetes,数据库,kubernetes,数据库,etcd)