一、前言
? ? ?k8s集群使用etcd集群存储数据,如果etcd集群崩溃了,k8s集群的数据就会全部丢失,所以需要日常进行etcd集群数据的备份,预防etcd集群崩溃后可以使用数据备份进行恢复,也可用于重建k8s集群进行数据恢复
二、备份
? ? 先安装etcd服务,k8s集群使用的pod部署etcd集群
? ?yum -y install etcd
? ?更改etcd api版本为v3(临时生效,重启后会失效)
? ?export ETCDCTL_API=3
? ?永久生效
? ?vi /etc/profile
export ETCDCTL_API=3 #在末尾加入该配置
使配置生效?
source /etc/profile?
? ?查看是否生效
? ?etcdctl version
? ?
?etcd集群数据备份,只需在一个节点上执行备份即可,因为用的是pod部署所以直接调用etcd接口进行备份
?netstat -tlpn
创建备份存放目录
mkdir -p /opt/etcd/backup/?
执行备份命令
ETCDCTL_API=3 etcdctl --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 \
snapshot save /opt/etcd/backup/etcdbackup.db
ls -ll??/opt/etcd/backup/
三、恢复?
? ? etcd集群数据恢复需要在每个etcd的节点执行数据备份的恢复,执行恢复前需要先停止etcd服务和k8s组件服务apiserver、controller-manager、scheduler即manifests目录下的所有由yaml启动的服务
ls?/etc/kubernetes/manifests/
?因为是通过pod的方式直接部署,将该目录更改名称所有服务就会停止
mv?/etc/kubernetes/manifests??/etc/kubernetes/manifests.bak
再把原来的etcd数据目录也备份,以免恢复出问题需要还原
mv?/var/lib/etcd /var/lib/etcd.bck
恢复etcd备份数据
ETCDCTL_API=3 etcdctl snapshot restore /opt/etcd/backup/etcdbackup.db --data-dir=/var/lib/etcd
?以上恢复操作需要在每个etcd节点均需执行,执行完成后在恢复etcd和k8s组件服务的运行
将etcd和k8s组件服务恢复运行
mv?/etc/kubernetes/manifests.bak? /etc/kubernetes/manifests?