k8s使用的etcd备份和恢复

环境:
OS:Centos 7
k8s:1.24.0
单master 2nodes

 

1.查看k8s中etcd的版本

[root@master my_yaml]# kubectl exec -n kube-system -it etcd-master -- /bin/sh
sh-5.1# etcd --version
etcd Version: 3.5.3
Git SHA: 0452feec7
Go Version: go1.16.15
Go OS/Arch: linux/amd64

 

2.下载etcdutl工具
根据你当前的 etcd 版本(3.5.7),应该下载与此版本匹配的 etcdutl 工具。
这里需要说明一下的是etcdctl以及在近期的版本中弃用了,所以这边我们采用etcdutl工具进行备份的操作.
wget https://github.com/etcd-io/etcd/releases/download/v3.5.3/etcd-v3.5.3-linux-amd64.tar.gz

 

3.解压安装
cd soft
[root@master soft]#tar -xvf etcd-v3.5.3-linux-amd64.tar.gz
[root@master soft]#cp /soft/etcd-v3.5.3-linux-amd64/etcdctl /usr/local/bin/
[root@master soft]#cp /soft/etcd-v3.5.3-linux-amd64/etcdutl /usr/local/bin/

 

4.版本查看

[root@master etcd-v3.5.3-linux-amd64]#  etcdctl version
etcdctl version: 3.5.3
API version: 3.5

 

5.设置环境变量
su - root
export ETCDCTL_API=3
export ETCDCTL_ENDPOINTS="https://127.0.0.1:2379"
export ETCDCTL_CACERT="/etc/kubernetes/pki/etcd/ca.crt"
export ETCDCTL_CERT="/etc/kubernetes/pki/etcd/server.crt"
export ETCDCTL_KEY="/etc/kubernetes/pki/etcd/server.key"

 

6.创建备份
etcdctl snapshot save /tmp/etcd_snapshot_bak.db

 

7.验证备份文件
验证一下备份的快照文件

[root@master ~]# etcdctl --write-out=table snapshot status /tmp/etcd_snapshot_bak.db
Deprecated: Use `etcdutl snapshot status` instead.

+----------+----------+------------+------------+
|   HASH   | REVISION | TOTAL KEYS | TOTAL SIZE |
+----------+----------+------------+------------+
| a48eecbc |    29045 |       1419 |     8.5 MB |
+----------+----------+------------+------------+

 

8.恢复
查看当前etcd服务缓存的文件信息位置
文件所在的位置是 /etc/kubernetes/manifests/etcd.yaml,查找--data-dir这个配置的信息

[root@master ~]# cat /etc/kubernetes/manifests/etcd.yaml|grep data-dir
    - --data-dir=/var/lib/etcd

该目录下的目录
[root@master ~]# ls /var/lib/etcd
member

 

 

9.停掉k8s
每个节点停掉,好像使用systemctl stop方式不管用
systemctl disable kubelet
reboot

 

10.模拟删除掉etcd目录
[root@master ~]# cd /var/lib/etcd
[root@master etcd]# mv member /tmp/

 

11.恢复

[root@master etcd]# etcdctl snapshot restore /tmp/etcd_snapshot_bak.db --data-dir=/var/lib/etcd
Deprecated: Use `etcdutl snapshot restore` instead.

2025-04-02T15:28:19+08:00       info    snapshot/v3_snapshot.go:248     restoring snapshot      {"path": "/tmp/etcd_snapshot_bak.db", "wal-dir": "/var/lib/etcd/member/wal", "data-dir": "/var/lib/etcd", "snap-dir": "/var/lib/etcd/member/snap", "stack": "go.etcd.io/etcd/etcdutl/v3/snapshot.(*v3Manager).Restore\n\t/go/src/go.etcd.io/etcd/release/etcd/etcdutl/snapshot/v3_snapshot.go:254\ngo.etcd.io/etcd/etcdutl/v3/etcdutl.SnapshotRestoreCommandFunc\n\t/go/src/go.etcd.io/etcd/release/etcd/etcdutl/etcdutl/snapshot_command.go:147\ngo.etcd.io/etcd/etcdctl/v3/ctlv3/command.snapshotRestoreCommandFunc\n\t/go/src/go.etcd.io/etcd/release/etcd/etcdctl/ctlv3/command/snapshot_command.go:129\ngithub.com/spf13/cobra.(*Command).execute\n\t/go/pkg/mod/github.com/spf13/cobra@v1.1.3/command.go:856\ngithub.com/spf13/cobra.(*Command).ExecuteC\n\t/go/pkg/mod/github.com/spf13/cobra@v1.1.3/command.go:960\ngithub.com/spf13/cobra.(*Command).Execute\n\t/go/pkg/mod/github.com/spf13/cobra@v1.1.3/command.go:897\ngo.etcd.io/etcd/etcdctl/v3/ctlv3.Start\n\t/go/src/go.etcd.io/etcd/release/etcd/etcdctl/ctlv3/ctl.go:107\ngo.etcd.io/etcd/etcdctl/v3/ctlv3.MustStart\n\t/go/src/go.etcd.io/etcd/release/etcd/etcdctl/ctlv3/ctl.go:111\nmain.main\n\t/go/src/go.etcd.io/etcd/release/etcd/etcdctl/main.go:59\nruntime.main\n\t/go/gos/go1.16.15/src/runtime/proc.go:225"}
2025-04-02T15:28:19+08:00       info    membership/store.go:141 Trimming membership information from the backend...
2025-04-02T15:28:19+08:00       info    membership/cluster.go:421       added member    {"cluster-id": "cdf818194e3a8c32", "local-member-id": "0", "added-peer-id": "8e9e05c52164694d", "added-peer-peer-urls": ["http://localhost:2380"]}
2025-04-02T15:28:19+08:00       info    snapshot/v3_snapshot.go:269     restored snapshot       {"path": "/tmp/etcd_snapshot_bak.db", "wal-dir": "/var/lib/etcd/member/wal", "data-dir": "/var/lib/etcd", "snap-dir": "/var/lib/etcd/member/snap"}

 

12.启动k8s

systemctl start kubelet
systemctl enable kubelet

 

posted @ 2025-04-02 16:06  slnngk  阅读(248)  评论(1)    收藏  举报