需求分析

  • openstack成为ceph的客户端
  • openstack的nova|glance|cinder对接ceph集群存储

参考架构

超融合技术和OpenStack技术差异 超融合 openstack_openstack

环境介绍

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
  1. 为存储池创建ceph用户[node1]
ceph auth get-or-create client.glance mon 'allow r' osd 'allow class-read object_prefix rbd_children, allow rwx pool=images'
  1. 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
  1. 通过ssh发送属于client.glance用户的keyring到openstack节点[node1]
ceph auth get-or-create client.glance | ssh controller tee /etc/ceph/ceph.client.glance.keyring
  1. 通过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

检查结果

创建块设备来验证结果

超融合技术和OpenStack技术差异 超融合 openstack_运维_02

看到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查询

超融合技术和OpenStack技术差异 超融合 openstack_d3_03

[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