etcd备份
etcd是kubernetes集群极为重要的一块服务,存储了kubernetes集群所有的数据信息,如Namespace、Pod、Service、路由等状态信息。如果etcd集群发生灾难或者 etcd 集群数据丢失,都会影响k8s集群数据的恢复。因此,通过备份etcd数据来实现kubernetes集群的灾备环境十分重要。
你必须拥有一个 Kubernetes 的集群,同时你的 Kubernetes 集群必须带有 kubectl 命令行工具。 建议在至少有两个节点的集群上运行本教程,且这些节点不作为控制平面主机。
该次实验采取master为1台
查看集群的状态
kubectl get node -o wide
单独添加一个硬盘作为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
查看效果