Cloud Pak for Data 卷备份到持久卷声明或对象库

重要信息: IBM Cloud Pak® for Data 4.7 版本将于 2025 年 7 月 31 日结束支持 (EOS)。 欲了解更多信息,请参阅 IBM Cloud Pak for Data 版本 4.X 的停止服务公告

IBM Cloud Pak for Data 4.7 版本支持结束之前,升级到 IBM Software Hub 5.1 版本。 更多信息,请参阅 IBM Software Hub 版本 5.1 文档中的升级 IBM Software Hub。

您可以使用 "Cloud Pak for Data卷备份和还原实用程序,将 "IBM Cloud Pak for Data部署中的所有持久卷(PV)离线备份到单独的 "PersistentVolumeClaim(PVC)或 "S3或 "S3-compatible对象存储中。

准备工作

Cloud Pak for Data 提供了用于备份和复原 PV 的 cpd-cli backup-restore 命令行界面。

cpd-cli backup-restore命令行界面要求群集管理员或类似角色能够创建、读取、写入和删除 "Kubernetes资源,如部署、StatefulSets,cronjobs、作业、replicasets、configmaps、"secrets、pod、命名空间、持久卷索赔(PVC)和 PV。

如果 Cloud Pak for Data 安装在 NFS上,那么必须使用 no_root_squash配置 NFS 存储器。

不支持安装在 Amazon Elastic Block Store 存储类上的 Cloud Pak for Data 的卷备份。

注: 只能创建 Cloud Pak for Data 实例项目 (名称空间) 的卷备份。 无法创建 Cloud Pak for Data 基础服务或操作程序项目 (例如, Cloud Pak for Data common core services) 的卷备份。

关于本任务

cpd-cli backup-restore 命令行界面会在同一项目和安装中备份和复原卷数据,并假定 Kubernetes 对象仍然存在。

在单独的 PVC 中存储数据时,建议由远程卷支持 PVC 以确保其可用性。

要点: 仅备份持久卷不足以实现灾难恢复目的,因为需要 Kubernetes 对象 (例如 secrets ) 以及卷数据来复原项目中的应用程序。

在复原过程中,应用程序工作负载中的写操作会暂挂(停顿),这样您可以执行备份或其他维护活动。 quiesce 命令调用 Cloud Pak for Data 服务提供的挂钩以执行停顿。 与缩减项目中的所有资源相比, Cloud Pak for Data 服务提供的停顿挂钩提供了优化或其他增强功能。 服务可能会按特定的顺序停顿和取消停顿,服务也可能在不必关闭 Pod 的情况下暂挂,以减少关闭然后重新启动应用程序所花费的时间。

您可以通过两种方式备份卷:
  1. 手动缩减资源,备份卷,然后手动扩展资源。
  2. 通过单个命令自动缩减资源,备份卷,并自动扩展资源。
提示: 最好在执行备份之前手动缩减应用程序 Kubernetes 资源,以便了解 pod 的服务是否无法正确缩减。 您可以在修复发现的任何问题后接着执行备份。
最佳实践: 如果您设置环境变量,那么可以在此任务中以完全相同的方式运行命令。 有关指示信息,请参阅 设置安装环境变量

在运行此任务中的命令之前,请确保确定环境变量的来源。

有关 Cloud Pak for Data 卷备份和复原实用程序的更多信息 (包括可运行的命令列表) ,请参阅 cpd-cli backup-restore 参考文档

