配置用于灾难恢复

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

注意:

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

计划配置

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

注意:

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

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

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

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

  1. 确认主节点中的所需 worker 节点和资源在辅助节点中可用。
    这包括 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
    • 如果您使用在主要 worker 节点中手动加载的任何映像,还必须在辅助 worker 节点中手动加载这些映像。

      注意:

      提供的脚本将报告正在复制的名称空间中使用的图像。
  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 文件包含详细的恢复操作。