问题

环境: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. linux基础—课堂随笔010_系统启动和内核管理

    系统启动和内核管理 Linux: kernel+rootfs kernel: 进程管理.内存管理.网络管理.驱动程序.文件系统.安全功能 rootfs:程序和glibc 库:函数集合, functio ...

  2. 【vue lazyload】插件的使用步骤

    VUE图片懒加载-vue lazyload插件的简单使用

  3. 第七章 路由 82 名称案例-使用keyup事件实现

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8&quo ...

  4. printf格式输出

    参考:http://www.cplusplus.com/reference/cstdio/printf/ C string that contains the text to be written t ...

  5. BZOJ 2242 / Luogu P2485 [SDOI2011]计算器 (BSGS)

    type 1type\ 1type 1 就直接快速幂 type 2type\ 2type 2 特判+求逆元就行了. type 3type\ 3type 3 BSGS板 CODE #include< ...

  6. hdu 6039 Gear Up

    题 OvO http://acm.hdu.edu.cn/showproblem.php?pid=6039 (2017 Multi-University Training Contest 1 1007) ...

  7. 设置Portainer管理Docker并且开启https(简单方法)

    1. 序言 Portainer是一个十分好用的docker图形化管理界面,可以很方便的查看容器状态,错误log等等. 2. 安装 安装portainer是十分简单的,只需要执行docker pull ...

  8. JMS 重点是JMS消息结构讲解

    这部分之前认识的不是很清楚,转载记录下,转载自:https://www.cnblogs.com/Zender/p/9098410.html 阅读目录 一,消息服务 二,JMS 回到目录 小时(1000 ...

  9. HTML5测试题整理Ⅰ

    1.在 HTML5 中,哪个元素用于组合标题元素? 答案:<hgroup>   2.HTML5 中不再支持哪个元素? 答案:<font>,<acronym>,< ...

  10. 【Python之路】特别篇--Python面向对象(初级篇)

    概述 面向过程:根据业务逻辑从上到下写垒代码 函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可 面向对象:对函数进行分类和封装,让开发“更快更好更强...” 面向过程编程最易被初学 ...