kubernetes:Etcd的备份与恢复
k8s常用两种部署方式:kubeadm和二进制部署
kubeadm部署Etcd数据库的备份与恢复
通过etcdctl工具来进行备份
①kubeadm部署未安装etcdctl工具,且etcd数据库以pod形式部署,首先安装etcdctl工具:
通过yum方式部署
$yum -y install etcd
注:etcd有多个API版本区别,使用可先查看不同版本帮助信息
$ETCDCTL_API=3 etcdctl --help
$ETCDCTL_API=2 etcdctl --help
etcdctl 不指定版本,不同etcd版本可能默认的api版本不同,使用时可加版本号。
②通过etcdctl工具来进行etcd数据库备份:
$ETCDCTL_API=3 etcdctl snapshot save 保存路径/名称.db \
--endpoint=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/sevrer.key
③通过etcdctl工具来进行etcd数据库恢复:
停止k8s集群,保证恢复时没有新的数据写入,备份etcd数据目录,还原有问题可及时回退:
$mv /etc/kubernetes/manifests /etc/kubernetes/manifests.bak
$mv /var/lib/etcd/ /var/lib/etcd_`date`.bak
/etc/kubernetes/manifests 下面都是k8s组件的静态yaml,k8s默认每1分钟会去读取此目录yml.
通过etcdctl工具来进行etcd数据库恢复:
$ETCDCTL_API=3 etcdctl snapshot restore 路径/etcd备份.db文件 \
--data-dir=/var/lib/etcd
启动k8s:
$mv /etc/kubernetes/manifests.bak /etc/kubernetes/manifests
注:kubeadm一般只会部署一个etcd,kubectl get pod -n kube-system下,容器挂了,数据就会丢失。一般都是独立部署etcd。
二进制部署Etcd数据库的备份与恢复:
①通过etcdctl工具来进行etcd数据库备份:
$ETCDCTL_API=3 etcdctl snapshot save 保存路径/名称.db \
--endpoint=https://etcd_server-ip:2379 \
--cacert=/opt/etcd/pki/ca.crt \
--cert=/opt/etcd/pki/server.crt \
--key=/opt/etcd/pki/sevrer.key
etcd_server-ip: 在那一台etcd执行备份的IP地址
②停止kube-apiserver和etcd: etcd集群每个节点都要执行
etcd只会和k8s的apiserver交互
$systemctl stop kube-apiserver
$systemctl stop etcd
③备份etcd数据目录:
$mv /var/lib/etcd/default.etcd /var/lib/etcd/default.etcd_`date`.bak
④每个节点执行恢复:
$ETCDCTL_API=3 etcdctl snapshot restore 路径/恢复名.db \
--initial-cluster-token=etcd-cluster \ #etcd配置文件中定义的集群token名
--initial-advertise-peer-urls=https://节点1:2380 \
--data-dir=/var/lib/etcd/default.etcd
⑤启动kube-apiserver和etcd:
$systemctl start kube-apiserver
$systemctl start etcd