k8s之etcd的备份与回恢复

您所在的位置:网站首页 备份与恢复是什么 k8s之etcd的备份与回恢复

k8s之etcd的备份与回恢复

2023-12-04 22:28| 来源: 网络整理| 查看: 265

etcd是 Kubernetes的关键组件,因为它存储了集群的整个状态:其配置,规格以及运行中的工作负载的状态,因此需要对etcd进行定期备份,出现故障时候可快速恢复

一、容器方式安装的etcd

环境:kubeadm安装的k8s集群只有一个master和一个etcd,都是容器运行

1、查看etcd资源文件,数据目录位置如图:

进入目录/var/lib/etcd下可以看到存在两个文件夹:

snap:存放快照数据,etcd防止WAL文件过多而设置的快照,存储etcd数据状态 wal:存放预写式日志,最大的作用是记录了整个数据变化的全部历程。在etcd中,所有数据的修改在提交前,都要先写入到WAL中

2、下载备份工具或者直接从etcd容器内将工具复制出来,如下:

1、wget https://github.com/etcd-io/etcd/releases/download/v3.5.1/etcd-v3.5.1-linux-amd64.tar.gz tar -xzvf etcd-v3.5.1-linux-amd64.tar.gz cd etcd-v3.5.1-linux-amd64/ cp etcdctl /usr/local/bin/ 2、 docker cp 容器名:/usr/local/bin/etcdctl /usr/bin

3、执行命令,备份etcd数据,如下:

ETCDCTL_API=3 etcdctl --endpoints="https://127.0.0.1:2379" --cert="/etc/kubernetes/pki/etcd/server.crt" --key="/etc/kubernetes/pki/etcd/server.key" --cacert="/etc/kubernetes/pki/etcd/ca.crt" snapshot save backup.db ETCDCTL_API=3,使用 Etcd 的 v3 版本的 API,从 k8s 1.13 开始,k8s不再支持 v2 版本的 etcd endponits可以通过命令查找,一般会有两个IP:kubectl describe pod etcd-k8s-master1 -n kube-system | grep listen-client-urls backup.db #备份完成后的数据

4、恢复etcd数据,恢复之前需要先停止kube-apiserver,etcd,如下:

#将manifests和etcd目录先改个名字,apiserver和etcd自然就停止了 mv /etc/kubernetes/manifests /etc/kubernetes/manifests.bak mv /var/lib/etcd /var/lib/etcd.bak mkdir /var/lib/etcd #创建一个空的etcd目录

执行如下命令恢复数据:

ETCDCTL_API=3 etcdctl --endpoints="https://127.0.0.1:2379" --cert="/etc/kubernetes/pki/etcd/server.crt" --key="/etc/kubernetes/pki/etcd/server.key" --cacert="/etc/kubernetes/pki/etcd/ca.crt" snapshot restore backup.db --data-dir=/var/lib/etcd

恢复完成后,将manifests.bak修改回来即可自动启动apiserver,命令如下:

mv /etc/kubernetes/manifests.bak /etc/kubernetes/manifests

查看pod,如图:

二、二进制安装的etcd

集群安装的etcd,备份的时候,只需要备份一个节点的数据就可以

1、执行命令,备份etcd数据,如下:

#每一行都是双横杠- ETCDCTL_API=3 etcdctl snapshot save backup.db \ --cacert=/opt/etcd/ssl/etcd-ca.pem \ --cert=/opt/etcd/ssl/server.pem \ --key=/opt/etcd/ssl/server-key.pem \ --endpoints="https://192.168.15.215:2379

2、将备份后的文件复制到其他etcd节点,如下:

#下面这条命令需要配置hosts,如果不配置用scp命令也可以 for i etcd2,etcd3;do scp backup.db root@i:/root ;done

3、恢复etcd数据

etcd集群备份操作只需要在其中的一个etcd节点上完成,然后将备份文件拷贝到其他节点,但etcd集群恢复操作必须要所有的etcd节点上完成

恢复之前需要先关闭apiserver和etcd,删除etcd数据文件,命令如下:

systemctl stop kube-apiserver #停止apiserver systemctl stop etcd #停止etcd rm -rf opt/etcd/data/* #删除数据目录文件,不一定非要这个目录,根据自己实际情况

在节点1执行恢复命令,如下:

ETCDCTL_API=3 etcdctl snapshot restore backup.db \ --name etcd-1 \ --initial-cluster="etcd-1=https://192.168.15.215:2380,etcd-2=https://192.168.15.216:2380,etcd-3=https://192.168.15.217:2380" \ --initial-cluster-token=etcd-cluster \ --initial-advertise-peer-urls=https://192.168.15.215:2380 \ --data-dir=/opt/etcd/data

在节点2执行恢复命令,如下:

ETCDCTL_API=3 etcdctl snapshot restore backup.db \ --name etcd-2 \ --initial-cluster="etcd-1=https://192.168.15.215:2380,etcd-2=https://192.168.15.216:2380,etcd-3=https://192.168.15.217:2380" \ --initial-cluster-token=etcd-cluster \ --initial-advertise-peer-urls=https://192.168.15.216:2380 \ --data-dir=/opt/etcd/data

在节点3执行恢复命令,如下:

ETCDCTL_API=3 etcdctl snapshot restore backup.db \ --name etcd-3 \ --initial-cluster="etcd-1=https://192.168.15.215:2380,etcd-2=https://192.168.15.216:2380,etcd-3=https://192.168.15.217:2380" \ --initial-cluster-token=etcd-cluster \ --initial-advertise-peer-urls=https://192.168.15.217:2380 \ --data-dir=/opt/etcd/data

恢复完成后,重启kube-apiserver和etcd,如下:

systemctl start kube-apiserver systemctl start etcd

4、查看集群状态:

ETCDCTL_API=3 /opt/etcd/bin/etcdctl --cacert=/opt/etcd/ssl/etcd-ca.pem --cert=/opt/etcd/ssl/server.pem --key=/opt/etcd/ssl/server-key.pem --endpoints="https://192.168.15.215:2379,https://192.168.15.216:2379,https://192.168.15.217:2379" endpoint health --write-out=table

总结:

备份ETCD集群时,只需要备份一个ETCD数据,然后同步到其他节点上 恢复ETCD数据时,每个节点都要执行恢复命令

恢复顺序:停止kube-apiserver –> 停止ETCD –> 恢复数据 –> 启动ETCD –> 启动kube-apiserve



【本文地址】


今日新闻


推荐新闻


    CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3