游客发表

数据无忧,一学就会:掌握CKA认证必备的etcd备份与还原秘籍!

发帖时间:2025-11-04 23:51:30

etcd是数据无忧一致且高可用的键值存储,用作Kubernetes 所有集群数据的掌握证必后台数据库。是备的备份一个非常重要的部件,因此,还原需要对这个部件进行备份,秘籍方便后续出现问题能尽快的数据无忧恢复。

1.etcd基本使用方式

下面通过Kubernetes 练习环境Killercoda[1]进行实操。掌握证必使用github账号登录到Killercoda平台上,备的备份该平台目前使用的还原是最新版本的Kubernetes。

Killercoda平台

该系统上也安装了etcd cli客户端,秘籍如果没有安装,数据无忧可以执行下面的掌握证必命令进行安装:

复制apt install etcd-client1.

etcdcli 客户端与etcd采用证书方式进行通信,kubeadm方式部署的备的备份Kubernetes可以通过yaml文件查看etcd的证书路径。

etcd组件yaml

--initial-advertise-peer-urls:集群间会通告,还原此为通告地址,秘籍声明节点端口,2380集群中使用,2379客户端使用。

或者使用kubectl get pods etcd-controlplane -o yaml -n kube-system方式查看证书的香港云服务器路径信息。如下图:

etcd组件yaml

2.创建Nginx

通过下面的命令创建具有多个副本的 nginx 部署,这些副本将用于验证 etcd 数据的恢复。

复制kubectl create deployment nginx \ --image=nginx \ --replicas=31.2.3.

验证新部署的 Pod 是否处于运行状态:

查看Pod状态

3.备份Etcd数据

为 etcd 备份创建一个备份目录mkdir etcd-backup运行以下命令进行 etcd 备份。

复制export ETCDCTL_API=3 etcdctl \ --endpoints=https://127.0.0.1:2379 \ --cacert=/etc/kubernetes/pki/etcd/ca.crt \ --cert=/etc/kubernetes/pki/etcd/server.crt \ --key=/etc/kubernetes/pki/etcd/server.key \ snapshot save ./etcd-backup/etcdbackup.db1.2.3.4.5.6.7.

执行完如下图:

备份etcd

4.验证备份数据

运行以下命令,以从新备份数据中获取密钥列表和详细信息:

复制etcdctl --write-out=table snapshot status ./etcd-backup/etcdbackup.db1.

执行完命令后如下图:

5.将备份恢复到集群

(1) 在这里,我们将删除之前创建的 nginx 部署,然后恢复备份,以便恢复 nginx 部署。

复制controlplane $ kubectl delete deployments.apps nginx deployment.apps "nginx" deleted1.2.

(2) 将数据从备份恢复,执行如下命令:

复制controlplane $ export ETCDCTL_API=3 controlplane $ mkdir -p /var/lib/restore controlplane $ etcdctl snapshot restore etcd-backup/etcdbackup.db --data-dir=/var/lib/restore1.2.3.

--data-dir:是指定把数据还原到那个目录下。

执行完上述命令会在指定的目录下生成etcd数据文件,如下图:

还原备份

(3) 现在我们需要停止所有正在运行的Kubernetes组件以更新etcd数据。为此,我们在/etc/kubernetes/manifests/文件夹中放置了kubernetes组件的清单文件,我们将临时将此文件移出此路径,kubelet将自动删除这些pod。

