问题

环境:Nova、Cinder、Glance 都对接了 Ceph RBD 后端存储。

以往的操作包括上传镜像、创建卷、挂载卷都是一切正常的,但突然出现了无法挂载卷的问题,而且还是因为 Ceph 客户端权限问题导致的:

# nova-compute.log

error connecting: Operation not permitted

这就很神奇了,因为 nova-compute、cinder-volume 共用一个 ceph.client.cinder.keyring,为什么唯独挂载卷权限不足呢?

能创建卷、但无法挂载卷,那么问题多半出现在 Libvirt Secret 上了吧!

解决

当我们配置 OpenStack 对接 Ceph 的时候会创建 client.glance、client.cinder 两个用户,但却不会创建 client.nova 用户,这是因为 Nova 中实际与 Ceph 进行交互的是 Libvirt,而且交互的内容无非就是为 KVM 虚拟机挂载卷、卸载卷。也就是说 Nova 并没有实现 ceph-common 接口调用,所以也就没必要专门创建 client.nova 用户了。抛开 OpenStack 不说,Libvirt 很早就是已经实现了通过 cephx 认证协议与 Ceph RBD 对接的方法,就是 Libvirt Secret。

$ uuidgen
4810c760-dc42-4e5f-9d41-7346db7d7da2 # 获取 client.cinder 的 key
$ ceph auth get-key client.cinder | ssh root@compute tee /tmp/client.cinder.key # 创建 Libvirt 秘钥文件
$ cat > /tmp/secret.xml <<EOF
<secret ephemeral='no' private='no'>
<uuid>4810c760-dc42-4e5f-9d41-7346db7d7da2</uuid>
<usage type='ceph'>
<name>client.cinder secret</name>
</usage>
</secret>
EOF # 定义一个 Libvirt 秘钥
$ sudo virsh secret-define --file /tmp/secret.xml
Secret 4810c760-dc42-4e5f-9d41-7346db7d7da2 created # 设置秘钥的值,值为 client.cinder 用户的 key
# Libvirt 凭此 key 就可能以 cinder 用户的授权访问 Ceph Pool: volumes 了
$ sudo virsh secret-set-value --secret 4810c760-dc42-4e5f-9d41-7346db7d7da2 --base64 $(cat /tmp/client.cinder.key)
Secret value set [root@compute ~]# sudo virsh secret-list
UUID Usage
--------------------------------------------------------------------------------
4810c760-dc42-4e5f-9d41-7346db7d7da2 ceph client.cinder secret

NOTE:因为挂载的 Ceph Pool: volumes 下的块设备,所以 Libvirt Secret 的 Value 就是 client.cinder 的 key。

介绍为背景后回到导致这个问题的原因,是因为云管人员为了提高安全级别,所以手动的为 client.cinder 用户注入了自定义的密钥(key),但同时只更新了 Cinder 客户端的 keyring,却没有同时更新与之对应的 Libvirt Secret。所以出现问题的现象就是可以创建卷(因为 Cinder 客户端的 ceph.client.cinder.keyring 与 MON 的 keyring 依旧保存对称),但却无法挂载卷(因为 Libvirt Secret 与 MON 的 keyring 没有保持对称)。这个问题的麻烦之处在于只查看表面上的配置是很难判断的,还是要查看 Libvirt Secret 的 Values:

[root@compute ~]# virsh secret-get-value 4810c760-dc42-4e5f-9d41-7346db7d7da2
AQDVgMFcn/7sEhAA1sLOM+CTWkkGGJ47GRqInw==

最终解决的方法自然就是重新生成 Libvirt Secret 并且更新 nova.conf、cinder.conf 配置项了。

