This documentation is for a release that is no longer maintained
See documentation for the latest supported version 3 or the latest supported version 4.3.3. 恢复到一个以前的集群状态
为了将集群还原到以前的状态,您必须已通过创建快照备份了 etcd 数据 。您将需要使用此快照来还原集群状态。
3.3.1. 恢复到一个以前的集群状态 复制链接链接已复制到粘贴板!
您可以使用已保存的 etcd 备份恢复到先前的集群状态。
先决条件
-
使用具有
cluster-admin
角色的用户访问集群。 - 具有对 master 主机的 SSH 访问权限。
包含从同一备份中获取的 etcd 快照和静态 Kubernetes API 服务器资源的备份目录。该目录中的文件名必须采用以下格式:
snapshot_<datetimestamp>.db 和
。static_
kuberesources_<datetimestamp>.tar.gz注意您必须在集群中的所有 master 主机上使用相同的 etcd 备份目录。
注意如果 etcd 备份是对 OpenShift Container Platform 4.3.0 或 4.3.1 进行的,那么它会是一个单一的文件,其中包含 etcd 快照和静态 Kubernetes API 服务器资源。
etcd-snapshot-restore.sh
可以向后兼容来接受这个单一的文件,它的格式需要是snapshot_db_kuberesources_<datetimestamp>.tar.gz
。
流程
准备集群中要还原每个 master 主机。
您应该在短时间内在所有 master 主机上运行还原脚本,以使集群成员可以大约在同时启动并形成仲裁。因此,建议为每一个 master 主机使用一个单独的终端,以便恢复脚本可以快速地在各个终端中同时运行。
将 etcd 备份目录复制到一个 master 主机上。
此流程假设您将
backup
目录(其中包含 etcd 快照和静态 Kubernetes API 服务器资源)复制到 master 主机的/home/core/
目录中。- 访问 master 主机。
将
INITIAL_CLUSTER
变量设置为以<name>=<url>
格式代表的成员列表。该变量将被传递到恢复脚本,并且对于每个成员必须完全相同。export INITIAL_CLUSTER="etcd-member-ip-10-0-143-125.ec2.internal=https://etcd-0.clustername.devcluster.openshift.com:2380,etcd-member-ip-10-0-35-108.ec2.internal=https://etcd-1.clustername.devcluster.openshift.com:2380,etcd-member-ip-10-0-10-16.ec2.internal=https://etcd-2.clustername.devcluster.openshift.com:2380"
[core@ip-10-0-143-125 ~]$ export INITIAL_CLUSTER="etcd-member-ip-10-0-143-125.ec2.internal=https://etcd-0.clustername.devcluster.openshift.com:2380,etcd-member-ip-10-0-35-108.ec2.internal=https://etcd-1.clustername.devcluster.openshift.com:2380,etcd-member-ip-10-0-10-16.ec2.internal=https://etcd-2.clustername.devcluster.openshift.com:2380"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果启用了集群范围的代理,请确定已导出了
NO_PROXY
、HTTP_PROXY
和HTTPS_PROXY
环境变量。提示您可以通过查看
oc get proxy cluster -o yaml
的输出来检查代理是否已启用。如果httpProxy
、httpsProxy
和noProxy
字段设置了值,则会启用代理。- 在其他 master 主机上重复这些步骤(每个 master 都使用一个单独的终端)。确保在每个 master 主机上使用包含相同备份文件的备份目录。
在所有 master 主机上运行恢复脚本。
在第一个 master 主机上启动
etcd-snapshot-restore.sh
脚本。传递两个参数:etcd 备份目录的路径,成员列表(由INITIAL_CLUSTER
变量定义)。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 当恢复操作开始后,在其他 master 主机上运行脚本。
验证 Machine Configs 已被使用。
在一个终端中使用
cluster-admin
用户连接到集群,运行以下命令。oc get machineconfigpool
$ oc get machineconfigpool NAME CONFIG UPDATED UPDATING master rendered-master-50e7e00374e80b767fcc922bdfbc522b True False
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 应用快照后,master 服务器的
currentConfig
将与 etcd 快照被创建时的 ID相匹配。master 的currentConfig名称格式为rendered-master-<currentConfig>
。验证所有 master 主机已启动并加入集群。
访问一个 master 主机,连接到正在运行的 etcd 容器。
[core@ip-10-0-143-125 ~] id=$(sudo crictl ps --name etcd-member | awk 'FNR==2{ print $1}') && sudo crictl exec -it $id /bin/sh
[core@ip-10-0-143-125 ~] id=$(sudo crictl ps --name etcd-member | awk 'FNR==2{ print $1}') && sudo crictl exec -it $id /bin/sh
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在 etcd 容器中,导出连接到 etcd 所需的变量。
export ETCDCTL_API=3 ETCDCTL_CACERT=/etc/ssl/etcd/ca.crt ETCDCTL_CERT=$(find /etc/ssl/ -name *peer*crt) ETCDCTL_KEY=$(find /etc/ssl/ -name *peer*key)
sh-4.3# export ETCDCTL_API=3 ETCDCTL_CACERT=/etc/ssl/etcd/ca.crt ETCDCTL_CERT=$(find /etc/ssl/ -name *peer*crt) ETCDCTL_KEY=$(find /etc/ssl/ -name *peer*key)
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在 etcd 容器中,执行
etcdctl member list
,检查三个成员的状态都为“started”。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,每个新成员最多可能需要 20 分钟才能启动。