
一、创建 Ceph 存储池(用于 KVM 虚拟机)
1、创建存储池(副本数设为2,生产环境建议3,需OSD数量≥副本数)
ceph osd pool create kvm-pool 128 128 replicated
2、启用存储池的RBD功能(Ceph块存储接口,KVM通过RBD对接)
rbd pool init kvm-poolceph osd pool application enable kvm-pool rbd
二、创建 Ceph 客户端用户(KVM 专用)
1. 创建用户(用户名:kvm-client,所属池:kvm-pool)
ceph auth get-or-create client.kvm-client mon 'allow r' osd 'allow class-read object_prefix rbd_children, allow rwx pool=kvm-pool'
2.导出用户密钥文件(保存到KVM宿主机,后续对接用)
ceph auth get client.kvm-client -o /etc/ceph/ceph.client.kvm-client.keyringll -l /etc/ceph/
三、复制 Ceph 配置与密钥到 KVM 宿主机
1.在Ceph Admin节点执行,复制到KVM宿主机(替换<kvm-host-ip>为KVM宿主机IP)
scp /etc/ceph/ceph.conf ceph02:/etc/ceph/scp /etc/ceph/ceph.client.kvm-client.keyring ceph02:/etc/ceph/scp /etc/ceph/ceph.conf ceph03:/etc/ceph/scp /etc/ceph/ceph.client.kvm-client.keyring ceph03:/etc/ceph/
2.在KVM宿主机设置文件权限(避免权限不足) 所有主机
chmod 644 /etc/ceph/ceph.confchmod 600 /etc/ceph/ceph.client.kvm-client.keyring # 密钥文件需严格限制权限ll -l /etc/ceph/
四、验证 KVM 宿主机与 Ceph 的连通性
1. 检查Ceph集群状态(使用kvm-client用户)
ceph -s --id kvm-client
2. 列出kvm-pool中的RBD镜像(初始为空,正常输出无报错即可)
rbd ls -p kvm-pool --id kvm-clientrbd ls -l kvm-pool
若输出health: OK且无权限报错,说明 Ceph 对接正常。
五.KVM 宿主机环境配置
1. 安装KVM组件(以CentOS为例,Ubuntu类似)
yum install -y qemu-kvm libvirt virt-install virt-manager bridge-utils
2. 启动libvirtd服务并设置开机自启
systemctl start libvirtdsystemctl enable libvirtdsystemctl status libvirtd
3. 验证KVM模块加载(输出有kvm字样即正常)
lsmod | grep kvm
六.配置 libvirt 识别 Ceph RBD 存储
1、密钥UUID,需提前创建
提取 Ceph 客户端的密钥内容先从之前复制的ceph.client.kvm-client.keyring 文件中获取密钥值:
grep key /etc/ceph/ceph.client.kvm-client.keyring | awk '{print $3}'
[root@ceph01 ~]# grep key /etc/ceph/ceph.client.kvm-client.keyring | awk '{print $3}'AQBLjtNoRLvmFRAAmNIR+bpnjoBrb0RjoAC4TA==
输出类似:AQBM...xyz==(这是 Ceph 客户端的密钥,需记录下来)。
2、创建 libvirt 密钥并生成 UUID
执行以下命令创建一个 libvirt 密钥对象,同时会自动生成一个 UUID:
# 生成密钥定义(包含随机 UUID)
cat > /home/ceph-secret.xml <<EOF<secret type='ceph'> <uuid>$(uuidgen)</uuid></secret>EOF
virsh secret-define --file /home/ceph-secret.xml

3、将 Ceph 密钥内容写入 libvirt 密钥对象
使用上一步生成的 UUID,将Ceph 密钥写入
virsh secret-set-value \
--secret 9ae556f6-c927-4134-bd05-bf70d9d01984 \ # 替换为实际生成的 UUID
--base64 "AQBLjtNoRLvmFRAAmNIR+bpnjoBrb0RjoAC4TA==" # 替换为步骤1提取的 Ceph 密钥
virsh secret-set-value \ --secret 9ae556f6-c927-4134-bd05-bf70d9d01984 \ --base64 "AQBLjtNoRLvmFRAAmNIR+bpnjoBrb0RjoAC4TA=="

4、创建libvirt存储池定义文件(如ceph-kvm-pool.xml):
vi /home/ceph-rbd-pool.xml
<pool type='rbd'> <!-- libvirt存储池名称 --> <name>ceph-kvm-pool</name> <source> <!-- Ceph Monitor节点IP --> <host name='ceph01' port='6789'/> <host name='ceph02' port='6789'/> <host name='ceph03' port='6789'/> <!-- 关键:添加 type='ceph' 声明认证类型 --> <auth type='ceph' username='kvm-client'> <!-- 密钥UUID,需提前创建 --> <secret type='ceph' uuid='9ae556f6-c927-4134-bd05-bf70d9d01984'/> </auth > <!-- Ceph存储池名称 --> <name>kvm-pool</name> </source ></pool >
5、导入存储池定义并激活
virsh pool-define /home/ceph-rbd-pool.xmlvirsh pool-start ceph-kvm-poolvirsh pool-autostart ceph-kvm-pool # 设置开机自启
virsh pool-list --all | grep ceph-kvm-pool