OpenStack 对接 Ceph 环境可以创建卷但不能挂载卷的问题的更多相关文章

  1. OpenStack 对接 Ceph

    [TOC]   1. Openstack 与 Ceph 1.1. Ceph 简介 Ceph 是当前非常流行的开源分布式存储系统,具有高扩展性.高性能.高可靠性等优点,同时提供块存储服务(RBD).对象 ...

  2. 分布式存储ceph——(2)openstack对接ceph存储后端

    ceph对接openstack环境 一.使用rbd方式提供存储如下数据: (1)image:保存glanc中的image: (2)volume存储:保存cinder的volume:保存创建虚拟机时选择 ...

  3. 4.创建OpenStack的node环境脚本

    创建OpenStack的node环境脚本 使用source admin-openrc.sh来运行脚本 在任意目录下创建admin-openrc.sh文件 vim ~/admin-openrc.sh e ...

  4. Openstack针对nova,cinder,glance使用ceph的虚拟机创建机制优化

     今天在开源中国社区看到有例如以下一个问题: 已经成功把ceph作为cinder和 glance的后端,可是假设作为nova的后端,虚拟机启动速度非常慢,网上查了一下是由于openstack创建虚 ...

  5. k8s对接ceph存储

    前提条件:已经部署好ceph集群 本次实验由于环境有限,ceph集群是部署在k8s的master节点上的 一.创建ceph存储池 在ceph集群的mon节点上执行以下命令: ceph osd pool ...

  6. 高可用OpenStack(Queen版)集群-14.Openstack集成Ceph准备

    参考文档: Install-guide:https://docs.openstack.org/install-guide/ OpenStack High Availability Guide:http ...

  7. 理解 OpenStack + Ceph (5):OpenStack 与 Ceph 之间的集成 [OpenStack Integration with Ceph]

    理解 OpenStack + Ceph 系列文章: (1)安装和部署 (2)Ceph RBD 接口和工具 (3)Ceph 物理和逻辑结构 (4)Ceph 的基础数据结构 (5)Ceph 与 OpenS ...

  8. openstack对接VMware浅析

    前言 本文是对openstack对接vmware的浅析,所以本文重点是以下两点: 先了解它的整体架构,搞清楚为什么要用这样的架构: 然后再了解架构中的各个组件,组件提供的主要功能与各个组件之间的交互 ...

  9. OpenStack集成ceph

    openstack组件集成ceph OpenStack集成ceph详细过程可以查看ceph官方文档:ceph document OpenStack Queens版本,1台控制节点controller, ...

随机推荐

  1. SQL语句复习【专题二】

    SQL语句复习[专题二] 单行函数(日期.数学.字符串.通用函数.转换函数)多行函数.分组函数.多行数据计算一个结果.一共5个.sum(),avg(),max(),min(),count()分组函数  ...

  2. PHP的八种数据类型

    PHP 支持8种基本的数据类型. 四种标量类型: boolean (布尔型) integer (整型) float (浮点型, 也称作 double) string (字符串) 两种复合类型: arr ...

  3. 十三,k8s集群web端管理工具dashboard部署

    目录 部署 dashboard 由于会被墙, 所以要加一步拉取镜像 正式开始安装dashboard 查看 开放访问 配置dashboard用户 1. token 令牌认证 创建一个 serviceAc ...

  4. Psychos in a Line CodeForces - 319B (单调栈的应用)

    Psychos in a Line CodeForces - 319B There are n psychos standing in a line. Each psycho is assigned ...

  5. 安装theano遇到的问题

    嗯,听说keras虽然说有TensorFlow有backend就够了,在TensorFlow和theano之间来回切换还是会有用的,然后又补安装了theano 之前解了权限了,所以不需要sudo 直接 ...

  6. maven-war-plugin

    Name Type Since Description 默认值 cacheFile File 2.1-alpha-1 包含webapp结构的文件缓存 ${project.build.directory ...

  7. [易学易懂系列|rustlang语言|零基础|快速入门|(25)|实战2:命令行工具minigrep(2)]

    [易学易懂系列|rustlang语言|零基础|快速入门|(25)|实战2:命令行工具minigrep(2)] 项目实战 实战2:命令行工具minigrep 我们继续开发我们的minigrep. 我们现 ...

  8. php类知识---常量点滴

    常量在类的内部,外部都可以访问,要通过类名::常量名 常量没有访问修饰符 与变量不同的是,常量不能放在双引号中取值,而变量可以 <?phpclass mycoach{ public $name= ...

  9. npm报错 This is probably not a problem with npm,there is likely additional logging output above可能的原因

    npm WARN Local package.json exists, but node_modules missing, did you mean to install? 解决方法: 输入npm i ...

  10. 03 深入远程执行:target目标、模块modules、返回returns

    0.学习目的 http://docs.saltstack.cn/topics/execution/index.html  官方文档 0.1 命令解释 [root@host---- ~]# salt ' ...