- Ceph block storage được sử dụng để cung cấp các block image cho các máy ảo . Ví dụ có thể khởi tạo một snapshot từ một image , sau đó thực hiện clone nhiều bản trên snap này một cách nhanh chóng
-
Ceph Block device có thể tích hợp trong QEMU virutal machine.
-
QEMU command sẽ trỏ đến : /etc/ceph/$cluster.conf và client.admin keyring khi thực hiện làm việc với RBD.
-
Thực hiện làm việc với RBD trên một node cài đặt QEMU-KVM và libvirt
yum install qemu-kvm ceph
- Copy cấu hình và keyring từ OSD node sang node QEMU
scp /etc/ceph/ceph.conf root@ceph_gateway:/etc/ceph/ceph.conf
scp /etc/ceph/ceph.client.admin.keyring root@ceph_gateway:/etc/ceph/ceph.client.admin.keyring
- Khởi tạo image
qemu-img create -f raw rbd:{pool-name}/{image-name} {size}
qemu-img create -f raw rbd:rdb_1/image3 1G
- Resize image
qemu-img resize rbd:{pool-name}/{image-name} {size}
qemu-img resize rbd:rdb_1/image3 10G
- Xem info của block device
qemu-img info rbd:{pool-name}/{image-name}
qemu-img info rbfad:rdb_1/image3
- Convert từ một image Centos7 của máy ảo thành block device image
wget https://cloud.centos.org/centos/7/images/CentOS-7-x86_64-GenericCloud-1503.qcow2
qemu-img convert -f qcow2 -O raw CentOS-7-x86_64-GenericCloud-1503.qcow2 rbd:rdb_1/cent-7
- Xem info disk
[root@ceph_gateway ~]# qemu-img info rbd:rdb_1/cent-7
image: rbd:rdb_1/cent-7
file format: raw
virtual size: 8.0G (8589934592 bytes)
disk size: unavailable
- Ceph hỗ trợ làm việc với QEMU/KVM thông qua soft interface libvirt.
- Hầu hết libivrt làm việc với ceph block device để cung cấp cho các giải pháp cloud như Openstack hoặc Cloudstack. Các giải pháp cloud làm viẹc với libvirtd để làm viiệc với QEMU/KVM, QEMU/KVM làm việc với Ceph block device. thông qua librbd
- Khởi tạo Pool cho RBD
ceph osd pool create libvirt-pool 128 128
rbd pool init libvirt-pool
- Khởi tạo image với qemu
qemu-img create -f rbd rbd:libvirt-pool/os-data 10G
rbd -p libvirt-pool ls
- Khởi tạo client username : libvirt
ceph auth get-or-create client.libvirt mon 'profile rbd' osd 'profile rbd pool=libvirt-pool'
-
Sau khi lab QEMU thành công, tiếp tục sử dụng môi trường sẵn ( bao gồm CEPH,file cấu hình, key, QEMU- KVM) và cài thêm các package để làm việc với libvirt API
-
Trên node QEMU - Libvirt cài đặt packagefa
yum install -y libvirt libvirt-python libguestfs-tools virt-install virt-viewer
systemctl start libvirtd
systemctl enable libvirtd
- Khởi tạo và define secret ( sử dụng UUII element cho các command phía dưới )
cat > secret.xml <<EOF
<secret ephemeral='no' private='no'>
<uuid>f8295cd6-3672-4820-afe5-d25ba89b0e6a</uuid>
<usage type='ceph'>
<name>client.libvirt secret</name>
</usage>
</secret>
EOF
virsh secret-define secret.xml
- Set key-value
ceph auth get-key client.libvirt | tee client.libvirt.key
ceph auth get client.libvirt -o /etc/ceph/keyring
virsh secret-set-value --secret f8295cd6-3672-4820-afe5-d25ba89b0e6a --base64 $(cat client.libvirt.key)
- Khởi tạo pool cho libvirt. Trường "libvirt-pool", sẽ là tên pool trên RBD đã được khởi tạo . UUID được định nghĩa bởi secret-define
cat > ceph-libvirt-pool.xml <<EOF
<pool type='rbd'>
<name>ceph-libvirt-pool</name>
<source>
<host name='192.168.30.145' port='6789'/>
<name>libvirt-pool</name>
<auth username='libvirt' type='ceph'>
<secret type='ceph' uuid='f8295cd6-3672-4820-afe5-d25ba89b0e6a'/>
</auth>
</source>
</pool>
EOF
virsh pool-dumpxml ceph-libvirt-pool
virsh pool-destroy ceph-libvirt-pool
virsh pool-undefine ceph-libvirt-pool
virsh pool-define ceph-libvirt-pool.xml
virsh pool-start ceph-libvirt-pool
virsh pool-autostart ceph-libvirt-pool
- Wget ISO
wget https://mirrors.edge.kernel.org/centos/7.6.1810/isos/x86_64/CentOS-7-x86_64-Minimal-1810.iso -O /var/lib/libvirt/images/Centos-7.iso
-
Sau khi cấu hình xong pool, libvirt sẽ xuất hiện một pool mới mang tên : ceph-libvirt-pool
-
Khởi động máy ảo
virt-install \
--virt-type=kvm \
--name centos7 \
--ram 1024 \
--disk size=10,pool=ceph-libvirt-pool \
--vcpus 1 --os-type linux \
--os-variant=centos7.0 \
--graphics spice,listen=0.0.0.0,keymap=en-us \
--cdrom=/var/lib/libvirt/images/Centos-7.iso
- Sau khi máy ảo khởi, trong file domain sẽ xuất hiện
<disk type='network' device='disk'>
<driver name='qemu' type='raw'/>
<auth username='libvirt'>
<secret type='ceph' uuid='f8295cd6-3672-4820-afe5-d25ba89b0e6a'/>
</auth>
<source protocol='rbd' name='libvirt-pool/centos7'>
<host name='192.168.30.145' port='6789'/>
</source>
<target dev='vda' bus='virtio'/>
<alias name='virtio-disk0'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
</disk>