我写这个文章比较简,我的etcd只在我的master节点上。没集群。但是此文对于你练习备份及回复我想会有很多作用。我踩了不少坑。

因为实验,所以用到的证书我用自己搭建的集群(1master+2worker) master本地的证书

你最好使用切换到root用户,避免一些不必要的权限麻烦,因为开始的时候我用的非root权限,到时一些permission问题,还有出现default.etcd已经存在的各种奇怪问题。

备份:

ETCDCTL_API=3 etcdctl --endpoints=https://127.0.0.1:2379 --cacert=/etc/kubernetes/pki/etcd/ca.crt --cert=/etc/kubernetes/pki//etcd/peer.crt --key=/etc/kubernetes/pki/etcd/peer.key snapshot save  /data/etcdbackup_bak.db

此文件 /data/etcdbackup_bak.db你自己定义。

恢复,这个就比较重要了,我当时按官doc恢复后我发现我只kubectl get pods的时候是没有问题的但是当我要做delete,create操作的时候就会报Error from server: etcdserver: request timed out。然后使用命令systemctl status kubelet的时候也发现一些错误。在网上找了很多方法都不管用最后我发现下面方面可以。声明:我没有etcd集群。

在master节点上执行

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

#作用是删除静态pod,停止etcd api-server,从/etc/kubernetes/manifests下面的目录你可以看到有etcd.yaml  kube-apiserver.yaml  kube-controller-manager.yaml  kube-scheduler.yaml。其实也就符合官doc上面的操作 

2.#备份一下 etcd,其实这部操作避免恢复时候重名,但是一般不会有。
mv /var/lib/etcd /var/lib/etcd.bak 

3.恢复数据

 ETCDCTL_API=3 etcdctl --endpoints=https://127.0.0.1:2379  --cacert=/etc/kubernetes/pki/etcd/ca.crt  --cert=/etc/kubernetes/pki//etcd/peer.crt  --key=/etc/kubernetes/pki/etcd/peer.key   snapshot restore etcdbak --data-dir=/var/lib/etcd

这etcdbak是我备份的数据

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

5.验证 kubectl get nodes。 kubectl get pods。kubectl delete pods xxx。

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