kvm虚机使用ceph rbd块设备作为后端存储
1.KVM的Qemu与Ceph RBD块存储进行对接1.1.Qemu与RBD块存储对接的架构图
Qemu本身并不是KVM的一部分,而是一整套完整的虚拟化解决方案,它是纯软件实现的,包括处理器虚拟化、内存虚拟化以及各种虚拟设备的模拟,但因为是纯软件模拟,所以性能相对比较低。而广义的KVM实际上包含两部分,一部分是基于LINUX内核支持的KVM内核模块,另一部分就是经过简化和修改Qemu。KVM内核模块模拟处理器和内存以支持虚拟机的运行,Qemu主要处理I/O以及为用户提供一个用户空间工具来进行虚拟机的管理。两者相互结合,相辅相成,构成了一个完整的虚拟化平台。
Qemu主要是用来虚拟各种资源的,例如网卡、硬盘等等,我们可以将Qemu产生的数据存储在Ceph集群的RBD块存储中。
Qemu通过librbd驱动组件与Ceph集群的librados建立连接,将数据通过RBD块存储写入到OSD中。
Qemu与Ceph RBD块存储对接,其实就是在Ceph集群的RBD资源池中创建了一块存储卷,属于RBD类型,这块卷创建完后,KVM在创建虚拟机的时候就可以使用这块卷来持久化虚拟机的数据。
官方文档:https://docs.ceph.com/en/quincy/rbd/qemu-rbd/
1.2.配置KVM服务器连接Ceph集群
Qemu是在KVM服务器中直接创建的,因此需要配置KVM的服务器连接到Ceph集群,使用Ceph集群的RBD块存储。
1.安装ceph相关命令
# yum -y install ceph-common
2.拷贝ceph的配置文件
# scp -rp root@ip:/etc/ceph /etc/
3.查看集群的状态
# ceph -s
cluster 70d27aec-742e-4a95-b000-cf37ebba35d0
health HEALTH_OK
monmap e3: 3 mons at {compute1=17.24.14.5:6789/0,compute2=17.24.14.6:6789/0,compute3=17.24.14.7:6789/0}
election epoch 352, quorum 0,1,2 compute1,compute2,compute3
osdmap e29566: 131 osds: 128 up, 128 in
flags sortbitwise,require_jewel_osds
pgmap v191784797: 10240 pgs, 1 pools, 99538 GB data, 25555 kobjects
291 TB used, 174 TB / 465 TB avail
10234 active+clean
5 active+clean+scrubbing+deep
1 active+clean+scrubbing
1.3.在Ceph集群中为KVM创建一个资源池
# ceph osd pool create kvm_rbd 32 32
pool 'kvm_rbd' created
1.4.使用Qemu在RBD块存储中创建卷
1)在RBD中创建卷
命令:qemu-img create -f raw rbd:{资源池名称}/卷名 大小
# qemu-img create -f raw rbd:kvm_rbd/vs-centos7.img 500G
Formatting 'rbd:kvm_rbd/vs-centos7.img', fmt=raw size=5368709120000 cluster_size=0
2)查看创建的Qemu卷
# qemu-img info rbd:kvm_rbd/vs-centos7.img
image: rbd:kvm_rbd/vs-centos7.img
file format: raw
virtual size: 500.0G (536870912000 bytes)
disk size: unavailable
这个卷其实就是资源池中创建的一个块设备。
# rbd -p kvm_rbd ls
vs-centos7.img
# rbd info kvm_rbd/vs-centos7.img
rbd image 'vs-centos7.img':
size 500 GiB in 1280 objects
order 22 (4 MiB objects)
snapshot_count: 0
id: 19a9415778427
block_name_prefix: rbd_data.19a9415778427
format: 2
features: layering
op_features:
flags:
create_timestamp: Wed Apr 20 22:14:33 2022
access_timestamp: Wed Apr 20 22:16:43 2022
modify_timestamp: Wed Apr 20 22:14:33 2022
1.5.扩容卷的空间
# qemu-img resize rbd:kvm_rbd/vs-centos7.img 6G
Image resized
2.Libvirt使用Qemu为KVM虚拟机提供存储
Qemu已经通过RBD创建出来一个块存储,现在还无法为虚拟提供使用,想要让虚拟机的数据持久化到RBD块存储中,还需要配置Libvirt驱动,由Libvirt通过Qemu读取到Ceph集群的块存储,从而将Qemu在RBD中创建的块设备添加到虚拟机中,充当虚拟机的硬盘,持久化产生的数据。
官方文档:https://docs.ceph.com/en/quincy/rbd/libvirt/
KVM与Ceph对接,其实就是在Ceph的RBD资源池中创建一个KVM虚拟机可以使用的块设备,然后将块设备添加到虚拟机中进行使用,针对虚拟机的系统盘,也可以通过工具导入到Ceph的块存储中。
大致实现步骤:
1)在Ceph集群中创建一个资源池作为Qemu卷存储的块存储资源池。
2)创建一个用户用于Libvirt访问Ceph集群的块设备。
3)创建一个Qemu存储卷。
4)在KVM中创建Secret证书,存放访问Ceph集群的用户认证信息。
5)编辑虚拟机应用RBD块存储中的Qemu卷,存储虚拟机的数据。
其中1/2/3步骤都可以不做,在前面配置Qemu的到时候已经完成了,这里为了全面实现步骤,会全部都进行操作。
2.1.在Ceph集群中创建资源池
1.创建资源池
# ceph osd pool create kvm-libvirt-pool 16 16
pool 'kvm-libvirt-pool' created
2.将资源池初始化成RBD类型
# rbd pool init kvm-libvirt-pool
2.2.创建用于KVM访问RBD块存储的用户
# ceph auth get-or-create client.kvm-libvirt mon 'profile rbd' osd 'profile rbd pool=kvm-libvirt-pool'
key = AQBaK2BinaBzJxAAO8GmydNxxxxx2BUFhdw==
2.3.创建Qemu卷
# qemu-img create -f raw rbd:kvm-libvirt-pool/vs-centos-1-data.img 500G
Formatting 'rbd:kvm-libvirt-pool/vs-centos-1-data.img', fmt=raw size=536870912000 cluster_size=0
# qemu-img info rbd:kvm-libvirt-pool/vs-centos-1-data.img
image: rbd:kvm-libvirt-pool/vs-centos-1-data.img
file format: raw
virtual size: 500.0G (536870912000 bytes)
disk size: unavailable
2.4.将Ceph的认证用户写入到KVM的Secret中
首先将认证用户的名称写入到一个XML文件中,通过virsh命令的secret-define参数将带有用户名称的XML导入到KVM虚拟化中,此时会在KVM中生成一个Secret,每个Secret都有一个UUID,这个UUID可以理解成是Secret的名称,此时Secret中已经有用户名的信息了,最后再通过secret-set-value参数将认证用户的KEY写入到Secret中。
用户名称和Key都写入到Secret后,虚拟机在连接Ceph集群时,直接指定Secret的UUID即可使用。
1.编写带有认证用户名称的xml
# cat secret.xml
<secret ephemeral='no' private='no'>
<usage type='ceph'>
<name>client.kvm-libvirt secret</name>
</usage>
</secret>
#name中就是认证用户的名称
2.将认证用户的xml文件导入到KVM中生成一个Secret
# virsh secret-define --file secret.xml
生成 secret 66d9bec3-cbd7-4161-9614-1d0bc81c5e82
3.将认证用户的Key写入到Secret中
# virsh secret-set-value --secret 66d9bec3-cbd7-4161-9614-1d0bc81c5e82 --base64 AQBaK2BinaBzJxAAO8GmydNIxGc2fVn2BUFhdw==
secret 值设定
#--secret:secret的uuid
#--base64:用户的key
4.查看生成的Secret信息
# virsh secret-list
UUID 用量
--------------------------------------------------------------------------------
66d9bec3-cbd7-4161-9614-1d0bc81c5e82ceph client.kvm-libvirt secret
# virsh secret-dumpxml 66d9bec3-cbd7-4161-9614-1d0bc81c5e82
<secret ephemeral='no' private='no'>
<uuid>66d9bec3-cbd7-4161-9614-1d0bc81c5e82</uuid>
<usage type='ceph'>
<name>client.kvm-libvirt secret</name>
</usage>
</secret>
2.5.在虚拟机中应用RBD块存储中创建的块设备
需要编辑虚拟机的配置文件,在配置文件中添加新硬盘的信息,添加的硬盘就是Ceph RBD中Qemu创建的卷,也是块设备。
1)先停止运行虚拟机
虚拟机添加硬盘需要重启才能生效,可以先停止运行,添加完硬盘后再启动虚拟机。
# virsh destroy vs-centos-1
域 vs-centos-1 被删除
2)调整虚拟机的配置文件增加硬盘
在<devices>模块中添加一组<disk>,<disk>就是用来配置硬盘的信息。
在<source>中配置硬盘的来源,我们是Ceph集群的RBD块存储提供的硬盘,因此在protocol中要填写rbd,name中填写块设备的名称。
在<auth>中配置认证用户的Secret,在username中填写认证用户的名称、uuid填写secret的uuid。
# virsh edit vs-centos-1
<disk type='network' device='disk'>
<source protocol='rbd' name='kvm-libvirt-pool/vs-centos-1-data.img'>
<host name='192.18.0.20' port='6789'/>
<host name='192.18.0.21' port='6789'/>
<host name='192.18.0.22' port='6789'/>
</source>
<auth username='kvm-libvirt'>
<secret type='ceph' uuid='66d9bec3-cbd7-4161-9614-1d0bc81c5e82'/>
</auth>
<target dev='vdb' bus='virtio'/>
</disk>
3)启动虚拟机观察硬盘是否添加成功
两种方式可以查看虚拟机的硬盘,更倾向于后者,清晰明了。
# virsh qemu-monitor-command --hmp vs-centos-1 'info block'
drive-virtio-disk0: removable=0 io-status=ok file=/var/lib/libvirt/images/vs-centos-1.img ro=0 drv=qcow2 encrypted=0 bps=0 bps_rd=0 bps_wr=0 iops=0 iops_rd=0 iops_wr=0
drive-virtio-disk1: removable=0 io-status=ok file=rbd:kvm-libvirt-pool/vs-centos-1-data.img:id=kvm-libvirt:key=AQBaK2BinaBzJxAAO8GmydNIxGc2fVn2BUFhdw==:auth_supported=cephx\\;none:mon_host=192.168.20.20\\:6789\\;192.168.20.21\\:6789\\;192.168.20.22\\:6789 ro=0 drv=raw encrypted=0 bps=0 bps_rd=0 bps_wr=0 iops=0 iops_rd=0 iops_wr=0
drive-ide0-0-0: removable=1 locked=0 tray-open=0 io-status=ok
# virsh domblklist vs-centos-1
目标 源
------------------------------------------------
vda /var/lib/libvirt/images/vs-centos-1.img
vdb kvm-libvirt-pool/vs-centos-1-data.img
hda -
2.6.虚拟机使用RBD块存储提供的硬盘
RBD块存储提供的硬盘已经挂载到虚拟机中了,下面进入虚拟机中使用该硬盘。
由块存储提供的硬盘建议不分区,直接将整个盘进行挂载,后期扩容时非常方便。
lsblk
mkfs.xfs /dev/vdb
mkdir /data
mount /dev/vdb /data
df -hT
cd /data
touch file{1..5}.txt
ll
此时KVM虚拟机已经和Ceph集群的RBD块存储对接完成,由RBD块存储为虚拟机提供硬盘存储数据。
2.7.RBD提供给KVM虚拟机的硬盘扩容方法
1)扩容RBD块存储中块设备的空间
将原来的5G扩容到7G。
# qemu-img resize rbd:kvm-libvirt-pool/vs-centos-1-data.img 7G
Image resized.
2)重启虚拟机
KVM虚拟机硬盘空间扩容后,需要重启虚拟机才能识别到扩容后的空间大小。
# virsh destroy vs-centos-1
域 vs-centos-1 被删除
# virsh start vs-centos-1
域 vs-centos-1 已开始
3)查看硬盘空间是否生效
磁盘空间已生效。
3.将现有虚拟机本地的系统盘迁移到Ceph集群进行存储
首先将本地的系统盘导入到Ceph集群的RBD存储资源池中,形成一个新的块设备文件,然后来编辑虚拟机的配置文件,调整系统盘的信息即可完成迁移。
3.1.将本地的系统盘导入到Ceph集群的RBD中
命令格式:qemu-img convert -f qcow2 {本地数据盘路径} -O raw {rbd存储资源池块设备路径}
# qemu-img convert -f qcow2 /var/lib/libvirt/images/virtual-host.img -O raw rbd:kvm-libvirt-pool/vs-centos-1-sys.img
查看导入到RBD块存储的系统盘。
# rbd -p kvm-libvirt-pool ls
vs-centos-1-data.img
vs-centos-1-sys.img
# rbd info kvm-libvirt-pool/vs-centos-1-sys.img
rbd image 'vs-centos-1-sys.img':
size 10 GiB in 2560 objects
order 22 (4 MiB objects)
snapshot_count: 0
id: 19a5d559f577b
block_name_prefix: rbd_data.19a5d559f577b
format: 2
features: layering
op_features:
flags:
create_timestamp: Thu Apr 21 13:06:56 2022
access_timestamp: Thu Apr 21 13:06:56 2022
modify_timestamp: Thu Apr 21 13:08:58 2022
3.2.修改虚拟机的配置文件调整系统盘的路径
直接将现有系统盘的配置信息修改成下面的内容。
# virsh edit vs-centos-1
<disk type='network' device='disk'>
<driver name='qemu'/>
<auth username='kvm-libvirt'>
<secret type='ceph' uuid='66d9bec3-cbd7-4161-9614-1d0bc81c5e82'/>
</auth>
<source protocol='rbd' name='kvm-libvirt-pool/vs-centos-1-sys.img'>
<host name='192.168.20.20' port='6789'/>
<host name='192.168.20.21' port='6789'/>
<host name='192.168.20.22' port='6789'/>
</source>
<target dev='vda' bus='virtio'/>
</disk>
3.3.重启虚拟机
# virsh destroy vs-centos-1
域 vs-centos-1 被删除
# virsh start vs-centos-1
域 vs-centos-1 已开始
3.4.验证虚拟机是否可用
安全没问题。
4.实现类似云平台秒级部署虚拟机
在很多云平台中,例如阿里云、腾讯云等等,都是秒级就能够购买启动虚拟机,这是如何实现的呢?其实很简单,本章节就来实现如何在云平台秒级部署和启动虚拟机。
秒级部署启动虚拟机实现非常简单,其实就是将一个已经存在主机操作系统的块设备创建一个快照,并将快照启用保护模式,每当需要部署启动一个新的虚拟机时,就在快照的基础上创建一个链接镜像,链接镜像也相当是一块块设备,虚拟机会去应用这个块设备文件,从而完成虚拟机的快速部署。
如果快照丢失,就意味着链接镜像无法使用,从而导致虚拟机无法运行。
4.1.将现有虚拟机的系统镜像块设备创建一个快照
将系统盘对应的块设备创建一个快照并设置成保护模式。
# rbd snap create kvm-libvirt-pool/vs-centos-1-sys.img@centos-template
# rbd snap protect kvm-libvirt-pool/vs-centos-1-sys.img@centos-template
4.2.为新虚拟机提供克隆镜像
为即将要创建的虚拟机提供一个可以独立使用的系统镜像,需要在快照的基础上为新的虚拟机创建出克隆镜像,这个克隆的镜像就是一个块设备,可以立即开箱即用,挂载到虚拟机之后就可以运行出一个操作系统。
# rbd clone kvm-libvirt-pool/vs-centos-1-sys.img@centos-template kvm-libvirt-pool/clone-vm-1.img
# rbd clone kvm-libvirt-pool/vs-centos-1-sys.img@centos-template kvm-libvirt-pool/clone-vm-2.img
4.3.通过虚拟机文件准备多个虚拟机
KVM的虚拟机配置文件都位于/etc/libvirt/qemu/这个目录中,通过配置文件就可以快速创建出一个全新的虚拟机。
进入到虚拟机的配置文件目录,将现有的配置文件多拷贝几份,一个配置文件相当于一个虚拟机。
# cd /etc/libvirt/qemu/
# cp vs-centos-1.xml clone-vm-1.xml
# cp vs-centos-1.xml clone-vm-2.xml
4.4.编辑虚拟机的配置文件
在拷贝的虚拟机配置文件中将以下这些配置删除,否则会有问题。
<uuid>940a207d-a412-4f34-b1ba-c2ee8898f02b</uuid>
<mac address='52:54:00:eb:f6:97'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
4.4.1.vs-centos-1虚拟机的配置文件
# vim clone-vm-1.xml
<!--
WARNING: THIS IS AN AUTO-GENERATED FILE. CHANGES TO IT ARE LIKELY TO BE
OVERWRITTEN AND LOST. Changes to this xml configuration should be made using:
virsh edit vs-centos-1
or other application using the libvirt API.
-->
<domain type='kvm'>
<name>clone-vm-1</name> <!--虚拟机的名称-->
<memory unit='KiB'>1048576</memory>
<currentMemory unit='KiB'>1048576</currentMemory>
<vcpu placement='static'>1</vcpu>
<os>
<type arch='x86_64' machine='pc-i440fx-rhel7.0.0'>hvm</type>
<boot dev='hd'/>
</os>
<features>
<acpi/>
<apic/>
</features>
<cpu mode='custom' match='exact' check='partial'>
<model fallback='allow'>Nehalem-IBRS</model>
</cpu>
<clock offset='utc'>
<timer name='rtc' tickpolicy='catchup'/>
<timer name='pit' tickpolicy='delay'/>
<timer name='hpet' present='no'/>
</clock>
<on_poweroff>destroy</on_poweroff>
<on_reboot>restart</on_reboot>
<on_crash>destroy</on_crash>
<pm>
<suspend-to-mem enabled='no'/>
<suspend-to-disk enabled='no'/>
</pm>
<devices>
<emulator>/usr/libexec/qemu-kvm</emulator>
<disk type='network' device='disk'>
<driver name='qemu'/>
<auth username='kvm-libvirt'>
<secret type='ceph' uuid='66d9bec3-cbd7-4161-9614-1d0bc81c5e82'/>
</auth>
<source protocol='rbd' name='kvm-libvirt-pool/clone-vm-1.img'> <!--填写克隆的系统镜像块存储路径-->
<host name='192.168.20.20' port='6789'/>
<host name='192.168.20.21' port='6789'/>
<host name='192.168.20.22' port='6789'/>
</source>
<target dev='vda' bus='virtio'/>
</disk>
<disk type='file' device='cdrom'>
<driver name='qemu' type='raw'/>
<target dev='hda' bus='ide'/>
<readonly/>
<address type='drive' controller='0' bus='0' target='0' unit='0'/>
</disk>
<controller type='usb' index='0' model='ich9-ehci1'>
<address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x7'/>
</controller>
<controller type='usb' index='0' model='ich9-uhci1'>
<master startport='0'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0' multifunction='on'/>
</controller>
<controller type='usb' index='0' model='ich9-uhci2'>
<master startport='2'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x1'/>
</controller>
<controller type='usb' index='0' model='ich9-uhci3'>
<master startport='4'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x2'/>
</controller>
<controller type='pci' index='0' model='pci-root'/>
<controller type='ide' index='0'>
<address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/>
</controller>
<controller type='virtio-serial' index='0'>
<address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/>
</controller>
<interface type='network'>
<source network='default'/>
<model type='virtio'/>
</interface>
<serial type='pty'>
<target type='isa-serial' port='0'>
<model name='isa-serial'/>
</target>
</serial>
<console type='pty'>
<target type='serial' port='0'/>
</console>
<channel type='unix'>
<target type='virtio' name='org.qemu.guest_agent.0'/>
<address type='virtio-serial' controller='0' bus='0' port='1'/>
</channel>
<input type='tablet' bus='usb'>
<address type='usb' bus='0' port='1'/>
</input>
<input type='mouse' bus='ps2'/>
<input type='keyboard' bus='ps2'/>
<graphics type='vnc' port='5901' autoport='no' listen='0.0.0.0' passwd='123456'> <!--修改VNC的端口号-->
<listen type='address' address='0.0.0.0'/>
</graphics>
<video>
<model type='cirrus' vram='16384' heads='1' primary='yes'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
</video>
<memballoon model='virtio'>
<address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/>
</memballoon>
</devices>
</domain>
4.4.1.vs-centos-2虚拟机的配置文件
# vim clone-vm-2.xml
<!--
WARNING: THIS IS AN AUTO-GENERATED FILE. CHANGES TO IT ARE LIKELY TO BE
OVERWRITTEN AND LOST. Changes to this xml configuration should be made using:
virsh edit vs-centos-1
or other application using the libvirt API.
-->
<domain type='kvm'>
<name>clone-vm-2</name> <!--虚拟机的名称-->
<memory unit='KiB'>1048576</memory>
<currentMemory unit='KiB'>1048576</currentMemory>
<vcpu placement='static'>1</vcpu>
<os>
<type arch='x86_64' machine='pc-i440fx-rhel7.0.0'>hvm</type>
<boot dev='hd'/>
</os>
<features>
<acpi/>
<apic/>
</features>
<cpu mode='custom' match='exact' check='partial'>
<model fallback='allow'>Nehalem-IBRS</model>
</cpu>
<clock offset='utc'>
<timer name='rtc' tickpolicy='catchup'/>
<timer name='pit' tickpolicy='delay'/>
<timer name='hpet' present='no'/>
</clock>
<on_poweroff>destroy</on_poweroff>
<on_reboot>restart</on_reboot>
<on_crash>destroy</on_crash>
<pm>
<suspend-to-mem enabled='no'/>
<suspend-to-disk enabled='no'/>
</pm>
<devices>
<emulator>/usr/libexec/qemu-kvm</emulator>
<disk type='network' device='disk'>
<driver name='qemu'/>
<auth username='kvm-libvirt'>
<secret type='ceph' uuid='66d9bec3-cbd7-4161-9614-1d0bc81c5e82'/>
</auth>
<source protocol='rbd' name='kvm-libvirt-pool/clone-vm-2.img'> <!--填写克隆的系统镜像块存储路径-->
<host name='192.168.20.20' port='6789'/>
<host name='192.168.20.21' port='6789'/>
<host name='192.168.20.22' port='6789'/>
</source>
<target dev='vda' bus='virtio'/>
</disk>
<disk type='file' device='cdrom'>
<driver name='qemu' type='raw'/>
<target dev='hda' bus='ide'/>
<readonly/>
<address type='drive' controller='0' bus='0' target='0' unit='0'/>
</disk>
<controller type='usb' index='0' model='ich9-ehci1'>
<address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x7'/>
</controller>
<controller type='usb' index='0' model='ich9-uhci1'>
<master startport='0'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0' multifunction='on'/>
</controller>
<controller type='usb' index='0' model='ich9-uhci2'>
<master startport='2'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x1'/>
</controller>
<controller type='usb' index='0' model='ich9-uhci3'>
<master startport='4'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x2'/>
</controller>
<controller type='pci' index='0' model='pci-root'/>
<controller type='ide' index='0'>
<address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/>
</controller>
<controller type='virtio-serial' index='0'>
<address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/>
</controller>
<interface type='network'>
<source network='default'/>
<model type='virtio'/>
</interface>
<serial type='pty'>
<target type='isa-serial' port='0'>
<model name='isa-serial'/>
</target>
</serial>
<console type='pty'>
<target type='serial' port='0'/>
</console>
<channel type='unix'>
<target type='virtio' name='org.qemu.guest_agent.0'/>
<address type='virtio-serial' controller='0' bus='0' port='1'/>
</channel>
<input type='tablet' bus='usb'>
<address type='usb' bus='0' port='1'/>
</input>
<input type='mouse' bus='ps2'/>
<input type='keyboard' bus='ps2'/>
<graphics type='vnc' port='5902' autoport='no' listen='0.0.0.0' passwd='123456'> <!--修改VNC的端口号-->
<listen type='address' address='0.0.0.0'/>
</graphics>
<video>
<model type='cirrus' vram='16384' heads='1' primary='yes'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
</video>
<memballoon model='virtio'>
<address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/>
</memballoon>
</devices>
</domain>
4.5.将虚拟机配置文件导入到虚拟化平台
# virsh define clone-vm-1.xml
定义域 clone-vm-1(从 clone-vm-1.xml)
# virsh define clone-vm-2.xml
定义域 clone-vm-2(从 clone-vm-2.xml)
导入虚拟机后,虚拟机并不会运行,而是出于挂起状态,等待管理员手动启动。
# virsh list--all
Id 名称 状态
----------------------------------------------------
7 vs-centos-1 running
- clone-vm-1 关闭
- clone-vm-2 关闭
4.6.启动虚拟机验证是否能够秒级使用
# virsh startclone-vm-1
域 clone-vm-1 已开始
# virsh startclone-vm-2
域 clone-vm-2 已开始
待后期更新。
一、将客户端(宿主机或kvm虚拟机)和ceph存储进行连通
1.客户端安装ceph包:yum install ceph或 yum install ceph-common.x86_64(yum search ceph查询包名)
2.将ceph存储节点/etc/ceph目录下ceph.conf和ceph.client.admin.keyring拷贝到客户端的/etc/ceph目录下
3.检查连通性:在客户端执行ceph命令,如ceph -s,能看到ceph集群信息,说明客户端和ceph存储已连通
二、创建rbd盘并挂载给虚拟机
1、创建一个ceph user,下面的例子中使用client.libvirt用户和libvirt-pool池
ceph auth get-or-create client.libvirt mon 'profile rbd' osd 'profile rbd pool=libvirt-pool'
验证有效:ceph auth ls|grep client.libvirt
备注:以上命令,如果宿主机和ceph存储已连通,以上命令可在宿主机上执行,否则需在ceph存储上执行
2.创建secret.xml
cat > secret.xml <<EOF
<secret ephemeral='no' private='no'>
<usage type='ceph'>
<name>client.libvirt secret</name>
</usage>
</secret>
EOF
备注:以上命令在宿主机上全部复制并粘贴,最后回车
3.生成uuid
sudo virsh secret-define --file secret.xml
{uuid of secret}
4.获取client.libvirt的key并保存到文件
ceph auth get-key client.libvirt | sudo tee client.libvirt.key
5、设置secret的uuid
sudo virsh secret-set-value --secret {uuid of secret} --base64 $(cat client.libvirt.key) && rm client.libvirt.key secret.xml
将变量替换成实际的uuid和key
6、创建池libvirt-pool
ceph osd pool create libvirt-pool 64 64
7、创建rbd盘
rbd create --size 10G libvirt-pool/test1 --image-feature layering
查询存储池中的块:rbd ls libvirt-pool
8、关闭虚拟机,编辑虚拟机配置文件,并添加磁盘信息
关闭虚拟机:virsh shutdown vm
编辑虚拟机:virsh edit vm
在disk标签下增加如下信息:
<disk type='network' device='disk'>
<driver name='qemu' type='raw'/>
<auth username='libvirt'>
<secret type='ceph' uuid='{uuid of secret}'/>
</auth>
<source protocol='rbd' name='libvirt-pool/rbd_name'>
<host name='10.25.72.142' port='6789'/>
<host name='10.25.72.143' port='6789'/>
<host name='10.25.72.144' port='6789'/>
</source>
<target dev='vde' bus='virtio'/>
</disk>
备注:
需要修改上面5个参数:
1)username是建好的用户名:libvirt
2)uuid替换成第3步生成的uuid
3)host name后的ip为mon的ip和端口
mon的ip和端口,可以在/etc/ceph/ceph.conf中查看,可添加多个mon的ip
4)target dev为挂载后显示的盘符,例子中是vde,挂载后显示的盘符是/dev/vde
5)libvirt-pool/rbd_name是创建的rbd盘
9、查看虚拟机挂载的磁盘
virsh domblklist {vm-domain-name} --details
10、虚机开机,即可使用挂载的rbd盘
virsh start vm
页:
[1]