复制mkdir tmp mv /etc/kubernetes/manifests/* tmp/1.2.

把/etc/kubernetes/manifests/目录下的组件yaml文件,移走容器就开始删除。可以通过crictl ps -a查看.

(4) 等待组件容器删除后,我们需要修改etcd.yaml组件的etcd-data中的b2b信息网hostPath路径参数

复制...省略... volumes: -hostPath: path:/etc/kubernetes/pki/etcd type:DirectoryOrCreate name:etcd-certs -hostPath: path:/var/lib/restore type:DirectoryOrCreate name:etcd-data status:{}1.2.3.4.5.6.7.8.9.10.11.

/var/lib/restore就是数据还原的路径。

(5) 验证k8s集群是否正常

复制controlplane $ kubectl get cs Warning: v1 ComponentStatus is deprecated in v1.19+ NAME STATUS MESSAGE ERROR controller-manager Healthy ok scheduler Healthy ok etcd-0 Healthy ok controlplane $ kubectl get pod NAME READY STATUS RESTARTS AGE nginx-7854ff8877-6t6dl 1/1 Running 0 46m nginx-7854ff8877-l6dq8 1/1 Running 0 46m nginx-7854ff8877-pbkq9 1/1 Running 0 46m1.2.3.4.5.6.7.8.9.10.11. 6.CKA真题讲解

CKA真题-etcd备份还原

中文解析:

此项目无需更改配置环境,但是,在执行此项目之前,请确保您已返回初始节点。etcd 这道题真实考试为第4题,用的集群是真实考试时的上一题的集群,即真题第3题 mk8s,所以无需再切换集群了。

Task \

(1)首先,为运行在https://127.0.0.1:2379上的现有 etcd 实例创建快照并将快照保存到 /srv/data/etcd-snapshot.db 文件。

(2)为给定实例创建快照预计能在几秒钟内完成。如果该操作似乎挂起,则命令可能有问题。用CTRL + C 来取消操作然后重试。

(3)然后还原位于/var/lib/backup/etcd-snapshot-previous.db的现有先前快照。

(4)提供了以下TLS证书和密钥,以通过etcdctl 连接到服务器:

CA证书: /opt/KUIN00601/ca.crt客户端证书: /opt/KUIN00601/etcd-client.crt客户端密钥: /opt/KUIN00601/etcd-client.keyetcd备份还原官方文档[2]

(1) 备份

如果不使用 export ETCDCTL_API=3,而使用ETCDCTL_API=3,则下面每条 etcdctl 命令前都要加ETCDCTL_API=3。

如果执行时,提示permission denied,则是亿华云权限不够,命令最前面加 sudo 即可。

复制export ETCDCTL_API=31.

先检查考试环境有没有题目说的目录 /srv/data/,没有的话则需要自己创建:

复制mkdir -p /srv/data1.

备份时etcdctl客户端需要带上证书,,用题目给的三个证书:

复制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 save /srv/data/etcd-snapshot.db1.2.3.4.5.

可以使用etcdctl --write-out=table snapshot status /srv/data/etcd-snapshot.db验证备份的数据。

(2) 还原操作

先创建一个还原数据存储的目录:

复制mkdir -p /var/lib/restore1.

执行还原操作,并指定还原数据存储目录:

复制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/restore1.2.3.4.5.6.

移走/etc/kubernetes/manifests/到临时目录下tmp:

复制mkdir -p /home/tmp mv /etc/kubernetes/manifests/*.yaml /home/tmp1.2.

在/home/tmp目录下编辑etcd.yaml文件,修改etcd-data的hostPath路径为/var/lib/restore:

复制volumes: -hostPath: path:/etc/kubernetes/pki/etcd type:DirectoryOrCreate name:etcd-certs -hostPath: path:/var/lib/restore type:DirectoryOrCreate name:etcd-data status:{}1.2.3.4.5.6.7.8.9.10.

重新把/home/tmp目录下的组件文件移动/etc/kubernetes/manifests/:

复制mv /home/tmp/*.yaml /etc/kubernetes/manifests/1.

(3) 验证操作

验证k8s集群是否正常:

复制controlplane $ kubectl get cs Warning: v1 ComponentStatus is deprecated in v1.19+ NAME STATUS MESSAGE ERROR controller-manager Healthy ok etcd-0 Healthy ok scheduler Healthy ok1.2.3.4.5.6.

到此整个etcd备份与还原操作就完成了。

参考资料:

[1]Killercoda: https://killercoda.com/playgrounds/scenario/kubernetes[2]etcd备份还原官方文档: https://kubernetes.io/zh-cn/docs/tasks/administer-cluster/configure-upgrade-etcd/#backing-up-an-etcd-cluster

    热门排行

    友情链接