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
浙公网安备 33010602011771号