如何在CoreOS上的docker镜像中从快照恢复etcd群集?

问题描述 投票:2回答:2

我在vmware上有一个带有3个节点etcd集群(etcd版本3.1.5)的Kubernetes集群(v1.5.6)。这个etcd节点在vmware上的coreos上的三个docker容器(在三个主机上)上运行。

我尝试使用以下解决方案备份etcd:

docker run --rm --net=host -v /tmp:/etcd_backup -e ETCDCTL_API=3 quay.io/coreos/etcd:v3.1.5 etcdctl --endpoints=[1.1.1.1:2379,2.2.2.2:2379,3.3.3.3:2379] snapshot save etcd_backup/snapshot.db

备份已成功完成。

我想在另一个vmware环境中从零创建这个kubernetes集群,但我需要从快照恢复etcd。

到目前为止,我还没有找到适合在docker容器中使用etcd的解决方案。

我尝试使用以下方法恢复,但不幸的是我没有成功。

首先,我在运行以下命令后创建了一个新的etcd节点:

docker run --rm --net=host -v /tmp/etcd_bak:/etcd_backup -e ETCDCTL_API=3 registry:5000/quay.io/coreos/etcd:v3.1.5 etcdctl snapshot restore etcd_backup/snapshot.db --name etcd0 --initial-cluster etcd0=http://etcd0:2380,etcd1=http://etcd1:2380,etcd2=http://etcd2:2380 --initial-cluster-token etcd-cluster-1 --initial-advertise-peer-urls http://etcd0:2380

结果:

2018-06-04 09:25:52.314747 I | etcdserver/membership: added member 7ff5c9c6942f82e [http://etcd0:2380] to cluster 5d1b637f4b7740d5
2018-06-04 09:25:52.314940 I | etcdserver/membership: added member 91b417e7701c2eeb [http://etcd2:2380] to cluster 5d1b637f4b7740d5
2018-06-04 09:25:52.315096 I | etcdserver/membership: added member faeb78734ee4a93d [http://etcd1:2380] to cluster 5d1b637f4b7740d5

不幸的是,没有任何事

恢复etcd备份的好方法是什么?

如何创建空的etcd集群/节点以及如何恢复快照?

docker kubernetes coreos etcd
2个回答
4
投票

根据Etcd Disaster Recovery文档,您需要使用像您这样的命令从快照恢复所有三个etcd节点,然后使用如下命令运行三个节点:

etcd \
  --name m1 \
  --listen-client-urls http://host1:2379 \
  --advertise-client-urls http://host1:2379 \
  --listen-peer-urls http://host1:2380 &

此外,您可以从图像中提取etcdctl,如下所示:

docker run --rm -v /opt/bin:/opt/bin registry:5000/quay.io/coreos/etcd:v3.1.5 cp /usr/local/bin/etcdctl /opt/bin

然后使用etcdctl恢复快照:

# ETCDCTL_API=3 ./etcdctl snapshot restore snapshot.db \
  --name m1 \
  --initial-cluster m1=http://host1:2380,m2=http://host2:2380,m3=http://host3:2380 \
  --initial-cluster-token etcd-cluster-1 \
  --initial-advertise-peer-urls http://host1:2380 \
  --data-dir /var/lib/etcd

这会将快照还原到/ var / lib / etcd目录。然后使用docker启动etcd,不要忘记将mount / var / lib / etcd放入容器中,并为其指定--data-dir。


2
投票

Kubernetes中的Ectd运行在Docker容器中,这是我为恢复集群所做的工作:

  • 检索Etcd集群元数据 qazxsw poi 你有类似下面的东西: qazxsw poi
  • 将etcd snapshotdb复制到其他etcd节点 docker inspect etcd1
  • 使用原始信息重建新群集 "Binds": [ "/etc/ssl/certs:/etc/ssl/certs:ro", "/etc/ssl/etcd/ssl:/etc/ssl/etcd/ssl:ro", "/var/lib/etcd:/var/lib/etcd:rw" ], ... "Env": [ "ETCD_DATA_DIR=/var/lib/etcd", "ETCD_ADVERTISE_CLIENT_URLS=https://172.16.60.1:2379", "ETCD_INITIAL_ADVERTISE_PEER_URLS=https://172.16.60.1:2380", "ETCD_INITIAL_CLUSTER_STATE=existing", "ETCD_METRICS=basic", "ETCD_LISTEN_CLIENT_URLS=https://172.16.60.1:2379,https://127.0.0.1:2379", "ETCD_ELECTION_TIMEOUT=5000", "ETCD_HEARTBEAT_INTERVAL=250", "ETCD_INITIAL_CLUSTER_TOKEN=k8s_etcd", "ETCD_LISTEN_PEER_URLS=https://172.16.60.1:2380", "ETCD_NAME=etcd1", "ETCD_PROXY=off", "ETCD_INITIAL_CLUSTER=etcd1=https://172.16.60.1:2380,etcd2=https://172.16.60.2:2380,etcd3=https://172.16.60.2:2380", "ETCD_AUTO_COMPACTION_RETENTION=8", "ETCD_TRUSTED_CA_FILE=/etc/ssl/etcd/ssl/ca.pem", "ETCD_CERT_FILE=/etc/ssl/etcd/ssl/member-node01.pem", "ETCD_KEY_FILE=/etc/ssl/etcd/ssl/member-node01-key.pem", "ETCD_PEER_TRUSTED_CA_FILE=/etc/ssl/etcd/ssl/ca.pem", "ETCD_PEER_CERT_FILE=/etc/ssl/etcd/ssl/member-node01.pem", "ETCD_PEER_KEY_FILE=/etc/ssl/etcd/ssl/member-node01-key.pem", "ETCD_PEER_CLIENT_CERT_AUTH=true", "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" ], "Cmd": [ "/usr/local/bin/etcd" ],
  • 启动容器并检查群集状态 scp snapshotdb_20180913 node02:/root/ scp snapshotdb_20180913 node03:/root/
© www.soinside.com 2019 - 2024. All rights reserved.