LAB-04:备份还原ETCD

LAB-04:备份还原ETCD

LAB 需求

针对 etcd 实例 https://127.0.0.1:2379 创建一个快照,保存到 /srv/data/etcd-snapshot.db。在创建快照的过程中,如果卡住了,就键入 ctrl+c 终止,然后重试。
然后恢复一个已经存在的快照: /var/lib/backup/etcd-snapshot-previous.db
执行 etcdctl 命令的证书存放在:
  ca证书:   /opt/KUIN00601/ca.crt
  客户端证书:/opt/KUIN00601/etcd-client.crt
  客户端密钥:/opt/KUIN00601/etcd-client.key

LAB 预配

# 1、etcdctl 命令
# 如果没有 etcdctl 命令的话,可以从 docker 中复制 etcdctl 命令,查看 etcd 的 docker 名字
user1@k8s-master:~$ sudo docker ps | grep etcd
9c1e60ade311   303ce5db0e90      "etcd --advertise-cl…"   3 hours ago   Up 3 hours      k8s_etcd_etcd-k8s-master_kube-system_4ffc056bc44b10088ef49648e403a455_1

# 从 etcd 的 docker 中把 etcdctl 文件 copy 出来
user1@k8s-master:~$ sudo docker cp 9c1e60ade311:/usr/local/bin/etcdctl /usr/local/bin/etcdctl

# 确认有 etcdctl 命令
user1@k8s-master:~$ etcdctl version  
etcdctl version: 3.5.0
API version: 3.5

# 2、预配置解决证书问题
# 把 /etc/kubernetes/pki/etcd 目录下的证书,copy 到 /opt/KUIN000601/ 目录
# 创建证书的目录
user1@k8s-master:~$ sudo mkdir /opt/KUIN00601/

# 把 etcd 的证书 copy 到上面创建的目录中,并且修改名字 
user1@k8s-master:~$ cd /etc/kubernetes/pki/etcd
user1@k8s-master:/etc/kubernetes/pki/etcd$ sudo cp ca.crt /opt/KUIN00601/ca.crt
user1@k8s-master:/etc/kubernetes/pki/etcd$ sudo cp peer.crt /opt/KUIN00601/etcd-client.crt
user1@k8s-master:/etc/kubernetes/pki/etcd$ sudo cp peer.key /opt/KUIN00601/etcd-client.key

# 查看 etcd 的证书
user1@k8s-master:~$ ls -l /opt/KUIN00601/
total 12
-rw-r--r-- 1 root root 1017 1月   9 20:38 ca.crt
-rw-r--r-- 1 root root 1135 1月   9 20:38 etcd-client.crt
-rw------- 1 root root 1679 1月   9 20:38 etcd-client.key

# 创建一个备份目录
user1@k8s-master:~$ sudo mkdir /srv/data/

# 3、创建还原 /var/lib/backup/etcd-snapshot-previous.db 文件,可以在前面3题完成后(就是把本地备份的文件cp到该目录),创建一个备份,然后cp到该该目录,不影响整体的实验。
# 创建一个还原的目录
user1@k8s-master:~$ sudo mkdir /var/lib/backup

# 把备份的文件 copy 为 etcd-snapshot-previous.db,用于还原的实验(要等前面3题完成时的备份)
user1@k8s-master:~$ sudo cp /srv/data/etcd-snapshot.db /var/lib/backup/etcd-snapshot-previous.db

LAB 答案

# 备份:要求备份到指定路径及指定文件名
$ sudo ETCDCTL_API=3 etcdctl --endpoints https://127.0.0.1:2379 --cacert=/opt/KUIN00601/ca.crt --cert=/opt/KUIN00601/etcd-client.crt --key=/opt/KUIN00601/etcd-client.key snapshot save /srv/data/etcd-snapshot.db

# 还原:要求使用指定文件进行还原
# 1、先将 etcd、api 停止,移动静态 pod 文件
$ sudo mv /etc/kubernetes/manifests /etc/kubernetes/manifests.bak

# 2、备份一个原来的 etcd 文件
$ sudo mv /var/lib/etcd /var/lib/etcd.bak

# 3、恢复数据
$ sudo ETCDCTL_API=3 etcdctl --endpoints https://127.0.0.1:2379  --cacert=/opt/KUIN00601/ca.crt --cert=/opt/KUIN00601/etcd-client.crt --key=/opt/KUIN00601/etcd-client.key snapshot restore /var/lib/backup/etcd-snapshot-previous.db --data-dir=/var/lib/etcd

# 4、启动 etcd、api,把静态 pod 文件移回来
$ sudo mv /etc/kubernetes/manifests.bak /etc/kubernetes/manifests

LAB 验证

# 查看备份
user1@k8s-master:~$ ETCDCTL_API=3 etcdctl --write-out=table snapshot status /srv/data/etcd-snapshot.db 
Deprecated: Use `etcdutl snapshot status` instead.

+----------+----------+------------+------------+
|   HASH   | REVISION | TOTAL KEYS | TOTAL SIZE |
+----------+----------+------------+------------+
| f2bc1e87 |    76745 |       1041 |     5.8 MB |
+----------+----------+------------+------------+

# 还原后,验证集群,可以在备份后,还原前创建一个资源,还原后查看资源应该不存在
$ kubectl get nodes
$ kubectl get pods

参考资料

  • https://kubernetes.io/zh/docs/tasks/administer-cluster/configure-upgrade-etcd/
posted @ 2022-06-14 11:23  武装小灰灰  阅读(173)  评论(0编辑  收藏  举报