6.5.3. 使用 NFS 后端部署的镜像服务


采用您使用 NFS 后端部署的 Image Service (glance)。要完成以下步骤,请确保您的环境满足以下条件:

  • Storage 网络被传播到 Red Hat OpenStack Platform (RHOSP) control plane。
  • 镜像服务可以访问存储网络,并通过端口 2049 连接到 nfs-server。

先决条件

  • 您已完成了以前的采用步骤。
  • 在源云中,验证 overcloud 用来配置镜像服务后端的 NFS 参数。具体来说,在您的director Operator heat 模板中,找到以下变量来覆盖 /usr/share/openstack-tripleo-heat-templates/environments/storage 目录中的 glance-nfs.yaml 文件提供的默认内容:

    GlanceBackend: file
    GlanceNfsEnabled: true
    GlanceNfsShare: 192.168.24.1:/var/nfs
    注意

    在本例中,GlanceBackend 变量显示镜像服务没有 NFS 后端的概念。变量使用 文件 驱动程序,并在后台使用 filesystem_store_datadirfilesystem_store_datadir 映射到 GlanceNfsShare 变量提供的导出值,而不是 /var/lib/glance/images/。如果您没有通过传播到 OpenShift (RHOSO)控制平面上的红帽 OpenStack 服务的网络导出 GlanceNfsShare,则必须停止 nfs-server 并将导出重新映射到 存储网络。在这样做前,请确保镜像服务在源 Controller 节点上停止。

    在 control plane 中,镜像服务附加到 Storage 网络,然后通过关联的 NetworkAttachmentsDefinition 自定义资源(CR)传播,生成的 pod 已具有通过此网络处理镜像服务流量的正确权限。在部署的 RHOSP control plane 中,您可以通过检查 NodeNetworkConfigPolicy (nncp)和 NetworkAttachmentDefinition (net-attach-def)来验证网络映射是否与基于 director Operator 的环境中部署的相匹配。以下是您应该在 Red Hat OpenShift Container Platform (RHOCP)环境中检查的输出示例,以确保传播网络没有问题:

    $ oc get nncp
    NAME                        STATUS      REASON
    enp6s0-crc-8cf2w-master-0   Available   SuccessfullyConfigured
    
    $ oc get net-attach-def
    NAME
    ctlplane
    internalapi
    storage
    tenant
    
    $ oc get ipaddresspool -n metallb-system
    NAME          AUTO ASSIGN   AVOID BUGGY IPS   ADDRESSES
    ctlplane      true          false             ["192.168.122.80-192.168.122.90"]
    internalapi   true          false             ["172.17.0.80-172.17.0.90"]
    storage       true          false             ["172.18.0.80-172.18.0.90"]
    tenant        true          false             ["172.19.0.80-172.19.0.90"]

流程

  1. 采用镜像服务,再创建一个新的 默认 GlanceAPI 实例,该实例与现有 NFS 共享连接:

    $ cat << EOF > glance_nfs_patch.yaml
    
    spec:
      extraMounts:
      - extraVol:
        - extraVolType: Nfs
          mounts:
          - mountPath: /var/lib/glance/images
            name: nfs
          propagation:
          - Glance
          volumes:
          - name: nfs
            nfs:
              path: <exported_path> 
    1
    
              server: <ip_address> 
    2
    
        name: r1
        region: r1
      glance:
        enabled: true
        template:
          databaseInstance: openstack
          customServiceConfig: |
            [DEFAULT]
            enabled_backends = default_backend:file
            [glance_store]
            default_backend = default_backend
            [default_backend]
            filesystem_store_datadir = /var/lib/glance/images/
          storage:
            storageRequest: 10G
          keystoneEndpoint: nfs
          glanceAPIs:
            nfs:
              replicas: 3
              type: single
              override:
                service:
                  internal:
                    metadata:
                      annotations:
                        metallb.universe.tf/address-pool: internalapi
                        metallb.universe.tf/allow-shared-ip: internalapi
                        metallb.universe.tf/loadBalancerIPs: 172.17.0.80 
    3
    
                    spec:
                      type: LoadBalancer
              networkAttachments:
              - storage
    EOF
    1
    使用 <exported_path> nfs-server 中导出的路径替换。
    2
    <ip_address > 替换为您要与 nfs-server 通信的 IP 地址。
    3
    如果使用 IPv6,请将负载均衡器 IP 更改为环境中的负载均衡器 IP,如 metallb.universe.tf/loadBalancerIPs: fd00:bbbb::80
  2. 修补 OpenStackControlPlane CR,以使用 NFS 后端部署镜像服务:

    $ oc patch openstackcontrolplane openstack --type=merge --patch-file glance_nfs_patch.yaml
  3. 修补 OpenStackControlPlane CR 以删除默认镜像服务:

    $ oc patch openstackcontrolplane openstack --type=json -p="[{'op': 'remove', 'path': '/spec/glance/template/glanceAPIs/default'}]"

验证

  • GlanceAPI 处于活跃状态时,请确认您可以看到单个 API 实例:

    $ oc get pods -l service=glance
    NAME                      READY   STATUS    RESTARTS
    glance-nfs-single-0   2/2     Running   0
    glance-nfs-single-1   2/2     Running   0
    glance-nfs-single-2   2/2     Running   0
  • 确保 pod 的描述报告以下输出:

    Mounts:
    ...
      nfs:
        Type:      NFS (an NFS mount that lasts the lifetime of a pod)
        Server:    {{ server ip address }}
        Path:      {{ nfs export path }}
        ReadOnly:  false
    ...
  • 检查指向 /var/lib/glance/images 的挂载点是否已映射到您在新的默认 GlanceAPI 实例中定义的预期 nfs 服务器 ip 和 nfs 路径

    $ oc rsh -c glance-api glance-default-single-0
    
    sh-5.1# mount
    ...
    ...
    {{ ip address }}:/var/nfs on /var/lib/glance/images type nfs4 (rw,relatime,vers=4.2,rsize=1048576,wsize=1048576,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,clientaddr=172.18.0.5,local_lock=none,addr=172.18.0.5)
    ...
    ...
  • 确认 UUID 已在 NFS 节点上的导出的目录中创建。例如:

    $ oc rsh openstackclient
    $ openstack image list
    
    sh-5.1$  curl -L -o /tmp/cirros-0.6.3-x86_64-disk.img http://download.cirros-cloud.net/0.6.3/cirros-0.6.3-x86_64-disk.img
    ...
    ...
    
    sh-5.1$ openstack image create --container-format bare --disk-format raw --file /tmp/cirros-0.6.3-x86_64-disk.img cirros
    ...
    ...
    
    sh-5.1$ openstack image list
    +--------------------------------------+--------+--------+
    | ID                                   | Name   | Status |
    +--------------------------------------+--------+--------+
    | 634482ca-4002-4a6d-b1d5-64502ad02630 | cirros | active |
    +--------------------------------------+--------+--------+
  • nfs-server 节点上,相同的 uuid 位于导出的 /var/nfs 中:

    $ ls /var/nfs/
    634482ca-4002-4a6d-b1d5-64502ad02630
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

關於紅帽

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

让开源更具包容性

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

关于红帽文档

Legal Notice

Theme

© 2026 Red Hat
返回顶部