Ceph对接Openstack
Posted ygtff
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Ceph对接Openstack相关的知识,希望对你有一定的参考价值。
技术堆栈
- Ceph的一个使用场景是结合Openstack来提供云存储服务,Openstack到Ceph之间的调用堆栈就是下面这个结构:
三大模块
Openstack对接Ceph,有3大模块可以使用Ceph:
- 镜像
Openstack的Glance组件提供镜像服务,可以将Image直接存储在Ceph中。
- 操作系统盘
Openstack的Nova组件提供计算服务,一个虚机的创建必然需要操作系统,也就少不了系统盘,系统盘可以使用Ceph来提供。
- 非操作系统盘
Openstack的Cinder组件提供块存储服务,也就是我们物理机中的普通磁盘,也可以通过Ceph来提供。
- 以上3个组件从Openstack角度来说,是不同的3个模块,提供的服务也不同,但对于Ceph来说,都是一个Rbd Image,也就是一个块存储。
走的是同样的API,但是在一些属性和参数间存在一些差异。
具体操作
-
创建存储池
针对Openstack的3个不同服务,需要把存储资源池隔离开,也就是每个服务一个Pool:// 创建volumes池,对应Cinder服务 ceph osd pool create volumes 128 // 创建images池,对应Glance服务 ceph osd pool create images 128 // 创建vms池,对应Nova服务 ceph osd pool create vms 128 // 创建backups池,对应Cinder-backup服务。但这个backup在同一Ceph集群中,意义不大,既然是做备份的话,就应该跨集群或者跨机房、跨区域来达到备份容灾的目的。 ceph osd pool create backups 128
- 安装Ceph相关包
-
在glance-api的主机上安装python-rbd包
yum install python-rbd
-
在nova-compute、cinder-volume、cinder-backup节点上安装ceph-common包
yum install ceph-common
安装完ceph包之后,需要将ceph集群的ceph.conf copy到所有client端。
-
如果在Ceph的配置中打开了auth认证,就需要做如下的操作;如果Ceph中的auth都是设置的none,也就是关闭的话,可以不做如下操作。
-
在ceph中创建了cinder、glance等用户,并做了权限控制
ceph auth get-or-create client.cinder mon 'allow r' osd 'allow class-read object_prefix rbd_children, allow rwx pool=volumes, allow rwx pool=vms, allow rx pool=images' ceph auth get-or-create client.glance mon 'allow r' osd 'allow class-read object_prefix rbd_children, allow rwx pool=images' ceph auth get-or-create client.cinder-backup mon 'allow r' osd 'allow class-read object_prefix rbd_children, allow rwx pool=backups'
-
将上面生成的keyring文件,保存在相应的节点上,并修改为相应的权限
// 注意替换所有的server为相应的主机名 ceph auth get-or-create client.glance | ssh glance-api-server sudo tee /etc/ceph/ceph.client.glance.keyring ssh glance-api-server sudo chown glance:glance /etc/ceph/ceph.client.glance.keyring ceph auth get-or-create client.cinder | ssh cinder-volume-server sudo tee /etc/ceph/ceph.client.cinder.keyring ssh cinder-volume-server sudo chown cinder:cinder /etc/ceph/ceph.client.cinder.keyring ceph auth get-or-create client.cinder-backup | ssh cinder-backup-server sudo tee /etc/ceph/ceph.client.cinder-backup.keyring ssh cinder-backup-server sudo chown cinder:cinder /etc/ceph/ceph.client.cinder-backup.keyring
-
在nova-compute节点上保存和cinder-volume相同的keyring
ceph auth get-or-create client.cinder | ssh nova-compute-server sudo tee /etc/ceph/ceph.client.cinder.keyring
-
在libvirt上添加secret key
// 获取cinder keyring,并保存到一个临时文件中 ceph auth get-key client.cinder | ssh nova-compute-node tee client.cinder.key // 生成一个UUID uuidgen 457eb676-33da-42ec-9a8c-9293d545c337 // 修改secret.xml文件,注意替换下面的uuid cat > secret.xml <<EOF <secret ephemeral='no' private='no'> <uuid>457eb676-33da-42ec-9a8c-9293d545c337</uuid> <usage type='ceph'> <name>client.cinder secret</name> </usage> </secret> EOF sudo virsh secret-define --file secret.xml Secret 457eb676-33da-42ec-9a8c-9293d545c337 created // 设置libvirt的secret key,并删除之前的key临时文件 sudo virsh secret-set-value --secret 457eb676-33da-42ec-9a8c-9293d545c337 --base64 $(cat client.cinder.key) && rm client.cinder.key secret.xml
-
- 在三大模块中增加ceph相关配置
-
Glance配置
// 在/etc/glance/glance-api.conf中添加如下: // 在DEFAULT域中增加: [DEFAULT] default_store = rbd // 在glance_store域中增加如下,如果没有glance_store域,直接创建: [glance_store] stores = rbd rbd_store_pool = images rbd_store_user = glance rbd_store_ceph_conf = /etc/ceph/ceph.conf rbd_store_chunk_size = 8
-
Cinder配置
// 在/etc/cinder/cinder.conf中添加如下: // 在DEFAULT域中增加: [DEFAULT] enabled_backends = ceph // 在ceph域中增加如下,如果没有ceph域,直接创建: [ceph] volume_driver = cinder.volume.drivers.rbd.RBDDriver rbd_pool = volumes rbd_ceph_conf = /etc/ceph/ceph.conf rbd_flatten_volume_from_snapshot = false rbd_max_clone_depth = 5 rbd_store_chunk_size = 4 rados_connect_timeout = -1 glance_api_version = 2 // 如果使用了ceph auth,还需增加: rbd_user = cinder rbd_secret_uuid = 457eb676-33da-42ec-9a8c-9293d545c337
-
Cinder-backup配置
// 在/etc/ceph/ceph.conf中添加如下: backup_driver = cinder.backup.drivers.ceph backup_ceph_conf = /etc/ceph/ceph.conf backup_ceph_user = cinder-backup backup_ceph_chunk_size = 134217728 backup_ceph_pool = backups backup_ceph_stripe_unit = 0 backup_ceph_stripe_count = 0 restore_discard_excess_bytes = true
-
Nova配置
// 在/etc/nova/nova.conf中添加如下: [libvirt] images_type = rbd images_rbd_pool = vms images_rbd_ceph_conf = /etc/ceph/ceph.conf rbd_user = cinder rbd_secret_uuid = 457eb676-33da-42ec-9a8c-9293d545c337 disk_cachemodes="network=writeback"
- 重启glance-api、nova-compute、cinder-volume、cinder-backup服务
-
-
参考
http://docs.ceph.com/docs/jewel/rbd/rbd-openstack/
以上是关于Ceph对接Openstack的主要内容,如果未能解决你的问题,请参考以下文章