目录
openStack对接ceph
在前面,我们只是将glance对接到了ceph,也就是只有镜像的存储在ceph上的,如果nova的计算节点挂掉了,那么运行在这个上面的虚拟机的数据也就随之丢失了,所以我们也可以将nova虚拟机的数据也存储在ceph上,包括cinder提供的卷也是可以对接的,接下来我们就来看看如何操作
1. cinder对接ceph
配置cinder与ceph集成,需要同步配置nova与ceph集成,使用cinder相同的ceph帐号,否则nova无权限访问cinder在ceph上创建的卷
由于我们之前使用kolla安装openstack的时候并没有让他安装cinder组件,所以我们现在需要修改配置文件,来让他部署cinder组件,并且ceph需要创建存储池
1.1 ceph创建存储池
在ceph上操作,由于我们需要开启cinder的卷备份,所以我们需要2个存储池,一个是数据池volumes
,另一个是备份池backups
[root@ceph ~]# ceph osd pool create volumes pool 'volumes' created [root@ceph ~]# ceph osd pool application enable volumes rbd enabled application 'rbd' on pool 'volumes' [root@ceph ~]# ceph osd pool create backups pool 'backups' created [root@ceph ~]# ceph osd pool application enable backups rbd enabled application 'rbd' on pool 'backups' [root@ceph ~]# rbd pool init volumes [root@ceph ~]# rbd pool init backups
1.2 ceph授权
因为是2个池,所以我们需要给到2个用户来操作,不要使用一个用户能够直接操作这2个池
[root@ceph ceph]# ceph auth get-or-create client.cinder mon 'profile rbd' osd 'profile rbd pool=volumes' -o /etc/ceph/ceph.client.cinder.keyring [root@ceph ceph]# ceph auth get-or-create client.cinder-backups mon 'profile rbd' osd 'profile rbd pool=backups' -o /etc/ceph/ceph.client.cinder-backups.keyring
1.3 下发ceph文件
我们需要将ceph的配置文件以及用户的认证文件发送到部署节点,部署节点必须提前创建好目录
# 部署节点创建目录 [root@openstack01 ~]# mkdir /etc/kolla/config/cinder/{cinder-backup,cinder-volume} -p
在部署节点上的目录结构是这样的
[root@openstack01 cinder]# tree . ├── cinder-backup │ ├── ceph.client.cinder-backups.keyring │ ├── ceph.client.cinder.keyring │ └── ceph.conf └── cinder-volume ├── ceph.client.cinder.keyring └── ceph.conf
注意,一定要将这些文件里面的缩进给删掉或者替换成空格,不然会报错!
ceph的工作就做完了,接下来我们回到部署节点
1.4 修改globals文件
[root@openstack01 ~]# vim /etc/kolla/globals.yml ceph_cinder_user: "cinder" ceph_cinder_keyring: "client.{{ ceph_cinder_user }}.keyring" ceph_cinder_pool_name: "volumes" ceph_cinder_backup_user: "cinder-backup" ceph_cinder_backup_keyring: "client.{{ ceph_cinder_backup_user }}.keyring" ceph_cinder_backup_pool_name: "backups" enable_cinder: "yes" enable_cinder_backup: "yes" cinder_backend_ceph: "yes" cinder_backup_driver: "ceph"
1.5 部署cinder
(kolla) [root@openstack01 ~]# kolla-ansible -i /etc/kolla/multinode -t cinder deploy
因为我们之前没有部署cinder,所以这里的指令是cinder,如果已经部署了要修改配置文件,那么这里就是upgrade,接下来等待cinder部署完毕
1.6 创建卷
(kolla) [root@openstack01 ~]# openstack volume create --size 10 volume01 (kolla) [root@openstack01 ~]# openstack volume list +-------------------------------+----------+-----------+------+-------------+ | ID | Name | Status | Size | Attached to | +-------------------------------+----------+-----------+------+-------------+ | c1983d42-8897-4cef- | volume01 | available | 10 | | | bf53-02bdc57b5855 | | | | | +-------------------------------+----------+-----------+------+-------------
卷可以正常创建,但是创建出来的卷不可以被nova的虚拟机挂载,因为nova并没有访问ceph的权限,所以我们现在需新用户的权限,需要说明的是,nova组件与cinder组件使用的是同一个用户,所以我们并不用新创建用户,只需要对cinder的用户重新授权就可以了
2. nova对接ceph
因为nova目前无法使用卷,我们现在开始用nova对接ceph,一并让虚拟机的数据直接存储在ceph上,并且可以使用卷
2.1 创建卷
[root@ceph ~]# ceph osd pool create vms pool 'vms' created [root@ceph ~]# ceph osd pool application enable vms rbd enabled application 'rbd' on pool 'vms' [root@ceph ~]# rbd pool init vms
2.2 更新cinder权限
nova与cinder使用同一个用户
[root@ceph ~]# ceph auth caps client.cinder mon 'profile rbd' osd 'profile rbd pool=volumes, profile rbd pool=vms'
直接更新就可以了,不用将认证文件传过去,因为key并没有变,只是权限变了而已
2.3 修改globals文件
(kolla) [root@openstack01 ~]# vim /etc/kolla/globals.yml ceph_nova_keyring: "{{ ceph_cinder_keyring }}" ceph_nova_user: "{{ ceph_cinder_user }}" ceph_nova_pool_name: "vms" nova_backend_ceph: "yes"
2.4 创建目录
(kolla) [root@openstack01 ~]# mkdir /etc/kolla/config/nova (kolla) [root@openstack01 ~]# cd /etc/kolla/config/nova (kolla) [root@openstack01 nova]# scp ../cinder/cinder-volume/* .
2.5 升级nova
(kolla) [root@openstack01 nova]# kolla-ansible -i /etc/kolla/multinode -t nova upgrade
等待他完成部署
3. 验证nova
3.1 检查存储池
现在我们来验证nova虚拟机的根磁盘文件是否存储在ceph的vms池上
[root@ceph ~]# rbd ls vms [root@ceph ~]#
现在在ceph上是没有数据在vms池的,接下来我们创建虚拟机
3.2 创建虚拟机
(kolla) [root@openstack01 ~]# openstack server create ecs01 --flavor m1.tiny --image cirros --network demo-net (kolla) [root@openstack01 ~]# openstack server list +-------------------+-------+--------+-------------------+--------+---------+ | ID | Name | Status | Networks | Image | Flavor | +-------------------+-------+--------+-------------------+--------+---------+ | a2d3bfaf-62f8-435 | ecs01 | ACTIVE | demo- | cirros | m1.tiny | | a-b9bc-35979de58e | | | net=10.0.0.112 | | | | 00 | | | | | | +-------------------+-------+--------+-------------------+--------+---------
现在虚拟机已经正常运行了,接下来回到ceph节点查看池
[root@ceph ~]# rbd ls vms a2d3bfaf-62f8-435a-b9bc-35979de58e00_disk
看到了吗?咱们刚刚创建的虚拟机的ID是a2d3啥的,现在ceph的vms存储池里面就有一个这样的数据,后缀是disk,接下来我们创建一个卷并挂载给虚拟机
3.3 创建卷
(kolla) [root@openstack01 ~]# openstack volume create --size 5 volume02
卷创建出来之后我们将他挂载给ecs01
3.4 虚拟机挂载卷
(kolla) [root@openstack01 ~]# openstack server add volume ecs01 volume02 +-----------------------+--------------------------------------+ | Field | Value | +-----------------------+--------------------------------------+ | ID | 79bb70bf-1cb4-42fc-8d9a-99c9cf940dd2 | | Server ID | a2d3bfaf-62f8-435a-b9bc-35979de58e00 | | Volume ID | 79bb70bf-1cb4-42fc-8d9a-99c9cf940dd2 | | Device | /dev/vdb | | Tag | None | | Delete On Termination | False | +-----------------------+--------------------------------------+
通过他的回显,我们可以得知他将volume映射到了ecs的/dev/vdb,我们来到图形界面看看是不是有这么一个设备了
现在我们的open stack的数据基本上已经全部存储到了ceph集群中,这样就不会担心openstack单点故障导致虚拟机数据丢失了
本文来自博客园,作者:FuShudi,转载请注明原文链接:https://www.cnblogs.com/fsdstudy/p/18301989