《Kubernetes管理篇:基于etcd实现K8S集群数据备份与恢复(方案一)》

总结:整理不易,如果对你有帮助,可否点赞关注一下?

更多详细内容请参考:企业级K8s集群运维实战


一、背景信息

1、K8S使用etcd数据库实时存储集群的数据,必须要备份。
2、备份只需要在其中一个etcd节点即可,每个etcd节点上的数据是一致的,但是数据恢复时必须要在每个节点上进行。
3、etcd容器是与宿主机共享网络的,采用hostNetwork方式,2379端口可以在宿主机上查看到。

root@k8s-master-191:~# ss -tnulp | grep 2379
tcp     LISTEN   0      1024      192.168.1.191:2379     0.0.0.0:*    users:(("etcd",pid=1624,fd=9)) 
tcp     LISTEN   0      1024        127.0.0.1:2379       0.0.0.0:*    users:(("etcd",pid=1624,fd=8)) 

4、kubeadm方式部署的集群,其中etcd是通过静态pod方式部署启动,在/etc/kubernetes/manifests目录下的etcd.yaml文件,里面记录了启动镜像、版本、证书路径、数据目录等内容。


二、etcd基于kubeadm部署方式

说明:这里以单节点etcd为例,介绍备份于恢复操作

2.1、备份

说明:kubeadm部署方式的K8S,etcd服务是采用容器方式的,如果想要在宿主上使用etcdctl命令备份etcd数据库,需要下载etcd二进制文件。

1、在master节点准备二进制文件

wget https://github.com/etcd-io/etcd/releases/download/v3.5.6/etcd-v3.5.6-linux-amd64.tar.gz
tar axf etcd-v3.5.6-linux-amd64.tar.gz 
mv etcd-v3.5.6-linux-amd64/etcd* /usr/bin

2、备份etcd数据库

ETCDCTL_API=3 etcdctl snapshot save snapshot_`date "+%Y-%m-%d-%H-%M-%S"`.db \
--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

2.2、恢复

1、先停止api server 和etcd服务。因为是静态Pod部署,监控这个目录下的yaml文件,当把目录备份后就直接相当于停服

cd /etc/kubernetes/
mv manifests/ manifests.bak
mv /var/lib/etcd/ /var/lib/etcd.bak

2、使用snapshot.db文件恢复数据到/var/lib/etcd目录

ETCDCTL_API=3 etcdctl snapshot restore --data-dir /var/lib/etcd/snapshot_2023-12-04-16-46-08.db

3、重启所有组件

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

三、etcd基于二进制部署方式

说明:这里以三节点etcd集群为例,介绍备份于恢复操作

3.1、备份

说明:这里只需在其中一个etcd节点备份即可。

ETCDCTL_API=3 etcdctl snapshot save snapshot.db --endpoints=http://127.0.0.1:2379

3.2、恢复

说明:三个etcd节点均需要恢复。

1、先暂停kube-apiserver和etcd

systemctl stop kube-apiserver 
systemctl stop etcd
mv /var/lib/etcd/default.etcd /var/lib/etcd/default.etcd.bak

2、在etcd节点上恢复

注意:不管哪种方式恢复数据,都是在每个节点上进行恢复。所以这里就需要指定集群信息。

ETCDCTL_API=3 etcdctl snapshot restore snap.db \
--name etcd-1 \    #节点名称
--initial-cluster="etcd-1=https://192.168.1.10:2380,etcd-2=https://192.168.1.11:2380,etcd-3=https://192.168.1.12:2380" \  #集群地址
--initial-cluster-token=etcd-cluster \    
--initial-advertise-peer-urls=https://192.168.1.10:2380 \  #当前恢复的etcd节点地址
--data-dir=/var/lib/etcd #etcd数据目录

3、启动kube-apiserver和etcd

systemctl start kube-apiserver 
systemctl start etcd

总结:整理不易,如果对你有帮助,可否点赞关注一下?

更多详细内容请参考:企业级K8s集群运维实战

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

东城绝神

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值