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 分钟才能启动。