一、環(huán)境準備
注:請在測試環(huán)境下驗證操作 CentOS Linux release 7.7.1908 (Core) ?3.10.0-1062.el7.x86_64?
kubeadm-1.22.3-0.x86_64
kubelet-1.22.3-0.x86_64
kubectl-1.22.3-0.x86_64
kubernetes-cni-0.8.7-0.x86_64
主機名 | IP | VIP |
k8s-master01 | 192.168.10.61 | 192.168.10.70 |
k8s-master02 | 192.168.10.62 | |
k8s-master03 | 192.168.10.63 | |
k8s-node01 | 192.168.10.64 | |
k8s-node02 | 192.168.10.65 |
二、安裝etcdctl工具
1、yum安裝
yum install -y etcd
2、或者直接下載靜態(tài)編譯的包
wget https://github.com/etcd-io/etcd/releases/download/v3.4.14/etcd-v3.4.14-linux-amd64.tar.gz
tar -zxf etcd-v3.4.14-linux-amd64.tar.gz
cd etcd-v3.4.14-linux-amd64
cp etcdctl /usr/local/bin
注:etcd最新的API版本是v3,與v2相比,v3更高效更清晰。k8s默認使用的etcd V3版本API,ectdctl默認使用V2版本API。要想使用v3,需要設(shè)置環(huán)境變量export ETCDCTL_API=3臨時更改為V3或者在?/etc/profile后在里面添加export ETCDCTL_API=3,然后執(zhí)行source /etc/profile則永久更改為V3。
echo "export ETCDCTL_API=3" >>/etc/profile
source /etc/profile
三、查看etcd節(jié)點和狀態(tài)
注:根據(jù)自已的環(huán)境指定證書路徑
1、查看etcd節(jié)點
etcdctl --cacert=/etc/kubernetes/pki/etcd/ca.crt --cert=/etc/kubernetes/pki/etcd/peer.crt --key=/etc/kubernetes/pki/etcd/peer.key --write-out=table --endpoints=192.168.10.61:2379,192.168.10.63:2379,192.168.10.62:2379 member list
+------------------+---------+--------------+----------------------------+----------------------------+------------+
| ID | STATUS | NAME | PEER ADDRS | CLIENT ADDRS | IS LEARNER |
+------------------+---------+--------------+----------------------------+----------------------------+------------+
| 3c3f0bd3bdd4ab17 | started | k8s-master01 | https://192.168.10.61:2380 | https://192.168.10.61:2379 | false |
| 8f9d6f521fe8bcf3 | started | k8s-master03 | https://192.168.10.63:2380 | https://192.168.10.63:2379 | false |
| c23c5081dc6638ca | started | k8s-master02 | https://192.168.10.62:2380 | https://192.168.10.62:2379 | false |
+------------------+---------+--------------+----------------------------+----------------------------+------------+
2、查看etcd節(jié)點狀態(tài)
etcdctl --cacert=/etc/kubernetes/pki/etcd/ca.crt --cert=/etc/kubernetes/pki/etcd/peer.crt --key=/etc/kubernetes/pki/etcd/peer.key --write-out=table --endpoints=192.168.10.61:2379,192.168.10.63:2379,192.168.10.62:2379 endpoint status
+--------------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+
| ENDPOINT | ID | VERSION | DB SIZE | IS LEADER | IS LEARNER | RAFT TERM | RAFT INDEX | RAFT APPLIED INDEX | ERRORS |
+--------------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+
| 192.168.10.61:2379 | 3c3f0bd3bdd4ab17 | 3.5.6 | 4.4 MB | false | false | 4 | 892897 | 892897 | |
| 192.168.10.63:2379 | 8f9d6f521fe8bcf3 | 3.5.6 | 4.4 MB | false | false | 4 | 892897 | 892897 | |
| 192.168.10.62:2379 | c23c5081dc6638ca | 3.5.6 | 4.4 MB | true | false | 4 | 892897 | 892897 | |
+--------------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+
四、備份etcd數(shù)據(jù)
1、新建驗證數(shù)據(jù)
?注:為了驗證恢復(fù)數(shù)據(jù)是否正確,可以在備份之前新建一個namespace
kubectl create ns test-ns
#查看新建的ns
# kubectl get ns
NAME STATUS AGE
default Active 151d
ingress-nginx Active 151d
kube-node-lease Active 151d
kube-public Active 151d
kube-system Active 151d
kubernetes-dashboard Active 151d
test-ns Active 47s
2、備份
注:備份只需要找其中一個master節(jié)點的etcd進行備份就可以。
etcdctl --cacert=/etc/kubernetes/pki/etcd/ca.crt --cert=/etc/kubernetes/pki/etcd/peer.crt --key=/etc/kubernetes/pki/etcd/peer.key --write-out=table --endpoints=192.168.10.61:2379 snapshot save /opt/etcd-snapshot.db
3、備份完后,再刪除新建的ns
kubectl delete ns test-ns
五、恢復(fù)etcd數(shù)據(jù)
注:k8s集群中如果有多個etcd組成的集群,那么每個etcd都需要進行獨立恢復(fù)
#在恢復(fù)前需要把每個節(jié)點的master上的服務(wù)先停掉,以免有新的數(shù)據(jù)寫入,并且要把默認的etcd數(shù)據(jù)目錄改名
mv /etc/kubernetes/manifests/ /etc/kubernetes/manifests.bak
mv /var/lib/etcd /var/lib/etcd.bak
#以下證書和key、name等相關(guān)信息可以在?/etc/kubernetes/manifests/etcd.yaml查到
- --advertise-client-urls=https://192.168.10.61:2379
- --cert-file=/etc/kubernetes/pki/etcd/server.crt
- --client-cert-auth=true
- --data-dir=/var/lib/etcd
- --experimental-initial-corrupt-check=true
- --initial-advertise-peer-urls=https://192.168.10.61:2380
- --initial-cluster=k8s-master01=https://192.168.10.61:2380
- --key-file=/etc/kubernetes/pki/etcd/server.key
- --listen-client-urls=https://127.0.0.1:2379,https://192.168.10.61:2379
- --listen-metrics-urls=http://127.0.0.1:2381
- --listen-peer-urls=https://192.168.10.61:2380
- --name=k8s-master01
- --peer-cert-file=/etc/kubernetes/pki/etcd/peer.crt
- --peer-client-cert-auth=true
- --peer-key-file=/etc/kubernetes/pki/etcd/peer.key
- --peer-trusted-ca-file=/etc/kubernetes/pki/etcd/ca.crt
- --snapshot-count=10000
- --trusted-ca-file=/etc/kubernetes/pki/etcd/ca.crt
1、恢復(fù)k8s-master01的etcd數(shù)據(jù)
#首先停掉服務(wù)
mv /etc/kubernetes/manifests/ /etc/kubernetes/manifests.bak
mv /var/lib/etcd /var/lib/etcd.bak
#恢復(fù)數(shù)據(jù),要把上面?zhèn)浞莸膃tcd數(shù)據(jù)分別上傳到另外2臺
etcdctl snapshot restore /opt/etcd-snapshot.db --cacert=/etc/kubernetes/pki/etcd/ca.crt --cert=/etc/kubernetes/pki/etcd/peer.crt --key=/etc/kubernetes/pki/etcd/peer.key --name k8s-master01 --initial-cluster "k8s-master02=https://192.168.10.62:2380,k8s-master01=https://192.168.10.61:2380,k8s-master03=https://192.168.10.63:2380" --initial-advertise-peer-urls https://192.168.10.61:2380 --data-dir=/var/lib/etcd
2、恢復(fù)k8s-master02的etcd數(shù)據(jù)
#首先停掉服務(wù)
mv /etc/kubernetes/manifests/ /etc/kubernetes/manifests.bak
mv /var/lib/etcd /var/lib/etcd.bak
#恢復(fù)數(shù)據(jù)文章來源:http://www.zghlxwxcb.cn/news/detail-644088.html
etcdctl snapshot restore /opt/etcd-snapshot.db --cacert=/etc/kubernetes/pki/etcd/ca.crt --cert=/etc/kubernetes/pki/etcd/peer.crt --key=/etc/kubernetes/pki/etcd/peer.key --name k8s-master02 --initial-cluster "k8s-master02=https://192.168.10.62:2380,k8s-master01=https://192.168.10.61:2380,k8s-master03=https://192.168.10.63:2380" --initial-advertise-peer-urls https://192.168.10.62:2380 --data-dir=/var/lib/etcd
?3、恢復(fù)k8s-master03的etcd數(shù)據(jù)
#首先停掉服務(wù)
mv /etc/kubernetes/manifests/ /etc/kubernetes/manifests.bak
mv /var/lib/etcd /var/lib/etcd.bak
#恢復(fù)數(shù)據(jù)
etcdctl snapshot restore /opt/etcd-snapshot.db --cacert=/etc/kubernetes/pki/etcd/ca.crt --cert=/etc/kubernetes/pki/etcd/peer.crt --key=/etc/kubernetes/pki/etcd/peer.key --name k8s-master03 --initial-cluster "k8s-master02=https://192.168.10.62:2380,k8s-master01=https://192.168.10.61:2380,k8s-master03=https://192.168.10.63:2380" --initial-advertise-peer-urls https://192.168.10.63:2380 --data-dir=/var/lib/etcd
4、恢復(fù)服務(wù),3臺master都需要操作
注:每個執(zhí)行恢復(fù)數(shù)據(jù)操作后,都會新生成/var/lib/etcd數(shù)據(jù)目錄文章來源地址http://www.zghlxwxcb.cn/news/detail-644088.html
mv /etc/kubernetes/manifests.bak /etc/kubernetes/manifests
5、查看數(shù)據(jù)是否恢復(fù)
# kubectl get ns
NAME STATUS AGE
default Active 151d
ingress-nginx Active 151d
kube-node-lease Active 151d
kube-public Active 151d
kube-system Active 151d
kubernetes-dashboard Active 151d
test-ns Active 47s
到了這里,關(guān)于k8s-1.22.3集群etcd備份與恢復(fù)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!