命令记不住

登陆

k8s Etcd 数据库备份与恢复

Etcd数据库备份与恢复

Kubernetes 使用 Etcd 数据库实时存储集群中的数据,安全起见,一定要备份!

单ETCD备份一个节点

集群ETCD备份2个节点

1.kubeadm部署方式

kubeadm属于单etcd
备份:
#ETCDCTL_API=3 etcdctl \
> snapshot save snap.db \
--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

#ls -alh snap.db 
-rw-r--r-- 1 root root 5.1M Nov 30 23:12 snap.db

ETCDCTL_API=3 ETCD进行过大的版本升级,所以会进行指定版本

模拟灾难:
#kubectl get pods
NAME                          READY   STATUS    RESTARTS   AGE
configmap-demo-pod1           1/1     Running   2          2d8h
fluentd-elasticsearch-7vgqn   1/1     Running   2          2d11h
fluentd-elasticsearch-g6dqw   1/1     Running   2          2d11h
rbc-788cd8c47f-2q6vf          1/1     Running   2          2d4h
web6-0                        1/1     Running   2          2d11h
web6-1                        1/1     Running   2          2d11h
web6-2                        1/1     Running   2          2d11h
#kubectl get pods
NAME                          READY   STATUS    RESTARTS   AGE
configmap-demo-pod1           1/1     Running   2          2d8h
fluentd-elasticsearch-7vgqn   1/1     Running   2          2d11h
fluentd-elasticsearch-g6dqw   1/1     Running   2          2d11h
rbc-788cd8c47f-2q6vf          1/1     Running   2          2d4h
web6-0                        1/1     Running   2          2d11h
web6-1                        1/1     Running   2          2d11h
web6-2                        1/1     Running   2          2d11h
#kubectl get pods
NAME                          READY   STATUS    RESTARTS   AGE
fluentd-elasticsearch-bc8gj   1/1     Running   0          3m16s
fluentd-elasticsearch-k4vvk   1/1     Running   0          3m15s
rbc-788cd8c47f-pmlsx          1/1     Running   0          3m18s
恢复:
1、先暂停kube-apiserver和etcd容器,避免会写入新数据
#mv /etc/kubernetes/manifests /etc/kubernetes/manifests.bak
#mv /var/lib/etcd /var/lib/etcd.bak

2、恢复到指定数据目录下
#ETCDCTL_API=3 etcdctl \
snapshot restore snap.db \
--data-dir=/var/lib/etcd

3、启动kube-apiserver和etcd容器
#mv /etc/kubernetes/manifests.bak /etc/kubernetes/manifests
验证:
#kubectl get pods
NAME                          READY   STATUS    RESTARTS   AGE
configmap-demo-pod1           1/1     Running   2          2d8h
fluentd-elasticsearch-7vgqn   1/1     Running   2          2d11h
fluentd-elasticsearch-g6dqw   1/1     Running   2          2d11h
rbc-788cd8c47f-2q6vf          1/1     Running   2          2d4h
web6-0                        1/1     Running   2          2d11h
web6-1                        1/1     Running   2          2d11h
web6-2                        1/1     Running   2          2d11h
定期做备份

2.二进制部署方式

ETCD集群简介

1.同一时间只写入某一个节点,为了避免数据不是最新数据和节点挂掉,至少备份两个节点。

2.对外使用6379端口服务

3.数据目录包括member的上级目录

4.恢复要在所有节点上进行恢复,要在每个节点挨个恢复etcd,原因是存储了不同的名称

5.恢复之后所有的数据都会同步

备份:
#ETCDCTL_API=3 etcdctl \
snapshot save snap.db \
--endpoints=https://192.168.31.71:2379 \
--cacert=/opt/etcd/ssl/ca.pem \
--cert=/opt/etcd/ssl/server.pem \
--key=/opt/etcd/ssl/server-key.pem
模拟灾难:
删除一个资源
恢复:
1、先暂停kube-apiserver和etcd
#systemctl stop kube-apiserver 
#systemctl stop etcd
#mv /var/lib/etcd/default.etcd /var/lib/etcd/default.etcd.bak

2、在每个节点上恢复
#ETCDCTL_API=3 etcdctl snapshot restore snap.db \
--name etcd-1 \
--initial-cluster="etcd-1=https://192.168.31.71:2380,etcd-2=https://192.168.31.72:2380,etcd-3=https://192.168.31.73:2380" \
--initial-cluster-token=etcd-cluster \
--initial-advertise-peer-urls=https://192.168.31.71:2380 \
--data-dir=/var/lib/etcd/default.etcd

3、启动kube-apiserver和etcd
#systemctl start kube-apiserver 
#systemctl start etcd
验证
直接验证数量,可以书写shell脚本

.

3.第三方备份工具

veleo是一个云原生的灾难恢复和迁移工具,采用 Go 语言编写,可以安全的备份、恢复和迁移Kubernetes集群资源和持久卷。velero是备份整个 k8s 集群所有的数据,胜过 etcd 备份。

Velero目前包含以下特性:

支持Kubernetes集群数据备份和恢复
支持复制当前Kubernetes集群的资源到其它Kubernetes集群
支持复制生产环境到开发以及测试环境
Velero组件一共分两部分,分别是服务端和客户端。

服务端:运行在Kubernetes集群中
客户端:运行在本地的velero命令行工具,需要在机器上已配置好kubectl及集群kubeconfig
velero使用场景

灾备场景:提供备份恢复k8s集群的能力
迁移场景:提供拷贝集群资源到其他集群的能力(复制同步开发,测试,生产环境的集群配置,简化环境配置)
velero与etcd备份区别

直接备份 Etcd 是将集群的全部资源备份起来,而 Velero 可以对 Kubernetes 集群内对象级别进行备份。
除了对 Kubernetes 集群进行整体备份外,Velero 还可以通过对 Type、Namespace、Label
等对象进行分类备份或者恢复。

github地址:https://github.com/vmware-tanzu/velero

参考地址:https://blog.csdn.net/weixin_40212316/article/details/120610451

推荐阅读