1.8. 使用镜像服务 API 启用稀疏镜像上传

使用镜像服务(glance) API,您可以使用稀疏镜像上传来减少网络流量并节省存储空间。此功能在分布式 Compute 节点 (DCN) 环境中特别有用。使用稀疏镜像文件,镜像服务不会写入空字节序列。镜像服务使用给定偏移写入数据。存储后端将这些偏移解释为不实际消耗存储空间的空字节。

使用镜像服务命令行客户端进行镜像管理。

限制

  • 仅 Ceph RADOS 块设备(RBD)支持稀疏镜像上传。
  • 文件系统不支持稀疏镜像上传。
  • 在客户端与镜像服务 API 之间的传输过程中,不会维护稀疏性。镜像在镜像服务 API 一级进行稀疏。

先决条件

  • 您的 Red Hat OpenStack Platform (RHOSP)部署将 RBD 用于镜像服务后端。

流程

  1. stack 用户身份登录 undercloud 节点。
  2. 查找 stackrc 凭证文件:

    $ source stackrc
  3. 使用以下内容创建环境文件:

    parameter_defaults:
        GlanceSparseUploadEnabled: true
  4. 使用其他环境文件将新的环境文件添加到堆栈中,并部署 overcloud:

    $ openstack overcloud deploy \
        --templates \
        …
        -e <existing_overcloud_environment_files> \
        -e <new_environment_file>.yaml \
        ...

有关上传镜像的更多信息,请参阅 上传镜像

验证

您可以导入镜像并检查其大小以验证稀疏镜像上传。

以下流程使用示例命令。适当地将值替换为您环境中的这些值。

  1. 在本地下载镜像文件:

    $ wget <file_location>/<file_name>
    • <file_location > 替换为文件的位置。
    • <file_name > 替换为文件的名称。

      例如:

      $ wget https://cloud.centos.org/centos/6/images/CentOS-6-x86_64-GenericCloud-1508.qcow2
  2. 检查磁盘大小以及要上传的镜像的虚拟大小:

    $ qemu-img info <file_name>

    例如:

    $ qemu-img info CentOS-6-x86_64-GenericCloud-1508.qcow2
    
    image: CentOS-6-x86_64-GenericCloud-1508.qcow2
    file format: qcow2
    virtual size: 8 GiB (8589934592 bytes)
    disk size: 1.09 GiB
    cluster_size: 65536
    Format specific information:
    compat: 0.10
    refcount bits: 1
  3. 导入镜像:

    $ glance image-create-via-import --disk-format qcow2 --container-format bare --name centos_1 --file <file_name>
  4. 记录镜像 ID。后续步骤中需要用到它。
  5. 验证镜像是否已导入并处于 active 状态:

    $ glance image show <image_id>
  6. 在 Ceph Storage 节点上,验证镜像的大小是否小于第 1 步中的虚拟大小:

    $ sudo rbd -p images diff <image_id> | awk '{ SUM += $2 } END { print SUM/1024/1024/1024 " GB" }'
    
    1.03906 GB
  7. 可选:您可以确认在 Controller 节点上的 Image 服务配置文件中配置了 rbd_thin_provisioning

    1. 使用 SSH 访问 Controller 节点:

      $ ssh -A -t tripleo-admin@<controller_node_IP_address>
    2. 确认该 Controller 节点上的 rbd_thin_provisioning 等于 True

      $ sudo podman exec -it glance_api sh -c 'grep ^rbd_thin_provisioning /etc/glance/glance-api.conf'