解析
针对存在的etcd实例https://127.0.0.1:2379,创建一个快照,保存到/srv/data/etcd-snapshot.db。在创建快照的过程中,如果卡住了,就键入ctrl+c终止,然后重试。
然后恢复一个已经存在的快照: /var/lib/backup/etcd-snapshot-previous.db
执行etcdctl命令的证书存放在:
ca证书:/opt/KUIN00601/ca.crt
客户端证书:/opt/KUIN00601/etcd-client.crt
客户端密钥:/opt/KUIN00601/etcd-client.key
本次实验时就不复制,使用本地的路径了,可以查看配置文件(我的是kubeadm安装的集群):
- --cert-file=/etc/kubernetes/pki/etcd/server.crt
- --key-file=/etc/kubernetes/pki/etcd/server.key
- --trusted-ca-file=/etc/kubernetes/pki/etcd/ca.crt
命令
环境搭建
安装etcdctl
敲一下etcdctl,没有的话会提示安装命令,安装后查看一下是否成功
解题
操作前先设置环境变量
export ETCDCTL\_API=3
备份
无参数
etcdctl --endpoints="https://127.0.0.1:2379" snapshot save /srv/data/etcd-snapshot.db
有参数
etcdctl --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 snapshot save /srv/data/etcd-snapshot.db
查看状态
无参数
etcdctl --endpoints="https://127.0.0.1:2379" snapshot status /srv/data/etcd-snapshot.db
有参数
etcdctl --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 snapshot status /srv/data/etcd-snapshot.db
还原
还原之前可以删除一个资源,看看一会儿还原后资源是不是恢复了。
创建备份目录
mkdir -p /opt/backup/
移动集群文件,使apiserver等停止
mv /etc/kubernetes/manifests/kube-* /opt/backup
这里我也没有官方的etcd-snapshot-previous.db,就是把前面备份的改了个名字而已
无参数
etcdctl --endpoints="https://127.0.0.1:2379" snapshot restore /var/lib/backup/etcd-snapshot-previous.db --data-dir=/var/lib/etcd-restore
有参数
etcdctl --endpoints="https://127.0.0.1:2379" --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 snapshot restore /var/lib/backup/etcd-snapshot-previous.db --data-dir=/var/lib/etcd-restore
修改配置文件
vim /etc/kubernetes/manifests/etcd.yaml
# 将volume配置的path: /var/lib/etcd改成/var/lib/etcd-restore
volumes:
- hostPath:
path: /etc/kubernetes/pki/etcd
type: DirectoryOrCreate
name: etcd-certs
- hostPath:
path: /var/lib/etcd-restore
还原k8s组件
mv /opt/backup/* /etc/kubernetes/manifests
systemctl restart kubelet
结果
设置环境变量
如果配置文件中已经设置,命令行同时设置会有冲突
去除参数即可
删除一个pod,方便验证是否还原成功
还原结果如下图所示:
修改etcd配置如下图所示
还原后重启成功截图如下图所示:
可以看到还原前删除的foolbar
二进制安装时
博主是使用kubeadm安装的k8s,当使用二进制安装时,配置文件位置有所不同,其他一致。
二进制安装时,etcd不再是容器的方式。
查看etcd的配置,使用命令
systemctl status etcd
可以找到–config-file,例如/etc/etcd/etcd.config.yaml
或者使用ps命令查找
ps aux | grep "config.yaml"
模拟环境
题目
Make a backup of etcd running on cluster3-controlplane1 and save it on the controlplane node at /tmp/etcd-backup.db.
Then create a Pod of your kind in the cluster.
Finally restore the backup, confirm the cluster is still working and that the created Pod is no longer with us.
分析
备份运行在cluster3-controlplane1上的etcd,并将其保存在cluster3-controlplane1节点的 /tmp/ectd-backup.db 、上。
然后在集群中创建一个Pod。
最后恢复备份,确认集群仍在工作,并且创建的Pod已不在。
重点还是找到几个文件的位置。
解题
备份
ETCDCTL\_API=3 etcdctl snapshot save /tmp/etcd-backup.db \
--cacert /etc/kubernetes/pki/etcd/ca.crt \
--cert /etc/kubernetes/pki/etcd/server.crt \
--key /etc/kubernetes/pki/etcd/server.key
创建一个pod
kubectl run test --image=nginx
kubectl geet po | grep test
移动组件
还原
etcdctl snapshot restore /tmp/etcd-backup.db \
--data-dir /var/lib/etcd-backup \
--cacert /etc/kubernetes/pki/etcd/ca.crt \
--cert /etc/kubernetes/pki/etcd/server.crt \
--key /etc/kubernetes/pki/etcd/server.key
修改etcd.yaml文件