需求分析
- openstack成为ceph的客户端
- openstack的nova|glance|cinder对接ceph集群存储
参考架构
环境介绍
IP地址 | 主机名 | 节点 |
10.10.10.11 | node1 | Monitor/OSD |
10.10.10.12 | node2 | OSD |
10.10.10.13 | node3 | OSD/ceph-client |
10.10.10.100 | controller | openstack-allinone |
配置openstack作为ceph客户端
修改hosts文件
在node1执行命令
ceph-deploy install controller
ceph-deploy admin controller ## 将节点作为管理节点并将配置文件拷贝到openstack节点
配置ceph存储池
创建三个给nova|glance|cinder使用的存储池[node1]
ceph osd pool stats ## 查看存储池状态
ceph osd pool create images 128 ## 创建名称为images, pg_num为128的存储池
ceph osd pool create vms 128 ## 创建名称为vms, pg_num为128的存储池
ceph osd pool create volumes 128 ## 创建名称为volumes, pg_num为128的存储池
ceph osd pool stats
- 为存储池创建ceph用户[node1]
ceph auth get-or-create client.glance mon 'allow r' osd 'allow class-read object_prefix rbd_children, allow rwx pool=images'
- cinder和nova使用同一个用户, 创建如下[node1]
ceph auth get-or-create client.cinder mon 'allow r' osd 'class-read object_prefix rbd_children, allow rwx pool=volumes, allow rwx pool=vms, allow rx pool=images'
官方给的推荐是
- 少于 5 OSDs, pg_num 设为 128
- 5 到 10 OSDs, pg_num 设为 512
- 10 到 50 OSDs, pg_num 设为 5096
- 超过 50 OSDs, 需要自己平衡计算 pg_num
- Ceph 官方提供了一个工具 pgcalc 来计算 pg_num
- 通过ssh发送属于client.glance用户的keyring到openstack节点[node1]
ceph auth get-or-create client.glance | ssh controller tee /etc/ceph/ceph.client.glance.keyring
- 通过ssh发送属于client.cinder用户的keyring到openstack节点[node1]
ceph auth get-or-create client.cinder | ssh controller tee /etc/ceph/ceph.client.cinder.keyring
给ceph.client.glance.keyring文件权限
ssh controller chown glance:glance /etc/ceph/ceph.client.glance.keyring
给ceph.client.cinder.keyring文件权限
ssh controller chown cinder:cinder /etc/ceph/ceph.client.cinder.keyring
使用ceph作为后端存储
配置glance服务
配置glance, 使其使用ceph作为后端存储, 将虚拟机镜像存储在ceph RDB中
修改glance配置文件
[DEFAULT]
rpc_backend = rabbit
show_image_direct_url = True
[glance_store]
#stores = file,http
#file =
#filesystem_store_datadir = /var/lib/glance/images/
stores = rbd
default_store = rbd
rbd_store_pool = images
rbd_store_user = glance
rbd_store_ceph_conf = /etc/ceph/ceph.conf
rbd_store_chunk_size
重启glance服务
systemctl restart openstack-glance-api
或者
openstack-service restart glance-api
检查结果
由于要在ceph中启动虚拟机, glance镜像的格式必须为RAW, 而cirros-0.3.4-x86_64-disk.img为qcow2格式的, 所有要将其装换成RAW格式, 这里使用到的是qemu-img工具做装换
[root@controller ~]# qemu-img convert -p -f qcow2 -O raw cirros-0.3.3-x86_64-disk.img cirros.raw
(100.00/100%)
转换后通过glance服务上传镜像到后端的ceph存储里**(原来用的是swift)**
glance image-create --name="cirros-ceph" --disk-format=raw --container-format=bare < cirros.raw
在ceph镜像池查询上传的镜像
[root@controller ~]# rbd ls images
75430565-3e26-4c46-a719-ef30be2502dd
可以看到和glance中查询得到的ID相同
现在已经将Glance的默认存储后端配置改为Ceph,所有上传的Glance镜像都将存储在Ceph中。
配置cinder块存储服务
生成UUID
在openstack计算几点上生成一个UUID, 定义secret.xml文件, 设置密钥给Libvirt[controller]
[root@controller ~]# uuidgen
1b740389-3542-4138-b0af-9a86250d31f1
创建密钥文件, 并将uuid设置给它
[root@controller ~]# vi secret.xml
<secret ephemeral='no' private='no'>
<uuid>1b740389-3542-4138-b0af-9a86250d31f1</uuid>
<usage type='ceph'>
<name>client.cinder.secret</name>
</usage>
</secret>
定义(define)密钥文件, 并保证生成的保密字符串是安全的, 在接下来的步骤中需要使用这个保密的字符串值
[root@controller ~]# virsh secret-define --file secret.xml
Secret 1b740389-3542-4138-b0af-9a86250d31f1 created
在virsh里设置好最后一步生成的保密字符串值,创建完成后查看系统的密钥文件。
[root@controller ~]# ceph auth get-key client.cinder >./client.cinder.key
[root@controller ~]# virsh secret-set-value --secret 1b740389-3542-4138-b0af-9a86250d31f1 --base64 $(cat ./client.cinder.key)
Secret value set
[root@controller ~]# virsh secret-list
UUID Usage
--------------------------------------------------------------------------------
1b740389-3542-4138-b0af-9a86250d31f1 ceph client.cinder.secret
修改cinder配置文件
OpenStack需要一个驱动和Ceph块设备交互。还得指定块设备所在的存储池名。编辑controller节点上的/etc/cinder/cinder.conf ,改成如下内容,rbd_secret_uuid就是上面生成的秘钥值。
[root@controller ~]# vi /etc/cinder/cinder.conf
[DEFAULT]
rpc_backend = rabbit
auth_strategy = keystone
my_ip = 192.168.100.10
#enabled_backends = lvm
enabled_backends = ceph
glance_api_servers = http://controller:9292
[ceph]
volume_driver = cinder.volume.drivers.rbd.RBDDriver
rbd_pool = volumes
rbd_ceph_conf = /etc/ceph/ceph.conf
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
rbd_user = cinder
rbd_secret_uuid = 1b740389-3542-4138-b0af-9a86250d31f1
重启cinder服务
[root@controller ~]# systemctl restart openstack-cinder-volume
检查结果
创建块设备来验证结果
看到Cinder创建的块设备,可以在Ceph中查询到,Ceph对接Cinder服务得到验证。
配置nova服务
nova compute使用RBD有两种方式。一种是将cinder volume挂接给虚拟机;另一种是从cinder volume上启动虚拟机,此时Nova需要创建一个RBD image,把glance image的内容导入,再交给libvirt。
修改配置文件
[root@controller ~]# vi /etc/nova/nova.conf
[libvirt]
virt_type = qemu
inject_key = True
rbd_user = cinder
rbd_secret_uuid =1b740389-3542-4138-b0af-9a86250d31f1
检查结果
创建虚拟机
net-id可以通过neutron net-list查询
[root@controller ~]# nova boot --flavor m1.tiny --image "cirros-ceph" --nic net-id=5759bd1e-02e1-48f9-978e-07649e8f7567 ceph-nova
查看云硬盘
cinder list
nova虚拟机挂载云硬盘
[root@controller ~]# nova volume-attach 78d554b2-b295-48b6-9c47-efc38b0054dc fcb3cc53-0be3-4049-b60c-dea4529dafad