创建存储池
我这里选择 glance 使用控制节点的存储,VM 保存在计算节点上,备份没有配置,所以 Ceph 只作为卷使用。
在 Ceph 节点上面,创建存储池:
1 | [root@node1 ~]# ceph osd pool create volumes 128 |
根据官方文档,这里初始化存储池失败。
1
2 [root@node1 ~]# rbd pool init volumes
error: unknown option 'pool init volumes'
配置 OpenStack 为 Ceph 客户端
运行 glance-api
, cinder-volume
, nova-compute
, cinder-backup
进程的节点都需要 Ceph 客户端。每一个都要有 ceph.conf
文件。
在计算节点和控制节点上创建 Ceph 目录:
1 | [root@controller ~]# cd /etc |
将配置文件传到控制节点和计算节点:
1 | [root@node1 ~]# ssh root@compute01 sudo tee /etc/ceph/ceph.conf < /etc/ceph/ceph.conf |
我部署的 OpenStack 为一个控制节点和一个计算节点。 glance-api
运行在控制节点上,cinder-volume
, nova-compute
运行在计算节点上,因此,控制节点和计算节点都需要配置为 Ceph 客户端。
安装 Ceph 客户端安装包
在 glance-api
节点(控制节点)上,需要安装 librbd 的 Python 绑定:
1 | [root@controller ~]# sudo yum install python-rbd |
在 cinder-volume
, nova-compute
节点(计算节点)上,安装 Python 绑定以及 Ceph 命令行工具:
1 | [root@compute01 ~]# sudo yum install ceph-common |
配置 Ceph 客户端授权
从 Ceph monitor 节点,为 Cinder 创建一个新用户。
1 | [root@node1 ~]# ceph auth get-or-create client.cinder mon 'allow r' osd 'allow class-read object_prefix rbd_children, allow rwx pool=volumes' |
为 client.cinder 添加密钥环并改变所属者。
1 | [root@node1 ~]# ceph auth get-or-create client.cinder | ssh root@compute01 sudo tee /etc/ceph/ceph.client.cinder.keyring |
运行 nova-compute 的节点还需要将 client.cinder 用户的密钥存储在 libvirt 中。在从 Cinder 中添加块设备时,libvirt 进程需要它访问群集。
在运行 nova-compute 的节点上创建密钥的临时副本:
1 | [root@node1 ~]# ceph auth get-key client.cinder | ssh root@compute01 tee client.cinder.key |
在计算节点上,为密钥生成 UUID, 并保存 UUID,以便待会配置 nova-compute。
1 | [root@compute01 ~]# uuidgen > uuid-secret.txt |
然后在计算节点上,向 libvirt 中添加密钥,并删除临时副本:
1 | [root@compute01 ~]# cat > secret.xml <<EOF |
配置 Cinder
cinder-volume
节点需要 Ceph 块设备,volume 存储池,用户以及密钥的 UUID,才能和 Ceph 块设备连接。要配置 Cinder,请执行以下步骤:
打开 Cinder 配置文件。
1
[root@compute01 ~]# vim /etc/cinder/cinder.conf
在
[DEFAULT]
选项中,开启 Ceph 作为 Cinder 后端存储。1
enabled_backends = ceph
确认 Glance API 版本是 2。如果你在
enabled_backends
中配置了多后端,glance_api_version = 2
必须在[DEFAULT]
选项中设置而不是在[ceph]
选项中。1
glance_api_version = 2
在
cinder.conf
中创建一个[ceph]
选项,添加以下部分到[ceph]
选项中。设置
volume_driver
使用 Ceph 后端存储。1
volume_driver = cinder.volume.drivers.rbd.RBDDriver
设置集群名称以及 Ceph 配置文件的位置。
1
2rbd_cluster_name = e8b7ae85-8d03-4160-becc-10df8f385c59
rbd_ceph_conf = /etc/ceph/ceph.conf默认情况下,OSP 在
rbd
池中存储 Ceph 卷。1
rbd_pool = volumes
指定
rbd_user
,把它设置为cinder
用户。然后指定rbd_secret_uuid
,UUID 存储在uuid-secret.txt
文件中。1
2rbd_user = cinder
rbd_secret_uuid = 0fb0bd0a-7926-4c4a-b015-b1cfa3f86456指定以下设置。
1
2
3
4rbd_flatten_volume_from_snapshot = false
rbd_max_clone_depth = 5
rbd_store_chunk_size = 4
rados_connect_timeout = -1
最终的设置应该像下面一样:
1 | [DEFAULT] |
重启 OpenStack 服务
1 | [root@compute01 ~]# systemctl restart openstack-cinder-volume |
参考
官方文档基本没用。