OpenStack 对接 Ceph 环境可以创建卷但不能挂载卷的问题
问题
环境: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 环境可以创建卷但不能挂载卷的问题的更多相关文章
- OpenStack 对接 Ceph
[TOC] 1. Openstack 与 Ceph 1.1. Ceph 简介 Ceph 是当前非常流行的开源分布式存储系统,具有高扩展性.高性能.高可靠性等优点,同时提供块存储服务(RBD).对象 ...
- 分布式存储ceph——(2)openstack对接ceph存储后端
ceph对接openstack环境 一.使用rbd方式提供存储如下数据: (1)image:保存glanc中的image: (2)volume存储:保存cinder的volume:保存创建虚拟机时选择 ...
- 4.创建OpenStack的node环境脚本
创建OpenStack的node环境脚本 使用source admin-openrc.sh来运行脚本 在任意目录下创建admin-openrc.sh文件 vim ~/admin-openrc.sh e ...
- Openstack针对nova,cinder,glance使用ceph的虚拟机创建机制优化
今天在开源中国社区看到有例如以下一个问题: 已经成功把ceph作为cinder和 glance的后端,可是假设作为nova的后端,虚拟机启动速度非常慢,网上查了一下是由于openstack创建虚 ...
- k8s对接ceph存储
前提条件:已经部署好ceph集群 本次实验由于环境有限,ceph集群是部署在k8s的master节点上的 一.创建ceph存储池 在ceph集群的mon节点上执行以下命令: ceph osd pool ...
- 高可用OpenStack(Queen版)集群-14.Openstack集成Ceph准备
参考文档: Install-guide:https://docs.openstack.org/install-guide/ OpenStack High Availability Guide:http ...
- 理解 OpenStack + Ceph (5):OpenStack 与 Ceph 之间的集成 [OpenStack Integration with Ceph]
理解 OpenStack + Ceph 系列文章: (1)安装和部署 (2)Ceph RBD 接口和工具 (3)Ceph 物理和逻辑结构 (4)Ceph 的基础数据结构 (5)Ceph 与 OpenS ...
- openstack对接VMware浅析
前言 本文是对openstack对接vmware的浅析,所以本文重点是以下两点: 先了解它的整体架构,搞清楚为什么要用这样的架构: 然后再了解架构中的各个组件,组件提供的主要功能与各个组件之间的交互 ...
- OpenStack集成ceph
openstack组件集成ceph OpenStack集成ceph详细过程可以查看ceph官方文档:ceph document OpenStack Queens版本,1台控制节点controller, ...
随机推荐
- Excel种的数据类型研究【原创】【精】
因为要做一个项目,开始研究Excel种的数据类型.发现偌大的一个cnblogs竟然没人写这个,自己研究以后记录下来. 在我们通常的认识中,Excel中的数据类型有这么几种 1.常规:2.数值:3.货币 ...
- 深圳即将启动首届「全国人工智能大赛」:超过 500 万大奖 & 政府资助,潜信息你读懂了吗!
人工智能加速“视频/视觉”发展,近期,深圳市即将迎来人工智能领域权威赛事之一——首届「全国人工智能大赛」(The First National Artificial Intelligence Chal ...
- QTP(10)
一.VBS语言基础 1.运算符和表达式 (1)运算符 (2)表达式 a.数学表达式:由算术运算符连接,计算结果为数字 b.字符串表达式:由字符串连接符连接,计算结果为字符串 c.条件表达式:由关系运算 ...
- React组件:Dragact 0.1.4发布
Dragact 是一款React组件,他能够使你简单.快速的构建出一款强大的 拖拽式网格(grid)布局. 仓库地址:Dragact 经过几天的迭代时间Dragact已经能够支持自由缩放功能了(res ...
- CAP原理与最终一致性 强一致性 弱一致性
CAP原理中,有三个要素: 一致性(Consistency) 可用性(Availability) 分区容忍性(Partition tolerance) CAP原理指的是,这三个要素最多只能同时实现两点 ...
- python的方法VSjava方法
java 类方法和实例方法 类方法 用static修饰的方法. 由于类方法是属于整个类的,所以类方法的方法体中不能有与类的对象有关的内容. 即类方法体有如下限制: 1.类方法中不能引用对象变量: 2. ...
- Java-Dom4jHelper工具类
import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileInputStream; import ja ...
- SpringBoot对接收及返回Instant类型的处理(转)
一:处理post请求json中的Instant类型1.springboot中日期格式化配置: spring: jackson: date-format: yyyy-MM-dd HH:mm:ss tim ...
- java中的“指针”
java中的"指针" 通常我们说java中没有指针,但是java中的"引用"就相当于指针,只是不称为指针而已. 错误例子 public List<Clus ...
- pro git 读书笔记 1
Git 1 - Getting Started Git 的特点 Git 存储每个版本的快照:其他 VCS(版本控制系统) 存储两个版本的变化之处 好处参考 Git 分支章节 Git 几乎所有操作都是本 ...