hello云胜

技术与生活

0%

ETCD备份与恢复

kubenenetes ETCD备份及恢复

对于kubernetes etcd的备份与恢复,总的流程是不变的,对于不同的部署方式,操作上可能略有同。流程如下:

  1. 备份etcd
  2. 停止kube-apiserver
  3. 停止etcd
  4. 恢复etcd
  5. 启动etcd
  6. 启动kube-apiserver
  7. 检查资源状态

使用kubesphere kk工具部署的kubernetes和使用sealos部署的kubernetes在etcd的部署上面略有不同,endpoint、证书位置等参数不同。kk部署的etcd,这些环境变量都存在/etc/etcd.env中。sealos部署的etcd,需要用户去/etc/kubernetes/manifest/etcd.yml查找相关配置。

备份etcd

在任意一台master上执行即可

1
2
3
4
5
etcdctl --endpoints=1x.xxx.5.148:2379 \
--cacert=/etc/kubernetes/pki/etcd/ca.crt \
--cert=/etc/kubernetes/pki/etcd/server.crt \
--key=/etc/kubernetes/pki/etcd/server.key \
snapshot save /tmp/etcd.db

恢复etcd

停止apiserver服务

此操作需要在所有master上执行。

kube-apiserver的启动方式是静态pod,所以只需将kube-apiserver的yml文件移除/etc/kubernetes/manifests,kubelete就会自动删除kube-apiserver的docker 容器。

1
2
3
4
mkdir /etc/kubernetes/manifests.bak
mv /etc/kubernetes/manifests/kube-apiserver.yaml /etc/kubernetes/manifests.bak
#检查apiserver是否已经停止,返回为0则证明服务停止
ps -ef|grep kube-api|grep -v grep |wc -l0

停止etcd服务

此操作需要在所有master上执行

1
systemctl stop etcd

恢复etcd数据

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#拷贝备份数据到另外两台master
scp /tmp/etcd.db master-02:/tmp.db
scp /tmp/etcd.db master-03:/tmp.db
#在每台master上分别执行以下命令
#移走原来的etcd数据
mv /var/lib/etcd /var/lib/etcd.bac
#执行恢复操作
etcdctl snapshot restore /tmp/etcd.db --endpoints=$ETCD_ADVERTISE_CLIENT_URLS \ --name=$ETCD_NAME \
--cacert=$ETCD_TRUSTED_CA_FILE \
--key=$ETCD_KEY_FILE \
--cert=$ETCD_CERT_FILE \
--initial-advertise-peer-urls=$ETCD_INITIAL_ADVERTISE_PEER_URLS \
--initial-cluster-token=$ETCD_INITIAL_CLUSTER_TOKEN \
--initial-cluster=$ETCD_INITIAL_CLUSTER \
--data-dir=$ETCD_DATA_DIR

启动etcd

每台master执行

1
systemctl start etcd

启动kube-apiserver

每台master执行

1
2
3
mv /etc/kubernetes/manifests.bac/kube-apiserver.yaml /etc/kubernetes/manifests
#检查kube-apiserver服务是否启动
ps -ef|grep kube-api|grep -v grep

(93条消息) Kubernetes生产实践系列之七:通过etcd备份和恢复Kubernetes集群状态_cloudvtech的博客-CSDN博客