×

ceph + kvm 集成方案指南

hqy hqy 发表于2026-02-26 17:32:00 浏览5 评论0

抢沙发发表评论

图片


一、创建 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 # 设置开机自启
6、验证存储池状态(状态为running即正常)

virsh pool-list --all | grep ceph-kvm-pool
图片

7、查看存储池中是否有卷


virsh vol-list ceph-kvm-pool
8、如何进一步验证存储池可用性(可选)

如果仍担心存储池功能异常,可以通过以下命令确认其“可读写” 和 “正常交互” 能力:

8.1. 查看存储池的详细配置(确认连接方式、路径等正确)


virsh pool-dumpxml ceph-kvm-pool
8.2.  尝试在存储池中创建一个临时小卷(验证写入能力)

virsh vol-create-as ceph-kvm-pool test-vol 1G # 创建1GB的测试卷
8.3. 查看测试卷是否存在(验证读取能力)

virsh vol-list ceph-kvm-pool | grep test-vol
8.4. 删除临时测试卷(清理环境)

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
9.3 恢复数据盘快照(若有)

rbd snap rollback kvm-pool/rocky221-data1@snap_20250925

9.4 恢复虚拟机运行


virsh start rocky221
图片

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

图片


打赏

本文链接:https://kinber.cn/post/6275.html 转载需授权!

分享到:


推荐本站淘宝优惠价购买喜欢的宝贝:

image.png

 您阅读本篇文章共花了: 

群贤毕至

访客