过程

  1. 初始化 cpd-cli backup-restore
    注: 如果 Docker 映像注册表与以下示例中显示的映像注册表不同,请更改相应的选项。

    cpd-cli backup-restore 下面的命令是一个示例,当您使用 S3 对象存储来存储备份,并且群集可以访问 icr.io/cpopen/cpd.

    # Initialize the cpdbr first with pvc name and s3 storage.  Note that the bucket must exist.
    # Example for cluster with access to ICR
    $ cpd-cli backup-restore init \
    --namespace $NAMESPACE \
    --pvc-name cpdbr-pvc \
    --image-prefix=icr.io/cpopen/cpd \
    --provider=s3 \
    --s3-endpoint="s3 endpoint" \
    --s3-bucket=cpdbr \
    --s3-prefix=$NAMESPACE/

    以下命令是在使用专用映像注册表的环境中 (例如,集群气郄时) 使用 S3 对象存储库来存储备份时初始化 cpd-cli backup-restore 的示例。

    # Example for air-gapped environment
    $ cpd-cli backup-restore init \
    --namespace $NAMESPACE \
    --pvc-name cpdbr-pvc \
    --image-prefix=${PRIVATE_REGISTRY_LOCATION}/ubi8 \
    --provider=s3 \
    --s3-endpoint="s3 endpoint" \
    --s3-bucket=cpdbr \
    --s3-prefix=$NAMESPACE/
    

    cpd-cli backup-restore 以下命令是一个示例,用于在使用单独的 PVC 存储备份且群集可访问 icr.io/cpopen/cpd.

    # Example for cluster with access to ICR
    cpd-cli backup-restore init \
    --namespace $NAMESPACE \
    --log-level=debug \
    --verbose \
    --pvc-name cpdbr-pvc \ 
    --image-prefix=icr.io/cpopen/cpd \
    --provider=local

    以下命令是在使用单独 PVC 来存储备份时初始化 cpd-cli backup-restore 的示例,例如,在使用专用映像注册表的环境中 (例如,当集群气郄时)。

    # Example for air-gapped environment
    cpd-cli backup-restore init \
    --namespace $NAMESPACE \
    --log-level=debug \
    --verbose \
    --pvc-name cpdbr-pvc \ 
    --image-prefix=${PRIVATE_REGISTRY_LOCATION}/ubi8 \
    --provider=local
  2. 创建 EDB Postgres 数据和私钥的备份。

    仅当 EDB Postgres 是嵌入式 EDB Postgres 数据库时,才会对其进行备份。

    export IMAGE_ZEN_UTILS=$(oc get cronjob zen-metastore-backup-cron-job -o=jsonpath='{.spec.jobTemplate.spec.template.spec.containers[?(@.name=="zen-metastore-backup-cron-job")].image}')
    
    cat <<EOF | oc apply -f -
    apiVersion: batch/v1
    kind: Job
    metadata:
      name: zen-edb-volumes-backup-job
      labels:
        app: 0020-zen-base
        component: zen-core-configmaps
        release: 0020-core
    spec:
      template:
        metadata:
          labels:
            app: 0020-zen-base
            component: zen-core-configmaps
            release: 0020-core
          annotations:
            productMetric: FREE
            productName: IBM Cloud Platform Common Services
            productVersion: 5.0.0
        spec:
          serviceAccountName: zen-admin-sa
          containers:
          - name: backup-metastore-edb-data
            image: $IMAGE_ZEN_UTILS
            imagePullPolicy: IfNotPresent
            resources:
              limits:
                cpu: 500m
                ephemeral-storage: 512Mi
                memory: 2Gi
              requests:
                cpu: 100m
                ephemeral-storage: 128Mi
                memory: 512Mi
            command:
            - sh
            - -ce
            - |
                bash /tmp/zen-volume-scripts/cnpsql-backup-script.sh
            envFrom:
            - configMapRef:
                name: ibm-zen-metastore-edb-cm
            - configMapRef:
                name: ibm-zen-objectstore-cm
            env:
            - name: ICPD_CONTROLPLANE_NAMESPACE
              valueFrom:
                fieldRef:
                  fieldPath: metadata.namespace
            volumeMounts:
            - mountPath: /user-home
              name: zen-objstore-local
            - name: metastore-edb-secret
              mountPath: /postgres/secrets
            - mountPath: /objectstore-backup
              name: ibm-zen-objectstore-backup-mount
              readOnly: false
            - mountPath: /tmp/zen-volume-scripts
              name: zen-volume-utils-cm
              readOnly: false
          volumes:
          - emptyDir: {}
            name: zen-objstore-local
          - name: metastore-edb-secret
            secret:
              secretName: ibm-zen-metastore-edb-secret
              defaultMode: 420
          - name: ibm-zen-objectstore-backup-mount
            persistentVolumeClaim:
              claimName: ibm-zen-objectstore-backup-pvc
          - name: zen-volume-utils-cm
            configMap:
              defaultMode: 511
              name: zen-volume-utils-cm
          restartPolicy: OnFailure
    EOF
    注: 仅当此步骤成功完成时,才继续执行下一步。
  3. 要通过手动缩减资源、备份卷并手动扩展资源来备份卷,请执行以下步骤。
    1. 手动缩减应用程序 Kubernetes 资源:
      cpd-cli backup-restore quiesce -n ${PROJECT_CPD_INST_OPERANDS}

      如果要缩减所有资源,请包含 --force 选项。

    2. 通过运行带有 --dry-run 选项的卷备份命令并指定备份名称标识来检查已完成的作业和 pod。

      --dry-run 选项用于报告仍附加到要备份的 PVC 的作业或 Pod。

      注: 备份名称标识必须由小写字母数字字符或连字符 (-) 组成,并且必须以字母数字字符开头和结尾。 不支持下划线字符 (_)。
      cpd-cli backup-restore volume-backup create <backup_name> -n ${PROJECT_CPD_INST_OPERANDS} --dry-run
    3. 如果试运行报告了引用 PVC 的已完成或失败的作业或 Pod,请将其删除。
      提示: 在手动删除作业或 pod yaml 之前,请考虑保存这些作业或 pod ,或者在备份步骤中包含 --cleanup-completed-resources 选项。
    4. 使用 --skip-quiesce 选项运行 backup 命令:
      cpd-cli backup-restore volume-backup create <backup_name> -n ${PROJECT_CPD_INST_OPERANDS} --skip-quiesce=true
      注:

      如果您运行具有相同备份名称的另一个备份作业,那么将发生增量备份。 如果指定新的备份名称,那么将发生完全卷备份。

      使用某些存储器提供者时,必须缩减 Kubernetes 资源以在创建备份之前卸装 PVC。 在此类场景中,如果 pod 正在使用已安装的 PVC 运行,那么带有 --skip-quiesce 选项的 volume-backup create 命令可能会失败。 如果发生此问题,请使用带有 --force 选项的 quiesce 命令来缩减资源,然后重新运行带有 --skip-quiesce 选项的 volume-backup create 命令。 然后,可以使用 unquiesce 命令在备份后扩展 Kubernetes 资源。

    5. 手动扩展应用程序 Kubernetes 资源:
      cpd-cli backup-restore unquiesce -n ${PROJECT_CPD_INST_OPERANDS}
  4. 要自动缩减资源,备份卷,并自动扩展资源,请执行以下步骤。
    1. 运行以下卷备份命令并指定备份名称标识。
      注: 备份名称标识必须由小写字母数字字符或连字符 (-) 组成,并且必须以字母数字字符开头和结尾。 不支持下划线字符 (_)。
      cpd-cli backup-restore volume-backup create <backup_name> -n ${PROJECT_CPD_INST_OPERANDS}
      注: 当您启动具有相同备份名称标识的新备份时,只有增量更改才会更新到此备份。
    2. 如果备份由于已完成或失败的作业或 pod 而失败,请引用 PVC,删除它们,然后重新运行备份命令。
      提示: 请考虑先保存作业或 pod yaml ,然后再手动将其删除,或者在 backup 命令中包含 --cleanup-completed-resources 选项。
    3. 如果备份由于先前的故障而未自动扩展资源,请手动扩展资源:
      cpd-cli backup-restore unquiesce -n ${PROJECT_CPD_INST_OPERANDS}
  5. 下载备份:
    cpd-cli backup-restore volume-backup download <backup_name>
  6. 要检查备份作业的状态,请运行以下命令:
    cpd-cli backup-restore volume-backup status <backup_name> -n ${PROJECT_CPD_INST_OPERANDS}
  7. 要查看现有卷备份的列表,请运行以下命令:
    cpd-cli backup-restore volume-backup list -n ${PROJECT_CPD_INST_OPERANDS}
  8. 要查看备份的大小,请运行以下命令:
    cpd-cli backup-restore volume-backup list --details -n ${PROJECT_CPD_INST_OPERANDS}
  9. 要获取卷备份的日志,请运行以下命令:
    cpd-cli backup-restore volume-backup logs <backup_name> -n ${PROJECT_CPD_INST_OPERANDS}
  10. 可选: 在卷备份完成后,通过运行以下命令来清除 cpd-cli backup-restore (删除 cpd-cli backup-restore 部署和其他元数据):
    cpd-cli backup-restore reset -n ${PROJECT_CPD_INST_OPERANDS} --force
  11. 如果在创建备份前停止了所有 Data Refinery 运行时和作业,请运行以下命令重启服务。

    <number_of_replicas> 的值取决于安装 Data Refinery 时的 scaleConfig 设置 (1 表示小型, 3 表示中型, 4 表示大型)。

    oc scale --replicas=<number_of_replicas> deploy wdp-shaper wdp-dataprep