Kubernetes主節點災備恢復的相關步驟,供在發生k8s master崩潰時操做(前提條件:使用kubeadm安裝方式安裝)
一,Etcd數據備份及恢復
單節點:
單節點基於文件備份便可,使用kubeadm安裝,etcd存儲於/var/lib/etcd目錄。
備份:node
cp -r /var/lib/etcd /bakup/ETCD$DATE
恢復:
若是etcd的pod 正在運行當中首先要中止ETCD(中止方式能夠修改etcdyaml文件的版本號,使用kubeadm安裝的etcdpei配置文件在/etc/kubernetes/manifests目錄下的etcd.yaml 修改images版本號而後拷貝還原改回image的版本號etcd 恢復啓動linux
vim /etc/kubernetes/manifests/etcd.yaml #修改版本號中止 mv /var/lib/etcd /tmp/ #轉移備份原來的etcd cp -r /backup/etcd /var/lib/etcd vim /etc/kubernetes/manifests/etcd.yaml # 還原版本號啓動
一(1),集羣恢復(使用etcdctl工具恢復) 待測試 同理須要先中止etcd 附管理指南:http://sealyun.com/post/etcd-manage/
etcdctl 工具安裝git
curl -L https://github.com/coreos/etcd/releases/download/v3.3.2/etcd-v3.3.2-linux-amd64.tar.gz -o etcd-v3.3.2-linux-amd64.tar.gz tar zxf etcd-v3.3.2-linux-amd64.tar.gz mv etcd-v3.3.2-linux-amd64/etcd* /usr/local/bin/
k8s會使用etcd v3版本的API記錄數據。而默認etcdctl是使用v2版本的API,查看不到v3的數據。設置環境變量ETCDCTL_API=3
備份:(基於證書的備份)github
ETCDCTL_API=3 etcdctl --cacert=/etc/kubernetes/pki/etcd/ca.crt --cert=/etc/kubernetes/pki/etcd/peer.crt --key=/etc/kubernetes/pki/etcd/peer.key --endpoints=https://127.0.0.1:2379 snapshot save snapshot.db
恢復:vim
二:Master節點控制組件的備份及恢復
master主節點 恢復 前提條件:待恢復的機器上,機器名稱和ip地址須要與崩潰前的主節點配置徹底同樣
使用kubeadm安裝
備份:
1,/etc/kubernetes/目錄下的全部文件(證書,manifest文件)bash
2,用戶主目錄下.kube/config文件(kubectl鏈接認證)curl
3,/var/lib/kubelet/目錄下全部文件(plugins容器鏈接認證)
恢復:
移除或者備份原有數據附清理腳本(慎用)ide
#!/bin/bash kubeadm reset kubeadm reset -f rm -rf ~/.kube/ rm -rf /etc/kubernetes/ rm -rf /etc/systemd/system/kubelet.service.d rm -rf /etc/systemd/system/kubelet.service rm -rf /usr/bin/kube* rm -rf /etc/cni rm -rf /opt/cni rm -rf /var/lib/etcd rm -rf /var/etcd
將備份的文件拷貝回原路徑(注意路徑不能拷貝錯誤)
主要幾個路徑以下:工具
/var/lib/etcd/ /etc/kubernetes/ /var/lib/kubelet/ /var/etcd/ #calico的etcd數據 /root/.kube/config
而後 從新初始化安裝 kubeadm initpost
kubeadm init --config ../conf/kubeadm.yaml --ignore-preflight-errors=all(注意這個選項比較重要,忽略錯誤,若是不帶的話 會提示那些目錄裏面 有數據) node節點從新:kebeadm join