配置以实现灾难恢复

您可以使用此解决方案手册提供的脚本在主 Kubernetes 集群中创建 YAML 快照并在另一个(辅助)Kubernetes 集群中恢复该快照。在下载和使用脚本配置 YAML 快照之前,规划配置并了解要求非常重要。

注:

此解决方案假定 Kubernetes 集群(包括控制计划和 worker 节点)都已存在。

规划配置

根据主系统在辅助系统上规划资源和配置。这些脚本要求两个 Kubernetes 集群都已存在。您必须能够使用 Kubernetes 命令行工具 kubectl 访问两个集群,才能对其运行命令。

注:

此解决方案假定 Kubernetes 集群(包括控制计划和 worker 节点)都已存在。此手册中提供的建议和脚本不会检查资源、控制层或 worker 节点配置。

下图显示了配置后,可以在完全不同的 Kubernetes 集群中还原构件快照。

后面是 kube-api-dr.png 的说明
插图 kube-api-dr.png 的说明

规划配置时,请完成 Restore 的以下要求:

  1. 确认主节点和资源在辅助节点上可用。
    这包括 pod 的共享存储挂载、负载平衡器和数据库。它还包括要恢复的名称空间使用的所有外部系统。
  2. 在运行脚本之前,手动创建所涉及的名称空间使用的必需持久性卷。

    这是缺省操作。这些脚本将创建主服务器中使用的持久性卷声明。但是,由于持久性卷可能由不同名称空间中的不同声明共享,因此自动化脚本希望您在运行 extract-apply 脚本之前在辅助群集上手动创建持久性卷。

    或者,您可以将 pv 添加到 maak8DR-apply.env 文件中的 nons_artifacts_types 变量(即使用 export nons_artifacts_types="crd clusterrole clusterrolebinding pv")。这将指示脚本在辅助卷中创建持久性卷。在第二种情况下,由您决定是否与其他持久性卷声明发生冲突。

  3. 确认辅助群集对要复制的名称空间使用的容器映像具有相应的访问权限:
    • 用于访问要复制的名称空间中存在的容器注册表的密钥由随此手册提供的脚本复制。如果注册表的凭证存储在其他名称空间中,则必须手动在辅助空间中创建这些凭证。或者,可以使用 maak8sapply: my_ns 为身份证明添加标签(其中 my_ns 是要恢复的名称空间),以便该密钥也包括在 YAML 快照中。例如,
      kubectl label secret regcredfra -n other_namespace 
      maak8sapply=namespace_being_backedup
    • 如果使用的是主工作节点中手动加载的任何映像,还必须在辅助工作节点中手动加载它们。

      注:

      提供的脚本将报告要复制的名称空间中使用的映像。
  4. 可以通过堡垒节点访问主集群和辅助集群,从而针对每个集群的 Kube API 端点运行 kubectl 操作。
    可以使用可同时使用 sshscp 的第三个节点(主节点和备用节点)并协调 DR 同步。但是,为了避免不必要的跃点和会话开销,Oracle 建议将主堡垒用作 DR 协调器。其他选项需要定制提供的脚本。
  5. 如果希望在恢复 my_ns namespace 时在辅助节点中应用备份中包含的非名称传送资源,请使用 maak8sapply: my_ns 标签。

    对于驻留在群集根目录中的构件(即,不是精确名称空间的一部分),脚本查找包含名称空间名称的 namespace:group: 字段引用。如果您需要备份中包含的任何其他非名称传送资源,则可以为其添加标签。

    例如,domains.weblogic.oracle 定制资源定义不属于任何名称空间,但您可以使用以下项将其包含在 apply 操作标签中:kubectl label crd domains.weblogic.oracle maak8sapply=opns

配置

配置 YAML 快照灾难恢复。

  1. 从“下载代码”下载所有 YAML 快照灾难恢复脚本。

    注:

    所有脚本必须位于同一路径中,因为主脚本使用其他辅助脚本。
  2. 编辑 maak8DR-apply.env 脚本并更新访问辅助系统所需的地址和 SSH 密钥。
    例如,
    export user_sec=opc
    export ssh_key_sec=/home/opc/Key.ppk
    #Secondary bastion node
    export sechost=10.10.0.23
  3. 根据需要定制 exclude_listnons_artifacts_types 的值。
    • exclude_list:这是应从备份中排除的那些名称空间的空格分隔列表,即使尝试备份所有定制名称空间也是如此。这是为了避免复制在辅助服务器上不适用的控制层相关名称空间。
    • nons_artifacts_types:这是属于根树的列表或构件(即,不是精确名称空间的一部分),但也必须包括在快照中。框架将查找对此正在备份的名称空间的引用。
    通常,可以使用文件中提供的默认值:
    #List of namespaces that will be excluded from the backup
    export exclude_list="kube-system kube-flannel kube-node-lease kube-public"
    #Root artifacts that will be included
    export nons_artifacts_types="crd clusterrole clusterrolebinding"
    
  4. 运行 maak8DR-apply.sh 脚本,以参数形式提供要复制的选定名称空间。
    • 如果不提供参数,则脚本将复制除 exclude_list 变量中提供的名称空间以外的所有名称空间。

    • 如果使用名称空间的精确列表,则必须根据与其他名称空间的依赖关系对其进行排序。

      也就是说,如果名称空间 soans 依赖于名称空间 opns 中的服务或使用这些服务,则 opns 必须首先显示在列表中。例如,运行以下命令,而不是 ./maak8DR-apply.sh soans opns

      ./maak8DR-apply.sh opns soans

验证

运行 maak8DR-apply.sh 脚本后,验证主集群中存在的所有构件是否已复制到辅助集群。查看辅助集群并验证辅助站点中的云池是否正在运行而没有错误。

运行 maak8DR-apply.sh 脚本时,框架会将 working_dir 目录创建为 /tmp/backup.date。分别运行 maak8-get-all-artifacts.shmaak8-push-all-artifacts.sh 脚本时,在每个情况下都会以命令行中的参数形式提供工作目录。

  1. 检查辅助节点的状态,直到所需的云池与主数据库中的状态匹配。
    默认情况下,云池和部署在辅助区域中启动。在恢复结束时,将显示辅助群集的状态。有些云池可能需要额外的时间才能达到“正在运行”状态。
  2. 检查主文件中的 $working_dir/date/backup-operations.log 文件,以获取提取和应用操作中的可能错误。
  3. 检查辅助服务器中的 $working_dir/restore.log$working_dir/date/restore-operations.log 文件,以获取提取和应用操作中的可能错误。
    restore-operations.log 文件包含详细的恢复操作。