kvm虚拟机通过 libvirt 挂在 ceph rbd作为数据盘
一、首先确定我们的ceph环境是HEALTH_OK
[root@cephmon ceph]# ceph -s
cluster:
id: 272ac8d0-c758-42db-9a51-59e826f96ac2
health: HEALTH_OK
services:
mon: 1 daemons, quorum cephmon (age 51m)
mgr: cephmon(active, since 6h)
osd: 2 osds: 2 up (since 6h), 2 in (since 23h)
data:
pools: 0 pools, 0 pgs
objects: 0 objects, 0 B
usage: 2.2 GiB used, 7.3 TiB / 7.3 TiB avail
pgs:
二、开始配置ceph存储池
1、创建一个存储池,这里pg和pgm均设置为32(不固定)
#ceph osd pool create testpool 32 32
2、查看存储池是否创建成功,同时再次确认ceph是否健康,且pgs是否为active+clean
3、用 QEMU 在 RBD 存储池中创建映像。本例中映像名为 image 、存储池为 pool 。
#qemu-img create -f rbd rbd:testpool/myimage 200G
如果报错qemu-img找不到,执行:
//创建kvm环境依赖:
#yum -y install qemu-kvm libvirt virt-install bridge-utils
//验证kvm:
#lsmod | grep kvm
#systemctl start libvirtd
#systemctl enable libvirtd
4、验证映像是否存在。
#rbd -p testpool ls
myimage
5、创建一个windows虚拟机(我也推荐使用virt-manager),目前只有一个系统盘,创建结果如图:
安装虚拟机管理器VirtManager :
ubuntu:
sudo apt-get install virt-manager
centos7:
yum -y intsall virt-manager
6、关闭虚拟机,把我们创建的myimage-ceph数据盘添加到虚拟机的XML文件:
把你创建的 Ceph RBD 映像创建为 disk 条目加入到device标签里面。
#sudo virsh edit {虚拟机的名字}
<disk type='network' device='disk'>
<source protocol='rbd' name='testpool/myimage'> //指定存储池
<host name='ceph主机管理节点名' port='6789'/> //6789默认端口
</source>
<target dev='vda' bus='virtio'/>
</disk>
7、Ceph 存储集群启用了 Ceph 认证(默认已启用),那么必须生成一个 secret。
可以通过查看ceph.conf配置文件如何查看是否启用认证:
auth_cluster_required = cephx (none) //none为未启用
auth_service_required = cephx (none) //cephx为启用认证
auth_client_required = cephx (none)
生成secret密钥,这里以admin为例::
cat > secret.xml <<EOF
<secret ephemeral='no' private='no'>
<usage type='ceph'>
<name>client.admin secret</name>
</usage>
</secret>
EOF
#sudo virsh secret-define --file secret.xml
//会生成一串数字
#ceph auth get-key client.admin | sudo tee client.libvirt.key
#sudo virsh secret-set-value --secret {secret uuid} --base64 $(cat client.libvirt.key) && rm client.libvirt.key secret.xml
查看密钥:
virsh secret-list
重定义密钥
sudo virsh secret-undefine {uuid}
8、包密钥uudi添加在虚拟机XML的格式:
<disk type='network' device='disk'>
...
<auth username='对应的auth'>
<secret type='ceph' uuid='密钥'/>
</auth>
...
<target dev='vdb' bus='virtio'/>
</disk>
9、总结
一旦完成上面的配置,你就可以启动 VM 了。为确认 VM 和 Ceph 在通信,你可以执行如下过程。
检查 Ceph 是否在运行:
#ceph health
检查 VM 是否在运行。
#sudo virsh list
如果看起来一切正常,你就可以在虚拟机内使用 Ceph 块设备了
注意:首次使用该块设备windows会对其分区格式化才能识别为数据盘
具体流程图如下:
新建磁盘卷:
等待格式化完成,我们的ceph数据盘就被挂载为windows虚拟机里面的D盘:
我们不仅可以通过ceph模式挂载数据盘作,同样可以把它设置为虚拟机系统盘,这样就成为真正意义上的云主机了,而且ceph模式的好处不局限与同一台物理机,其他物理机通过配置同样可以挂载数据盘,管理和扩容都很方便。
官网已经给出很详细的操作流程:http://docs.ceph.org.cn/rbd/libvirt/