1.7. 迁移 OVN 数据


本文档论述了如何将 OVN 北向和南向数据库从原始 OpenStack 部署移到 OpenShift 集群中运行的 ovsdb-server 实例。

1.7.1. rationale

虽然可能会说,podified Neutron ML2/OVN 驱动程序和 OVN northd 服务会在启动时重建数据库,但重建可能会非常耗时。以下流程允许加快数据迁移,避免因 OpenFlow 表内容不完整而造成不必要的数据平面中断。

1.7.2. 先决条件

  • 确保前面的 Adoption 步骤已成功执行。

    • 此时必须已创建了 OpenStackControlPlane 资源。
    • 原始集群的 NetworkAttachmentDefinition CRD 已被定义。具体来说,定义了 openstack/internalapi 网络。
    • Poded MariaDB 和 RabbitMQ 可能已在运行。Neutron 和 OVN 尚未运行。
    • 原始 OVN 旧或等于 poded 版本。
    • 原始 Neutron 服务器和 OVN 北北服务已停止。
    • 之间必须有网络路由:

      • 采用主机和原始 OVN。
      • 采用主机和容器集化 OVN。

1.7.3. 变量

定义以下步骤中使用的 shell 变量。这些值只是说明,使用适合您环境的值:

STORAGE_CLASS_NAME=crc-csi-hostpath-provisioner
OVSDB_IMAGE=registry.redhat.io/rhosp-dev-preview/openstack-ovn-base-rhel9:18.0
SOURCE_OVSDB_IP=172.17.1.49

SOURCE_OVSDB_IP 的实际值可以从 puppet 生成的配置中获取:

grep -rI 'ovn_[ns]b_conn' /var/lib/config-data/puppet-generated/

1.7.4. 流程

  • 准备 OVN DB 复制目录和采用帮助程序 pod (选择存储请求以适合 OVN 数据库大小)
oc apply -f - <<EOF
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: ovn-data
spec:
  storageClassName: $STORAGE_CLASS_NAME
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 10Gi
---
apiVersion: v1
kind: Pod
metadata:
  name: ovn-copy-data
  annotations:
    openshift.io/scc: anyuid
  labels:
    app: adoption
spec:
  containers:
  - image: $OVSDB_IMAGE
    command: [ "sh", "-c", "sleep infinity"]
    name: adoption
    volumeMounts:
    - mountPath: /backup
      name: ovn-data
  securityContext:
    allowPrivilegeEscalation: false
    capabilities:
      drop: ALL
    runAsNonRoot: true
    seccompProfile:
      type: RuntimeDefault
  volumes:
  - name: ovn-data
    persistentVolumeClaim:
      claimName: ovn-data
EOF
  • 等待 pod 上线
oc wait --for=condition=Ready pod/ovn-copy-data --timeout=30s
  • 备份 OVN 数据库。
oc exec ovn-copy-data -- bash -c "ovsdb-client backup tcp:$SOURCE_OVSDB_IP:6641 > /backup/ovs-nb.db"
oc exec ovn-copy-data -- bash -c "ovsdb-client backup tcp:$SOURCE_OVSDB_IP:6642 > /backup/ovs-sb.db"
  • 在导入前启动 pod 指定的 OVN 数据库服务。
oc patch openstackcontrolplane openstack --type=merge --patch '
spec:
  ovn:
    enabled: true
    template:
      ovnDBCluster:
        ovndbcluster-nb:
          dbType: NB
          storageRequest: 10G
          networkAttachment: internalapi
        ovndbcluster-sb:
          dbType: SB
          storageRequest: 10G
          networkAttachment: internalapi
'
  • 等待 OVN DB pod 进入 running 阶段。
oc wait --for=jsonpath='{.status.phase}'=Running pod --selector=service=ovsdbserver-nb
oc wait --for=jsonpath='{.status.phase}'=Running pod --selector=service=ovsdbserver-sb
  • 在 clusterIP 服务网络上获取 pod 指定的 OVN IP 地址。
PODIFIED_OVSDB_NB_IP=$(oc get svc --selector "statefulset.kubernetes.io/pod-name=ovsdbserver-nb-0" -ojsonpath='{.items[0].spec.clusterIP}')
PODIFIED_OVSDB_SB_IP=$(oc get svc --selector "statefulset.kubernetes.io/pod-name=ovsdbserver-sb-0" -ojsonpath='{.items[0].spec.clusterIP}')
  • 为备份文件升级数据库架构。
oc exec ovn-copy-data -- bash -c "ovsdb-client get-schema tcp:$PODIFIED_OVSDB_NB_IP:6641 > /backup/ovs-nb.ovsschema && ovsdb-tool convert /backup/ovs-nb.db /backup/ovs-nb.ovsschema"
oc exec ovn-copy-data -- bash -c "ovsdb-client get-schema tcp:$PODIFIED_OVSDB_SB_IP:6642 > /backup/ovs-sb.ovsschema && ovsdb-tool convert /backup/ovs-sb.db /backup/ovs-sb.ovsschema"
  • 将数据库备份恢复到 pod 指定的 OVN 数据库服务器。
oc exec ovn-copy-data -- bash -c "ovsdb-client restore tcp:$PODIFIED_OVSDB_NB_IP:6641 < /backup/ovs-nb.db"
oc exec ovn-copy-data -- bash -c "ovsdb-client restore tcp:$PODIFIED_OVSDB_SB_IP:6642 < /backup/ovs-sb.db"
  • 检查 pod 指定的 OVN 数据库是否包含来自备份的对象,例如:
oc exec -it ovsdbserver-nb-0 -- ovn-nbctl show
oc exec -it ovsdbserver-sb-0 -- ovn-sbctl list Chassis
  • 最后,您可以启动 ovn-northd 服务,该服务会将 OVN 北向和南向数据库保持同步。
oc patch openstackcontrolplane openstack --type=merge --patch '
spec:
  ovn:
    enabled: true
    template:
      ovnNorthd:
        networkAttachment: internalapi
'
  • 使用 OVN 数据库备份删除 ovn-data pod 和持久性卷声明(在删除前进行快照)
oc delete pod ovn-copy-data
oc delete pvc ovn-data
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2026 Red Hat
返回顶部