Red Hat Training

A Red Hat training course is available for OpenShift Container Platform

3.5.2. 恢复 etcd 数据

在静态 pod 中恢复 etcd 前:

  • etcdctl 二进制文件必须可用,或者在容器化安装中,rhel7/etcd 容器必须可用。

    您可以运行以下命令,使用 etcd 软件包安装 etcdctl 二进制文件:

    # yum install etcd

    该软件包还会安装 systemd 服务。禁用并屏蔽该服务,使其在 etcd 在静态 pod 中运行时不会作为 systemd 服务运行。通过禁用并屏蔽该服务,确保您不会意外启动该服务,并防止它在重启系统时自动重启该服务。

    # systemctl disable etcd.service
    # systemctl mask etcd.service

在静态 pod 上恢复 etcd:

  1. 如果 pod 正在运行,通过将 pod 清单 YAML 文件移到另一个目录中来停止 etcd pod:

    # mkdir -p /etc/origin/node/pods-stopped
    # mv /etc/origin/node/pods/etcd.yaml /etc/origin/node/pods-stopped
  2. 移动所有旧数据:

    # mv /var/lib/etcd /var/lib/etcd.old

    您可以使用 etcdctl 在恢复 pod 的节点中重新创建数据。

  3. 将 etcd 快照恢复到 etcd pod 的挂载路径:

    # export ETCDCTL_API=3
    # etcdctl snapshot restore /etc/etcd/backup/etcd/snapshot.db \
    	 --data-dir /var/lib/etcd/ \
    	 --name ip-172-18-3-48.ec2.internal \
    	 --initial-cluster "ip-172-18-3-48.ec2.internal=https://172.18.3.48:2380" \
    	 --initial-cluster-token "etcd-cluster-1" \
    	 --initial-advertise-peer-urls https://172.18.3.48:2380 \
    	 --skip-hash-check=true

    etcd.conf 文件获取集群的适当值。

  4. 在数据目录中设置所需的权限和 selinux 上下文:

    # restorecon -RvF /var/lib/etcd/
  5. 通过将 pod 清单 YAML 文件移到所需目录中来重启 etcd pod:

    # mv /etc/origin/node/pods-stopped/etcd.yaml /etc/origin/node/pods/