第 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 进行身份验证凭据。
在每个步骤中提供的命令前,您必须确保提供正确的身份验证文件。
流程
为您的 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
创建您要预缓存的镜像 ID 列表:
检索可用镜像的完整列表:
$ source centralrc $ openstack image list +--------------------------------------+---------+--------+ | ID | Name | Status | +--------------------------------------+---------+--------+ | 07bc2424-753b-4f65-9da5-5a99d8383fe6 | image_0 | active | | d5187afa-c821-4f22-aa4b-4e76382bef86 | image_1 | active | +--------------------------------------+---------+--------+
创建名为
nova_cache_args.yml
的 ansible playbook 参数文件,并添加您要预缓存的镜像 ID:--- tripleo_nova_image_cache_images: - id: 07bc2424-753b-4f65-9da5-5a99d8383fe6 - id: d5187afa-c821-4f22-aa4b-4e76382bef86
运行
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