第 10 章 将 glance 镜像预缓存到 nova

当您将 OpenStack Compute 配置为使用本地临时存储时,glance 镜像会被缓存来加快实例部署。如果实例所需的镜像尚未缓存,则在创建实例时将其下载到 Compute 节点的本地磁盘。

下载 glance 镜像的过程需要变量的时间,具体取决于镜像大小和网络特征,如带宽和延迟。

如果您尝试启动实例,且镜像在本地的 Ceph 集群上不可用,则启动实例会失败并显示以下信息:

Build of instance 3c04e982-c1d1-4364-b6bd-f876e399325b aborted: Image 20c5ff9d-5f54-4b74-830f-88e78b9999ed is unacceptable: No image locations are accessible

您可以在 Compute 服务日志中看到以下内容:

'Image %s is not on my ceph and [workarounds]/ never_download_image_if_on_rbd=True; refusing to fetch and upload.',

由于 nova.conf 配置文件中的一个参数(名为 never_download_image_if_on_rbd)对于 DCN 部署被默认设为 true,则实例会启动失败。您可以使用 heat 参数 NovaDisableImageDownloadToRbd 控制这个值,您可以在 dcn-storage.yaml 文件中找到。

如果在部署 overcloud 前将 NovaDisableImageDownloadToRbd 的值设置为 false,则会出现以下情况:

  • 如果镜像在本地不可用,计算服务(nova)将自动流传输在 中央位置 可用的镜像。
  • 您无法使用 glance 镜像中的 COW 副本。
  • 计算(nova)存储可能会包含同一镜像的多个副本,具体取决于使用它的实例数量。
  • 您可以饱和 WAN 链接到 中央位置 和 nova 存储池。

红帽建议将此值设置为 true,并确保在启动实例前在本地提供所需的镜像。有关使镜像提供给边缘的更多信息,请参阅 第 A.1.3 节 “将镜像复制到新站点”

对于本地的镜像,您可以使用 tripleo_nova_image_cache.yml ansible playbook 来预缓存常用的镜像或镜像,从而加快虚拟机创建速度。

10.1. 运行 tripleo_nova_image_cache.yml ansible playbook

先决条件

  • 在 shell 环境中对正确的 API 进行身份验证凭据。

在每个步骤中提供的命令前,您必须确保提供正确的身份验证文件。

流程

  1. 为您的 overcloud 堆栈创建一个 ansible 清单目录:

    $ mkdir inventories
    
    $ find ~/overcloud-deploy/*/config-download \
      -name tripleo-ansible-inventory.yaml |\
      while read f; do cp $f inventories/$(basename $(dirname $f)).yaml; done
  2. 创建您要预缓存的镜像 ID 列表:

    1. 检索可用镜像的完整列表:

      $ source centralrc
      
      $ openstack image list
      +--------------------------------------+---------+--------+
      | ID                                   | Name    | Status |
      +--------------------------------------+---------+--------+
      | 07bc2424-753b-4f65-9da5-5a99d8383fe6 | image_0 | active |
      | d5187afa-c821-4f22-aa4b-4e76382bef86 | image_1 | active |
      +--------------------------------------+---------+--------+
    2. 创建名为 nova_cache_args.yml 的 ansible playbook 参数文件,并添加您要预缓存的镜像 ID:

      ---
      tripleo_nova_image_cache_images:
        - id: 07bc2424-753b-4f65-9da5-5a99d8383fe6
        - id: d5187afa-c821-4f22-aa4b-4e76382bef86
  3. 运行 tripleo_nova_image_cache.yml ansible playbook:

    $ source centralrc
    
    $ ansible-playbook -i inventories \
    --extra-vars "@nova_cache_args.yml" \
    /usr/share/ansible/tripleo-playbooks/tripleo_nova_image_cache.yml