文章目录
一、前言
此环境是通过kubeadm安装的kubernetes,etcd是以容器的方式运行的,如果是本地运行的etcd,备份恢复步骤类似。
所有 Kubernetes 对象都存储在 etcd 上。定期备份 etcd 集群数据对于在灾难场景(例如丢失所有控制平面节点)下恢复 Kubernetes 集群非常重要。 快照文件包含所有 Kubernetes 状态和关键信息。为了保证敏感的 Kubernetes 数据的安全,可以对快照文件进行加密。
备份 etcd 集群可以通过两种方式完成:etcd 内置快照和卷快照
二、工具安装
2.1、etcd版本查询
kubectl describe pod etcd-nodename -n kube-system|grep Image:
本环境是etcd:3.4.13
2.2、etcdctl工具下载安装
下载地址:https://github.com/etcd-io/etcd/releases/download/v3.4.13/etcd-v3.4.13-linux-amd64.tar.gz
安装:
tar -zxf etcd-v3.4.13-linux-amd64.tar.gz
cp etcd-v3.4.13-linux-amd64/etcdctl /usr/bin/
三、备份
3.1、查询etcd服务
在master节点上查询etcd服务运行信息
ps -ef|grep etcd
获取到–advertise-client-urls地址,将服务信息拷贝到文件,方便后面使用这些信息(参数恢复快照时需要)
3.2、测试命令使用
查询etcd状态
cd /etc/kubernetes/pki/etcd/ #kubeadm安装默认存放证书目录
ETCDCTL_API=3 etcdctl --cacert=<trusted-ca-file> --cert=<cert-file> --key=<key-file> --endpoints=https://x.x.x.x:2379 endpoint status
3.3、内置快照备份
etcd 支持内置快照。快照可以从使用 etcdctl snapshot save
命令的活动成员中获取(该 etcd 数据目录目前没有被 etcd 进程使用,也可以通过从etcd数据目录复制 member/snap/db
文件)
备份快照:snapshot save
ETCDCTL_API=3 etcdctl --cacert=<trusted-ca-file> --cert=<cert-file> --key=<key-file> --endpoints=https://x.x.x.x:2379 snapshot save /data/etcd/etcd-bak.db
查询快照信息:
ETCDCTL_API=3 etcdctl --write-out=table snapshot status /data/etcd/etcd-bak.db
3.4、卷快照
如果 etcd 运行在支持备份的存储卷上,则可以通过获取存储卷的快照来备份 etcd 数据。
四、恢复
4.1、恢复快照
ETCDCTL_API=3 etcdctl --cacert=<trusted-ca-file> --cert=<cert-file> --key=<key-file> --endpoints=https://x.x.x.x:2379 --name=<name> --initial-cluster=<xxx>=<xxx> --initial-advertise-peer-urls=<xxx> --data-dir=<xxx> snapshot restore /data/etcd/etcd-bak.db
4.2、备注
如果集群中正在运行任何 API 服务器,则不应尝试还原 etcd 的实例。相反,请按照以下步骤还原 etcd:
- 停止所有API服务实例(先将kube-apiserver停止,再暂停etcd,之后再执行恢复操作)
- 在所有etcd实例中恢复状态(etcd都是以pod的形式运行的,因此,无法停止pod,可以直接删除原有的数据之后,执行
snapshot restore
命令) - 重启所有API服务实例
我们还建议重启所有组件(例如 kube-scheduler
、kube-controller-manager
、kubelet
),以确保它们不会 依赖一些过时的数据。请注意,实际中还原会花费一些时间
-----------日常记录---------------
参考:https://kubernetes.io/zh/docs/tasks/administer-cluster/configure-upgrade-etcd/#备份-etcd-集群