etcd备份与恢复

栏目:云苍穹知识作者:金蝶来源:金蝶云社区发布:2024-09-23浏览:1

etcd备份与恢复

etcd介绍

Etcd是 Kubernetes的关键组件,因为它存储了集群的整个状态:其配置,规格以及运行中的工作负载的状态。常见问题etcd数据损坏,Kubernetes组件会不断重启,检查etcd容器日志确认异常无法启动导致。本文介绍使用苍穹安装器部署环境的etcd的备份与恢复。

etcd关乎k8s的正常运行,请谨慎操作

备份与恢复

1.部署etcdctl

备份还原都需要etcd客户端,容器化部署的可以直接从etcd容器中拷贝出来:在k8smaster节点找到etcd容器,使用docker cp执行拷贝到宿主机,或者直接执行以下语句。

上传图片

docker cp $(docker ps  | grep etcd | grep -v pause | head -1 |awk '{print $1}'):/usr/local/bin/etcdctl /usr/local/bin/

此处不能使用kubectl cp,官方 etcd 镜像并没有 tar 命令,所以执行会报错

执行后可以使用etcdctl指令,以下备份还原需要使用到,同时也可以查询集群状态等,可以自行查找资料学习。

etcdctl  --cluster --cert=/etc/kubernetes/pki/etcd/server.crt --cacert=/etc/kubernetes/pki/etcd/ca.crt --key=/etc/kubernetes/pki/etcd/server.key  endpoint status -w table

上传图片

2.备份etcd

执行命令,备份etcd数据,集群下在某个master节点备份即可

ETCDCTL_API=3 etcdctl --endpoints="https://127.0.0.1:2379"  --cert="/etc/kubernetes/pki/etcd/server.crt"  --key="/etc/kubernetes/pki/etcd/server.key"  --cacert="/etc/kubernetes/pki/etcd/ca.crt"   snapshot save /kingdee/etcd_bak/backup.db
  • ETCDCTL_API=3,使用Etcd的v3版本的API,从k8s 1.13开始,k8s不再支持v2版本的etcd

  • endponits可以通过命令在etcd容器中查找,一般会有两个IP使用任一即可:kubectl describe pod etcd-centos -n kube-system | grep listen-client-urls

  • /kingdee/etcd_bak/backup.db #备份完成后的数据,对应路径需要提前建立

上传图片

3.恢复etcd

1.单机恢复

恢复前,需要先停止kube-apiserver和etcd,否则这2组件会不断重启。

#将manifests和etcd目录先改个名字,apiserver和etcd自然就停止了
mv /etc/kubernetes/manifests   /etc/kubernetes/manifests.bak
mv /kingdee/k8s/etcd /kingdee/k8s/etcd.bak
mkdir /kingdee/k8s/etcd

示例中安装路径选择的是/kingdee,那么etcd路径就是/kingdee/k8s/etcd

执行命令,修改路径为现场正确值,还原etcd数据

ETCDCTL_API=3 etcdctl --endpoints="https://127.0.0.1:2379"  --cert="/etc/kubernetes/pki/etcd/server.crt"  --key="/etc/kubernetes/pki/etcd/server.key"  --cacert="/etc/kubernetes/pki/etcd/ca.crt"   snapshot restore /kingdee/etcd_bak/backup.db --data-dir=/kingdee/k8s/etcd

上传图片

最后,恢复manifests,组件会自动重启,稍等一下就可以验证是否恢复正常。

mv /etc/kubernetes/manifests.bak  /etc/kubernetes/manifests

上传图片


2.集群恢复

集群的恢复操作和单机一致,不同点在于必须所有节点都需要拷贝同一个backup.db再恢复etcd数据,恢复命令:

ETCDCTL_API=3 etcdctl snapshot restore /kingdee/etcd_bak/backup.db --data-dir=/kingdee/k8s/etcd --name=etcd1 --initial-cluster-token="etcd-cluster" --initial-advertise-peer-urls=https://192.168.118.180:2380 --initial-cluster="etcd1=https://192.168.118.180:2380,etcd2=https://192.168.118.190:2380,etcd3=https://192.168.118.200:2380"
  • name:etcd节点名,苍穹安装的默认为计算机名,此处并不强制要求使用默认值,只要和后面initial-cluster参数对应上即可,注意3台机器的执行的命令中name是不一样的

  • initial-advertise-peer-urls:在集群中自己标明的访问地址

  • initial-cluster:每个节点的访问地址,注意格式为etcd节点名=https://k8s宿主机ip:2380


etcd备份与恢复

etcd介绍Etcd是 Kubernetes的关键组件,因为它存储了集群的整个状态:其配置,规格以及运行中的工作负载的状态。常见问题etcd数据损坏,Ku...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息