etcd备份

etcd是kubernetes集群极为重要的一块服务,存储了kubernetes集群所有的数据信息,如Namespace、Pod、Service、路由等状态信息。如果etcd集群发生灾难或者 etcd 集群数据丢失,都会影响k8s集群数据的恢复。因此,通过备份etcd数据来实现kubernetes集群的灾备环境十分重要。

你必须拥有一个 Kubernetes 的集群,同时你的 Kubernetes 集群必须带有 kubectl 命令行工具。 建议在至少有两个节点的集群上运行本教程,且这些节点不作为控制平面主机。
该次实验采取master为1台

查看集群的状态

kubectl get node -o wide

image.png
单独添加一个硬盘作为etcd备份的磁盘

#添加20G的硬盘作为etcd存储,格式化为exit4
#添加完了之后进行扫描
echo "- - -" > /sys/class/scsi_host/host(序号)/scan
 lsblk进行查看
#进行逻辑卷操作,需要注意的是,最后的路径请根据自己的情况来
 pvcreate /dev/sdc
 vgcreate nfs /dev/sdc
lvcreate -L +19G -n backup  etcd  #加19GB
 mkfs.ext4 /dev/mapper/etcd-backup  #进行格式化
mkdir etcd_backup #建立文件夹
mount /dev/mapper/etcd-backup /root/etcd_backup 进行手动挂载
blkid#查看uuid
vi /etc/fstab #进行自动挂载的操作
df -h 查看是否挂载,如果没有,请检查操作是否正确

下载etcd的包,可以使用scp上传到主机,或者wget拉取保存,然后进行解压的操作,发现有一个etcdl的文件,

https://github.com/etcd-io/etcd/releases

 cp etcd-v3.4.22-linux-amd64/etcdctl /usr/local/sbin/

把文件复制到local目录,就可以删除etcd的包了

进行手动 的备份

kubectl get pod -n kube-system -o wide查看相关的端口
--endpoints之后是master的ip:etcdl的端口,
--cert=/etc/kubernetes/pki/etcd/server,--key=/etc/kubernetes/pki/etcd,--cacert=/etc/kubernetes/pki/etcd目录下是需要使用到的证书,这个请自行查看

mkdir etcd_backup
cd  etcd_backup
ETCDCTL_API=3 etcdctl --endpoints 192.168.10.134:2379 \ 
--cert=/etc/kubernetes/pki/etcd/server.crt\
--key=/etc/kubernetes/pki/etcd/server.key\
--cacert=/etc/kubernetes/pki/etcd/ca.crt\  
member list
ETCDCTL_API=3 etcdctl --endpoints 192.168.10.134:2379\
--cert=/etc/kubernetes/pki/etcd/server.crt\
--key=/etc/kubernetes/pki/etcd/server.key\
--cacert=/etc/kubernetes/pki/etcd/ca.crt\
endpoint status --write-out=table
ETCDCTL_API=3 etcdctl --endpoints 192.168.10.134:2379\
--cert=/etc/kubernetes/pki/etcd/server.crt\
--key=/etc/kubernetes/pki/etcd/server.key\
--cacert=/etc/kubernetes/pki/etcd/ca.crt\
 endpoint health
 ETCDCTL_API=3 etcdctl --endpoints 192.168.10.134:2379\
--cert=/etc/kubernetes/pki/etcd/server.crt \
--key=/etc/kubernetes/pki/etcd/server.key \
--cacert=/etc/kubernetes/pki/etcd/ca.crt\
 snapshot save my.db
 ETCDCTL_API=3 etcdctl --endpoints 192.168.10.134:2379\
--cert=/etc/kubernetes/pki/etcd/server.crt \
--key=/etc/kubernetes/pki/etcd/server.key \
--cacert=/etc/kubernetes/pki/etcd/ca.crt\
snapshot status my.db --write-out=table
ETCDCTL_API=3 etcdctl --endpoints 192.168.10.134:2379 \
--cert=/etc/kubernetes/pki/etcd/server.crt\   
--key=/etc/kubernetes/pki/etcd/server.key \
--cacert=/etc/kubernetes/pki/etcd/ca.crt\
snapshot save `date "+%F|%T"`.db
ETCDCTL_API=3 /usr/local/sbin/etcdctl --endpoints 192.168.10.134:2379 \
  --cert=/etc/kubernetes/pki/etcd/server.crt \
  --key=/etc/kubernetes/pki/etcd/server.key \
  --cacert=/etc/kubernetes/pki/etcd/ca.crt \
  snapshot save /root/etcd_backup/`date "+%F-%T"`.db

自动备份

crontab -e  编辑任务
*/2 * * * *  bash /root/backup.sh #两分钟执行一次备份脚本
#!/usr/bin/bash

ETCDCTL_API=3 /usr/local/sbin/etcdctl --endpoints 192.168.10.134:2379 \
  --cert=/etc/kubernetes/pki/etcd/server.crt \
  --key=/etc/kubernetes/pki/etcd/server.key \
  --cacert=/etc/kubernetes/pki/etcd/ca.crt \
  snapshot save /root/etcd_backup/`date "+%F-%T"`.db

查看效果
image.png

posted @ 2022-11-22 13:38  yutoujun  阅读(200)  评论(0编辑  收藏  举报