您的位置:首页 > 其它

cinder 基于镜像创建volume, 竟然下载镜像,问题排查

2017-08-16 15:23 561 查看
批量创建50台主机,发现特别慢,查看cinder-volume日志,发现有大量的 下载镜像的过程。这就很奇怪了,为什么会下载镜像

于是查看代码,看代码一切正常,除非image_location为空,才有可能会下载镜像。

于是继续debug,发现果然没有image_location了,  为什么会出现这种情况?   使用glance 命令在次查看,是有 location的啊。

于是在继续debug,发现一个 def get_location的方法

def get_location(self, context, image_id):
"""Get backend storage location url.

Returns a tuple containing the direct url and locations representing
the backend storage location, or (None, None) if these attributes are
not shown by Glance.
"""
if CONF.glance_api_version == 1:                         在glance_api_version == 1的时候才会直接返回 None
# image location not available in v1
return (None, None)
try:
# direct_url is returned by v2 api
client = GlanceClientWrapper(version=2)
image_meta = client.call(context, 'get', image_id)
except Exception:
_reraise_translated_image_exception(image_id)

if not self._is_image_available(context, image_meta):
raise exception.ImageNotFound(image_id=image_id)

# some glance stores like nfs only meta data
# is stored and returned as locations.
# so composite of two needs to be returned.
return (getattr(image_meta, 'direct_url', None),
getattr(image_meta, 'locations', None))


于是马上查看  /etc/cinder/cinder.conf 配置文件,搜索 glance_api_version 发现,是等于 2 的啊,于是查看代码,发现10.0.4版本的代码glance_api_version默认是1,这就坑了。

但是我配置文件里设置了等于2了啊,这就郁闷了,难道是/usr/share/cinder 起作用?  

于是到处搜索 glance_api_version  ,终于在代码里找到了,10.0.4 版本glance_api_version 是1,可是我配置文件里写了2啊,于是写在ceph的块里了,在[default]下面也要写。

于是在[default] 下加上    glance_api_version = 2,   完全解决。还顺便看了下整个cinder创建的流程, taskflow,  ceph删除快照和查看快照等。  解决问题就是一个很好的学习过程吧。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: