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


    一、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
    
    • 1

    证书目录可以查询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

    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
      在这里插入图片描述
      示例: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(通过匹配前缀获取值)
      在这里插入图片描述

      示例:etcdctl get / --prefix --keys-only(只获取key)
      在这里插入图片描述
      注意:/registry/开头的就是kubernetes的键

      示例:etcdctl get /registry/pods/kube-system/etcd-minikube
      在这里插入图片描述

    3. DEL

      删除指定的键或键范围

      格式:DEL [options] [range_end]

      选项

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

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

      示例:etcdctl del --prefix /test
      在这里插入图片描述

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

    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

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

  • 相关阅读:
    【Linux】进程地址空间
    数据复制系统设计(3)-配置新的从节点及故障切换
    【LeetCode】No.73. Set Matrix Zeroes -- Java Version
    TCP/IP 测试题(五)
    OWASP Top 10漏洞解析(3)- A3:Injection 注入攻击
    浅谈 33 台 iPad 发展史;OpenAI“悄悄”修改了企业核心价值观丨 RTE 开发者日报 Vol.67
    git远程协作
    centos7.9离线安装docker
    【工作杂记】groupBy排序-操作word
    windows环境下安装Java过程(免登录Oracle官网下载java)
  • 原文地址:https://blog.csdn.net/w50feng/article/details/126290164