7、查看存储池中是否有卷
virsh vol-list ceph-kvm-pool
如果仍担心存储池功能异常,可以通过以下命令确认其“可读写” 和 “正常交互” 能力:
8.1. 查看存储池的详细配置(确认连接方式、路径等正确)
virsh pool-dumpxml ceph-kvm-pool
virsh vol-create-as ceph-kvm-pool test-vol 1G # 创建1GB的测试卷
virsh vol-list ceph-kvm-pool | grep test-vol
virsh vol-delete --pool ceph-kvm-pool test-vol
七.创建 KVM 虚拟机(基于 Ceph 存储池)
7.1、授权qemu用户访问/home/iso目录
mkdir -p /home/iso# 设置目录权限,允许qemu用户访问# 给其他用户添加执行权限(允许进入目录)chmod o+x /homechmod o+x /home/iso如果ISO文件已在目录中,设置文件权限(允许读取)chmod o+r /home/iso/*.iso
7.2、存储池ceph-kvm-pool中创建系统硬盘卷
virsh vol-create-as ceph-kvm-pool rocky221-system 50GiB --format rawvirsh vol-create-as ceph-kvm-pool rocky221-data1 80GiB --format rawvirsh vol-create-as ceph-kvm-pool rocky221-data2 80GiB --format rawvirsh vol-create-as ceph-kvm-pool rocky221-data3 80GiB --format raw
7.3、查看卷
virsh vol-list ceph-kvm-pool
7.4、命令行创建虚拟机(推荐,无图形化也可用)
virt-install \ --name rocky221 \ --memory 2096 \ --vcpus 1 \ --cpu host-model \ --cdrom /home/iso/Rocky-9.6-x86_64-minimal.iso \ --disk vol=ceph-kvm-pool/rocky221-system,bus=virtio \ --disk vol=ceph-kvm-pool/rocky221-data1,bus=virtio \ --disk vol=ceph-kvm-pool/rocky221-data2,bus=virtio \ --disk vol=ceph-kvm-pool/rocky221-data3,bus=virtio \ --network bridge=br0,model=virtio \ --graphics vnc,listen=0.0.0.0,port=5901 \ --os-variant rocky9 \ --noautoconsole
7.5、查看KVM 存储池
[root@ceph01 ceph]# virsh pool-list --allName State Autostart-------------------------------------ceph-kvm-pool active yesiso active yes
7.6、对虚拟机磁盘卷镜像扩容
[root@ceph01 ceph]# virsh list --all Id Name State--------------------------- - rocky221 shut off [root@ceph01 ceph]# virsh restart rocky221error: unknown command: 'restart'[root@ceph01 ceph]# virsh start rocky221Domain 'rocky221' started [root@ceph01 ceph]# virsh destroy rocky221Domain 'rocky221' destroyed [root@ceph01 ceph]# virsh vol-info --pool ceph-kvm-pool rocky221-systemName: rocky221-systemType: networkCapacity: 50.00 GiBAllocation: 50.00 GiB [root@ceph01 ceph]# virsh vol-resize --pool ceph-kvm-pool rocky221-system 60GiBSize of volume 'rocky221-system' successfully changed to 60GiB [root@ceph01 ceph]# virsh vol-info --pool ceph-kvm-pool rocky221-systemName: rocky221-systemType: networkCapacity: 60.00 GiBAllocation: 60.00 GiB [root@ceph01 ceph]# virsh start rocky221Domain 'rocky221' started
八.对虚拟机进行快照

# 为系统盘创建快照(格式:rbd snap create <存储池>/<卷名>@<快照名>
rbd snap create kvm-pool/rocky221-system@snap_20250925
# 查看系统盘的快照列表
rbd snap list kvm-pool/rocky221-system

# 删除系统盘的某个快照
rbd snap rm kvm-pool/rocky221-system@snap_20250925
# 批量删除系统盘的所有快照(谨慎操作)
rbd snap purge kvm-pool/rocky221-system
九.恢复快照(需先暂停 / 关闭虚拟机,避免数据不一致)
9.1、暂停虚拟机(或 shutdown 关闭)
virsh shutdown rocky221
9.2、恢复系统盘快照(会覆盖当前数据,务必确认)
rbd snap rollback kvm-pool/rocky221-system@snap_20250925
rbd snap rollback kvm-pool/rocky221-data1@snap_20250925
9.4、 恢复虚拟机运行
virsh start rocky221

也可以根据ceph 监控界面对系统盘镜进行快照

本文链接:https://www.kinber.cn/post/6275.html 转载需授权!
推荐本站淘宝优惠价购买喜欢的宝贝:

支付宝微信扫一扫,打赏作者吧~
