
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=3ETCD进行过大的版本升级,所以会进行指定版本模拟灾难:
#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