5.4. etcd 任务


5.4.1. etcd 备份

etcd 是所有对象定义的键值存储,以及持久 master 状态。其他组件会监视更改,然后进入所需的状态。

3.5 之前的 OpenShift Container Platform 版本使用 etcd 版本 2(v2),而 3.5 及更新版本使用版本 3(v3)。两个版本的 etcd 之间的数据模型不同。etcd v3 可以使用 v2 和 v3 数据模型,而 etcd v2 只能使用 v2 数据模型。在 etcd v3 服务器中,v2 和 v3 数据存储可以并行存在,并相互独立。

对于 v2 和 v3 操作,您可以使用 ETCDCTL_API 环境变量来使用正确的 API:

$ etcdctl -v
etcdctl version: 3.2.28
API version: 2

$ ETCDCTL_API=3 etcdctl version
etcdctl version: 3.2.28
API version: 3.2

如需有关如何迁移到 v3 的信息,请参阅 OpenShift Container Platform 3.7 文档中的迁移 etcd 数据(v2 到 v3)部分

在 OpenShift Container Platform 版本 3.10 及更新版本中,您可以在单独的主机上安装 etcd,或作为静态 pod 在 master 主机上运行。如果没有指定独立的 etcd 主机,etcd 会作为静态 pod 在 master 主机上运行。因此,如果您使用静态 pod,备份过程会有所不同。

etcd 备份过程由两个不同的步骤组成:

  • 配置备份:包含所需的 etcd 配置和证书
  • 数据备份:包含 v2 和 v3 数据模型。

您可以在任何已连接到 etcd 集群的主机上执行数据备份过程,其中提供了正确的证书,以及安装 etcdctl 工具的位置。

注意

备份文件必须复制到外部系统,最好在 OpenShift Container Platform 环境之外,然后进行加密。

请注意,etcd 备份仍具有当前存储卷的所有引用。恢复 etcd 时,OpenShift Container Platform 开始在节点上启动以前的 pod 并重新连接相同的存储。此过程与从集群中删除节点的过程不同,并在其位置添加一个新节点。附加到该节点的任何节点上的任何节点都会重新附加到 pod。

5.4.1.1. 备份 etcd

当备份 etcd 时,您必须备份 etcd 配置文件和 etcd 数据。

5.4.1.1.1. 备份 etcd 配置文件

要保留的 etcd 配置文件都存储在运行 etcd 的实例的 /etc/etcd 目录中。这包括 etcd 配置文件(/etc/etcd/etcd.conf)和集群通信所需的证书。所有这些文件都是在安装时由 Ansible 安装程序生成的。

流程

对于集群的每个 etcd 成员,备份 etcd 配置。

$ ssh master-0 1
# mkdir -p /backup/etcd-config-$(date +%Y%m%d)/
# cp -R /etc/etcd/ /backup/etcd-config-$(date +%Y%m%d)/
1
master-0 替换为 etcd 成员的名称。
注意

每个 etcd 集群成员上的证书和配置文件是唯一的。

5.4.1.1.2. 备份 etcd 数据
先决条件
注意

OpenShift Container Platform 安装程序创建别名,以避免为 etcd v2 任务输入名为 etcdctl2 的所有标志,以及用于 etcd v3 任务的 etcdctl3

但是,etcdctl3 别名不会向 etcdctl 命令提供完整的端点列表,因此您必须指定 --endpoints 选项并列出所有端点。

备份 etcd 之前:

  • etcdctl 二进制文件必须可用,或者在容器化安装中,rhel7/etcd 容器必须可用。
  • 确保 OpenShift Container Platform API 服务正在运行。
  • 确保与 etcd 集群的连接(端口 2379/tcp)。
  • 确保正确的证书以连接到 etcd 集群。
流程
注意

虽然 etcdctl backup 命令用于执行备份,etcd v3 没有 备份 的概念。您可以使用 etcdctl snapshot save 命令对一个实时成员进行快照,或从 etcd 数据目录中复制 member/snap/db 文件。

etcdctl backup 命令重写了备份中所含的一些元数据,特别是节点 ID 和集群 ID,这意味着在备份中,节点会丢失它的以前的身份。要从备份重新创建集群,您可以创建一个新的单节点集群,然后将其他节点的其余部分添加到集群中。元数据被重写以防止新节点加入现有集群。

备份 etcd 数据:

重要

从以前的 OpenShift Container Platform 版本升级的集群可能包含 v2 数据存储。备份所有 etcd 数据存储。

  1. 从静态 pod 清单获取 etcd 端点 IP 地址:

    $ export ETCD_POD_MANIFEST="/etc/origin/node/pods/etcd.yaml"
    $ export ETCD_EP=$(grep https ${ETCD_POD_MANIFEST} | cut -d '/' -f3)
  2. 以管理员身份登录:

    $ oc login -u system:admin
  3. 获取 etcd pod 名称:

    $ export ETCD_POD=$(oc get pods -n kube-system | grep -o -m 1 '^master-etcd\S*')
  4. 进入 kube-system 项目:

    $ oc project kube-system
  5. 在 pod 中生成 etcd 数据快照并将其保存在本地:

    $ oc exec ${ETCD_POD} -c etcd -- /bin/bash -c "ETCDCTL_API=3 etcdctl \
        --cert /etc/etcd/peer.crt \
        --key /etc/etcd/peer.key \
        --cacert /etc/etcd/ca.crt \
        --endpoints $ETCD_EP \
        snapshot save /var/lib/etcd/snapshot.db" 1
    1
    您必须将快照写入 /var/lib/etcd/ 下的目录中。
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.