备份kubernetes 备份etcd数据

1.练习目标

先在环境里准备一个pod1,然后备份etcd数据,然后删除pod1。备份数据里有pod1的,所以通过恢复etcd数据之后,仍然能看到pod1。

2.练习环境

本实验共2台机器,分别是vms71和vms72。

[root@vms71 ~]# kubectl get nodes
NAME            STATUS   ROLES                  AGE    VERSION
vms71.rhce.cc   Ready    control-plane,master   2d6h   v1.23.2
vms72.rhce.cc   Ready    <none>                 2d6h   v1.23.2
[root@vms71 ~]#

3.在vms71上安装etcd软件包

[root@vms71 ~]# yum install etcd -y
    ...输出...
 完毕!
[root@vms71 ~]#

4.实验前的准备

现在当前环境里有一个名字叫做的pod1的pod正在运行。

[root@vms71 ~]# kubectl get pods
NAME   READY   STATUS    RESTARTS   AGE
pod1   1/1     Running   0          42h
[root@vms71 ~]#

为了减少备份和恢复时命令的长度,这里先定义一些变量。

[root@vms71 ~]# export ETCDCTL_API=3
[root@vms71 ~]# cert=/etc/kubernetes/pki/etcd/server.crt
[root@vms71 ~]# key=/etc/kubernetes/pki/etcd/server.key 
[root@vms71 ~]# cacert=/etc/kubernetes/pki/etcd/ca.crt 
[root@vms71 ~]#

5.备份数据

按照如下命令备份数据。

[root@vms71 ~]# etcdctl --endpoints=https://192.168.26.71:2379 --cacert=$cacert --cert=$cert --key=$key snapshot save snap1.data
*Snapshot saved at snap1.data*
[root@vms71 ~]#

此时在备份数据里是包括pod1这个pod的。

备份之后删除pod1。

[root@vms71 ~]# kubectl delete  pod pod1
pod "pod1" deleted
[root@vms71 ~]# kubectl get pods
No resources found in default namespace.
[root@vms71 ~]# 

当前命名空间里不存在pod了,但是备份数据里有。

6.恢复数据

1.关闭kubernetes的核心组件包括etcd。

因为它们是以静态pod的方式运行的,且静态目录是 /etc/kubernetes/manifests/,所以只要把此目录剪切到其他位置即可,这里剪切到/下。

[root@vms71 ~]# mv /etc/kubernetes/manifests/ /
[root@vms71 ~]#

2.删除原有数据。

[root@vms71 ~]# rm -rf /var/lib/etcd/
[root@vms71 ~]#

3.恢复数据。

[root@vms71 ~]# etcdctl --endpoints=https://192.168.26.71:2379 --cacert=$cacert --cert=$cert --key=$key snapshot restore snap1.data --data-dir=/var/lib/etcd/ --name=vms71.rhce.cc --initial-cluster=vms71.rhce.cc=https://192.168.26.71:2380 --initial-advertise-peer-urls https://192.168.26.71:2380
*2022-02-28 16:58:25.518748 I | mvcc: restore compact to 67960
2022-02-28 16:58:25.526988 I | etcdserver/membership: added member ec884fe58e76ba1a [https://192.168.26.71:2380] to cluster 6ba0775b22f7fb90*
[root@vms71 ~]#

这样数据就恢复完成了,这条命令的大部分参数可以到原/etc/kubernetes/manifests/etcd.yaml现在的/manifests/etcd.yaml里找到。
修改所有者和所属组

[root@vms71 ~]# chown -R etcd.etcd /var/lib/etcd/
[root@vms71 ~]#

4.重启kubelet。

[root@vms71 ~]# systemctl restart kubelet
[root@vms71 ~]#

5.验证pod是否被恢复了。

[root@vms71 ~]# kubectl get pods
NAME   READY   STATUS              RESTARTS   AGE
pod1   0/1     ContainerCreating   1          42h
[root@vms71 ~]# 
[root@vms71 ~]# kubectl get pods
NAME   READY   STATUS    RESTARTS   AGE
pod1   1/1     Running   0          42h
[root@vms71 ~]# 

相关新闻

发表回复

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据

                                                                                                                                    RHCE9学习指南连载,点击阅读