备份和恢复 Kubernetes 集群中的 Etcd 数据
Kubernetes 作为目前最炙手可热的容器编排软件,受到越来越多互联网公司的喜爱,之所以会出现这样的现象,主要还是因为这套编排软件不仅功能强大,还非常方便进行二次开发,整个 Kubernetes 的生态圈非常活跃。有了 Kubernetes 这套“骨架”,可以在上面运行非常多的中间件和应用程序。Apiserver,Controller Manager,Scheduler,Proxy 可以认为是这套“骨架”的组成部分,而 Etcd 便是这套系统的底座,整个系统的数据都存储在它当中,保证了 Etcd 的稳定性整个容器编排系统的稳定性就有了保证。
在正式开始之前,说明下实验环境,五台主机组成 Kubernetes 集群。
控制平面主机:p1.xufu.xyz、p2.xufu.xyz、p3.xufu.xyz
工作主机:p4.xufu.xyz、p5.xufu.xyz
主机系统:CentOS Linux release 7.9.2009 (Core)
Etcd 版本:3.5.1
Etcd
简介
它是一种键值数据库,Kubernetes 将自身的状态数据都存储在 Etcd 中,这些数据包含 deployment,pod,daemonset 等各种对象。整个集群组件中只有 Apiserver 会直接和 Etcd 通信,其他组件都是直接和 Apiserver 通信。在生产环境中,最好以集群的方式运行 Etcd,官方建议运行五个节点组成集群,这样可以在丢失两个节点的情况下, 保证数据的可用性。
访问
Etcd 中存放有不少敏感数据,所以对它的访问需要使用公钥和私钥。为了方便访问,在家目录文件“.bashrc”配置如下命令别名。
显示当前 Etcd 存储的所有 Key。
备份
使用 kubeadm 部署的集群,Etcd 默认将数据存放在宿主机的目录/var/lib/etcd 下。
Etcd 数据目录
Etcd 的版本 2 和 3 差别很大,因笔者使用的是 3 版本,备份命令是这样(在任一控制平面主机操作均可),命令执行不用对 Etcd 做关闭操作。
查看备份的快照。
快照信息
恢复
恢复操作相比较备份操作有稍许麻烦。下面步骤需要在三台控制平面主机上都操作。
1,关闭 kubelet,否则它会自动重启 apiserver。
2,关闭 apiserver 容器,使用 docker 命令找到容器,直接 stop。
3,重命名目录/var/lib/etcd,创建新的,并修改目录权限。
4,使用备份的快照,恢复数据。
p2 和 p3 节点类似。
5,启动三台 etcd,确认下集群是否健康。
确认没问题后,启动 apiserver 容器。
至此,整个恢复备份过程操作完毕
评论