找回密码
 注册
查看: 227|回复: 2

使用virsh的kvm虚机加载ceph分布式存储

[复制链接]

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
发表于 2024-10-31 23:23:02 | 显示全部楼层 |阅读模式
购买主题 本主题需向作者支付 3 金钱 才能浏览

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
 楼主| 发表于 2024-11-1 10:21:20 | 显示全部楼层
libvirt 库是管理程序和软件应用间的一个虚拟机抽象层。通过 libvirt ,开发者和系统管理员只需要关注这些管理器的一个通用管理框架、通用 API 、和通用 shell 接口(即 virsh )即可,包括:
  X7 h7 j! N) o9 E* g* g+ \" \+ p* T' F- M& E
QEMU/KVM
$ m! ^0 i9 r+ T! B2 d1 mXEN$ t4 `+ @# V9 b8 K% S4 g, D
LXC
- K" \$ A2 U2 f; ~/ H- z0 r: FVirtualBox
6 O2 ]4 S. S- y' K( K1 {2 I等等
0 Z- m. o- ?5 D! A; iCeph 块设备支持 QEMU/KVM ,所以你可以通过能与 libvirt 交互的软件来使用 Ceph 块设备。下面的堆栈图解释了 libvirt 和 QEMU 如何通过 librbd 使用 Ceph 块设备。& _! u8 C  l1 P- H7 a3 @5 c6 j

7 E8 P5 l& J" V
) |1 \$ }0 Z' h8 A5 F
' \6 e6 A6 S/ @0 Y  _libvirt 常见于为云解决方案提供 Ceph 块设备,像 OpenStack 、 ClouldStack 。它们用 libvirt 和 QEMU/KVM 交互、 QEMU/KVM 再通过 librbd 与 Ceph 块设备交互。详情见块设备与 OpenStack 和块设备与 CloudStack 。关于如何安装见安装。8 z8 J3 D* X7 S
* B; |( I  t' _  I
你也可以通过 libvirt 、 virsh 和 libvirt API 使用 Ceph 块设备,详情见 libvirt 虚拟化 API 。
0 [) Q' e$ I! ~2 h$ M3 v' ]9 g- j- j
2 k! x) A, C( Q, p6 C要创建使用 Ceph 块设备的虚拟机,请参照下文中的步骤。在示范性实施例中,我们用 libvirt-pool 作为存储池名、 client.libvirt 作为用户名、 new-libvirt-image 作为映像名。你可以任意命名,但请确保在后续过程中用自己的名字替换掉对应名字。
; I% m+ d. Y0 v2 A" f5 j
9 }* I9 W2 f; f. w" c/ ?% B' {! v配置 Ceph$ ^2 l; x) g7 {: Y! C
配置 Ceph 用于 libvirt ,执行下列步骤:
& c& M7 C  ]% ~! O% c* y7 j
! s0 Q+ C; J* E- |* l创建——存储池(或者用默认的)。本例用 libvirt-pool 作存储池名,设定了 128 个归置组。
; C$ v9 |& a  y, v: T8 V' t% Z" |5 j, q
ceph osd pool create libvirt-pool 128 128
$ W* U8 t: ?! \. ]- j; T验证存储池是否存在。+ p( @4 ]1 r2 W2 ?
! x0 v. h! H1 a- e2 J
ceph osd lspools
( f1 K1 @# J  F. m! X创建—— Ceph 用户( 0.9.7 及之前的版本用 client.admin ),本例用 client.libvirt 、且权限限制到 libvirt-pool 。
" b6 \! Q! D" V( P0 v$ c( e  w4 q! ?; j: V; x6 f6 J
ceph auth get-or-create client.libvirt mon 'allow r' osd 'allow class-read object_prefix rbd_children, allow rwx pool=libvirt-pool'
: |4 x; V6 ]  Z4 A验证名字是否存在。
! g! Q2 L. Q1 P/ T3 |9 N, U! |1 ], P# z( }0 c- H8 ]6 ?. T
ceph auth list4 Z* v$ t. y  ^$ m; E
注: libvirt 访问 Ceph 时将用 libvirt 作为 ID ,而不是 client.libvirt 。关于 ID 和名字不同之处的详细解释请参考用户管理——用户和用户管理——命令行界面。- \% X% l4 V' L; ~& I3 @- V; T
3 e' e0 [" K3 ]3 A; k+ r
用 QEMU 在 RBD 存储池中创建映像。本例中映像名为 new-libvirt-image 、存储池为 libvirt-pool 。- e3 N9 ]- |/ w4 i1 o
! V# s  M, R# y- E* o
qemu-img create -f rbd rbd:libvirt-pool/new-libvirt-image 2G
& j& [4 U5 h) h4 ?8 s2 O& `" j验证映像是否存在。9 K4 t3 Y' u0 M7 }, P* u& `

% A5 j4 V# A0 `( @2 h% V3 Crbd -p libvirt-pool ls
: T" c+ Z  \/ i$ d. R* }3 c6 _) @$ `注:你也可以用 rbd create 创建映像,但我们建议使用示例中的命令,来顺便确认 QEMU 可正常运行。
5 Z$ i+ l# I( R" b2 u# @
0 H% O3 _1 W4 Z1 f准备虚拟机管理器* U% |) Q% E( z) e
即使没 VM 管理器你也可以用 libvirt ,但是用 virt-manager 创建域更简单。) t7 u9 Q) p2 `+ s6 }% A

$ h! D; e3 }# m2 V' v4 w安装虚拟机管理器,详情见 KVM/VirtManager 。
! l: Y0 I* F$ g7 Q8 U0 a' G; x( I' W* x
sudo apt-get install virt-manager7 _! }  }3 Z( z+ T" ~
下载一个 OS 映像(如有必要)。
; L( ^- }+ P" R1 N
5 R& p$ n- K4 `2 \启动虚拟机管理器。
) G$ K- i. [6 ~* c, t$ }, \" `- ]
0 |! z) F& c! f" Y' u" Msudo virt-manager
# G/ O9 q. u1 W2 B! \. m& Z- q6 E新建虚拟机# J/ q& ]9 ^: B7 b
要用 virt-manager 创建 VM ,请按下列步骤:& I0 @9 K$ c6 Z: }

" e1 x; O; L( C1 F0 s点击 Create New Virtual Machine 按钮。
( y) a/ m$ Z' D* S) A1 G) E" s
# o% o: W& d5 w4 Y8 i命名新虚拟机的域,本例中我们用 libvirt-virtual-machine 。你可以任意命名,但请在后续命令行和配置实例中替换 libvirt-virtual-machine 为你自己选择的名字。! E: _4 C! ~& W3 O+ n
, }& m. ^3 ^. L6 i
libvirt-virtual-machine& m% X. _) \  m8 z' u
导入映像。1 P9 M, L* y! [2 z6 |

1 g# X; r+ z4 [) e# q. d: W/path/to/image/recent-linux.img+ J5 @  g; Y, J7 [2 V% }' H" E% X
注:请导入一个较新的映像。一些较老的映像未必能正确地重扫虚拟设备。
& Z7 \6 i! J% g. x/ p# M' n# I% B- k7 K
配置并启动 VM 。
" \4 e/ g& x, c6 _, C1 S5 \# W7 L
' F" ?, I0 f  {5 t% R可以用 virsh list 验证 VM 域是否存在。
' N, C3 y" l+ z' Z& o5 T- W
; n& j/ X( j. u! G( D. isudo virsh list; R. ]1 ?7 [& {+ N8 \
登入 VM ( root/root ): K& F; H% D1 j9 o, N
. s5 i$ y; ?; t% V! V
在修改配置让它使用 Ceph 前,请先停止 VM 。# r7 E! g6 q+ y3 R' E

6 |5 O/ L% J5 m# P配置 VM  B( k. p3 T: t6 f! D
配置 VM 使用 Ceph 时,切记尽量用 virsh 。另外, virsh 命令通常需要 root 权限(如 sudo ),否则不会返回正确结果或提示你需要 root 权限。 virsh 命令参考见 Virsh 命令参考。
* z' h' g5 J- u! C) i3 x# R& ^% Q! ?. H$ D. g6 w1 B5 K
用 virsh edit 打开配置文件。$ j; ?  }6 y0 _) i

/ K8 s2 [2 s( v$ Bsudo virsh edit {vm-domain-name}9 b  T: ?+ g# q. _: L  x2 J
<devices> 下应该有 <disk> 条目。9 b* r$ R' `) |4 }. ?6 _/ f
. m* a* g2 M0 r! ?/ a2 M+ M
<devices>
$ j3 B3 L  B) _) _+ D; ]) B        <emulator>/usr/bin/kvm</emulator>
+ e2 x6 ]- X2 W# j* Q        <disk type='file' device='disk'>1 n/ }& _  T/ ^
                    <driver name='qemu' type='raw'/>; ~) g  |7 H" V# S$ J
                    <source file='/path/to/image/recent-linux.img'/>
2 z2 c6 v5 B+ o7 \7 e  e- ]' _                    <target dev='vda' bus='virtio'/>
9 n/ t4 k' K0 u4 ^                    <address type='drive' controller='0' bus='0' unit='0'/>$ P& E0 o2 j9 g- c" o% o
        </disk>2 M. `8 x* }  k+ }3 j% D3 ?
用你的 OS 映像路径替换 /path/to/image/recent-linux.img 。使用较快的 virtio 总线的最低内核版本是 2.6.25 ,参见 Virtio 。
) I, Z% C( I, T5 `+ _  e( D; E1 l$ M' r$ T8 h
重要:要用 sudo virsh edit 而非文本编辑器,如果你用文本编辑器编辑了 /etc/libvirt/qemu 下的配置文件, libvirt 未必能识别出这些更改。如果 /etc/libvirt/qemu 下的 XML 文件和 sudo virsh dumpxml {vm-domain-name} 输出结果内容不同, VM 可能会运行异常。
8 B$ B5 }4 n  S4 B
8 Q. z# F; `3 y  l. w5 |5 {0 K把你创建的 Ceph RBD 映像创建为 <disk> 条目。
; }" P& O9 t: u; c5 C5 f/ N- _( |# @* z0 ]
<disk type='network' device='disk'>
) J5 ~* W" m: \6 g+ `( p- U        <source protocol='rbd' name='libvirt-pool/new-libvirt-image'>
1 x+ F: r) q8 f, c                    <host name='{monitor-host}' port='6789'/>7 ]+ Q# W1 t7 H2 h
        </source>
) U5 B3 h2 O3 G" Z' X        <target dev='vda' bus='virtio'/>
8 j3 w4 M, Z+ D1 l/ L' C! R) n" x% ]</disk>: v4 h2 h2 z1 V; s* A$ Z; {
用你的主机名替换 {monitor-host} ,可能还要替换存储池和/或映像名。你可以为 Ceph monitor 添加多条 <host> , dev 属性是将出现在 VM /dev 目录下的逻辑设备名。可选的 bus 属性是要模拟的磁盘类型,有效的设定值是驱动类型,如 ide 、 scsi 、 virtio 、 xen 、 usb 或 sata 。( r/ c! O  t. S: o" i; r  p
1 B/ d6 A: c8 y$ h# E6 W: M
关于 <disk> 标签及其子标签和属性,详见硬盘。* Z; v6 |; }$ c9 j# ?

8 I& n# e3 Y3 m- D保存文件。& o' Y- F- W, K$ J) H
" V0 }5 H! G* n# z. l& r9 |
如果你的 Ceph 存储集群启用了 Ceph 认证(默认已启用),那么必须生成一个 secret。" |+ z  u0 Z2 l# _7 r
6 O) Q% ^9 r- p. v- X
cat > secret.xml <<EOF; j4 C  m: T+ z9 @' i
<secret ephemeral='no' private='no'>
' }% m2 u8 s1 a' f# M        <usage type='ceph'>* P$ q+ @0 h% k6 e$ D' B4 h) h
                <name>client.libvirt secret</name>; u2 p+ ]' f) d2 x4 P# v
        </usage>' M+ f$ y; w" l+ h' q7 O% \, K0 L
</secret>2 J( ]; K( g5 b# v+ K
EOF$ H* e' v3 b9 p: W7 t% E# ]
定义 secret。
7 U6 O* V' H2 S3 k" J) t8 M0 ]& l( N. z4 w" R0 |# l$ r
sudo virsh secret-define --file secret.xml6 u" [& c  O' {8 t
<uuid of secret is output here>
( X7 U4 h5 C, q! x获取 client.libvirt 密钥并把字符串保存于文件。" N: w) L* I8 m1 `
$ T; T) I7 C1 j  R' X
ceph auth get-key client.libvirt | sudo tee client.libvirt.key
, t. u+ D/ K" |. p9 U: W0 U设置 secret 的 UUID 。$ b  }9 p# Q" @' T' U

9 `! `) q1 S$ `$ z9 Q0 C4 o% i8 ]sudo virsh secret-set-value --secret {uuid of secret} --base64 $(cat client.libvirt.key) && rm client.libvirt.key secret.xml
3 c- B5 N7 ^4 v4 Q2 N% {还必须手动设置 secret,把下面的 <auth> 条目添加到前面的 <disk> 标签内(用上一命令的输出结果替换掉 uuid 值)。9 p) Y1 @/ ?' ]5 a
5 u4 V" V+ w/ g* X
sudo virsh edit {vm-domain-name}& O+ W/ q$ |2 h% g
然后,把 <auth></auth> 标签加进域配置文件:4 T/ |2 |7 G7 Y

3 T/ d' i2 K3 G. Q* S. X...- k. p, w# p9 u! o; U
</source>6 d% ?+ _# w6 H/ N9 d2 J& i
<auth username='libvirt'>! @* r, t/ i6 G) h' g" w8 T
        <secret type='ceph' uuid='9ec59067-fdbc-a6c0-03ff-df165c0587b8'/>
1 X7 Y1 y9 J7 @' @% r</auth>: y4 C- B7 }* m- h6 x
<target ..." a- N7 e/ v. x% I: |  _9 N3 s9 i
注:示例 ID 是 libvirt ,不是第 2 步配置 Ceph 生成的 Ceph 名 client.libvirt 。确保你用的是 Ceph 名的 ID 部分。如果出于某些原因你需要更换 secret,必须先执行 sudo virsh secret-undefine {uuid} ,然后再执行 sudo virsh secret-set-value 。' B- N# R8 x) K' C7 @2 i
5 X* u. G' T9 b! w
总结( ~$ ~( V$ y: {7 v: k
一旦完成上面的配置,你就可以启动 VM 了。为确认 VM 和 Ceph 在通信,你可以执行如下过程。
; J5 c# s/ Q, [' ~! h5 o
; F6 v. H4 O  A+ H检查 Ceph 是否在运行:
* R( [5 Y9 e" j2 n
: E! T+ W5 q/ ~! ]4 w& `+ b8 o+ Vceph health5 y& _3 t5 V1 \2 N
检查 VM 是否在运行。4 L/ f7 w! y: }
! ]0 ?; G0 c# L& ~
sudo virsh list- r7 G4 b( T/ B! y7 ~$ ]- E
检查 VM 是否在和 Ceph 通信,用你的 VM 域名字替换 {vm-domain-name} :
& }* ^) p7 d7 p" s! n
) P2 p, @+ v2 Jsudo virsh qemu-monitor-command --hmp {vm-domain-name} 'info block'
/ ^2 K+ U/ x. E" ?4 T6 f: U' q检查一下 <target dev='hdb' bus='ide'/> 定义的设备是否出现在 /dev 或 /proc/partitions 里。4 \) f( J  j7 ~3 F' g' B
: w7 R) d: s/ L0 K
ls dev/ ]* B6 d" j' d
cat proc/partitions
4 f. W; o9 f6 P2 K7 K" l2 Y' d6 l如果看起来一切正常,你就可以在虚拟机内使用 Ceph 块设备了。% ~% A& C; H" j; Z* U  L" H; l
6 O# {& _* {5 J

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
 楼主| 发表于 2024-11-15 23:25:35 | 显示全部楼层
$ virsh secret-define --file secret.xml . a  Y1 D" N, Y/ U  S
Secret 3d5f35f2-7fd8-4b3c-8c86-7b40ec8f5c5b created
0 b, ^/ X  j. P9 n# t
1 w& ]3 O& N. w6 D- n, Yroot@gm268-1 23:21:04 ~- @+ ^! S% \% S6 W. i2 u- D  M4 [
$ virsh secret-list $ h# g: Q' u5 p. W# q6 O4 v
UUID                                   Usage
# r$ l  S& f$ n9 s-------------------------------------------------------------------# ^/ n  z4 d2 t; O: E
3d5f35f2-7fd8-4b3c-8c86-7b40ec8f5c5b   ceph client.cinder secret
" T1 a) S1 V6 @! o* I1 J1 P; Y
& k; M9 q" S+ ]$ r0 \( M3 h0 ?root@gm268-1 23:21:10 ~* l1 i4 \# g, t+ Y- s, I4 l
$ ceph auth get-key client.cinder |sudo tee client.cinder,key
( F9 Q+ Y8 r( g) r4 `AQDMgQ9nOz4CIhAAcwnv8rvNYNe5oE5hnU2Y9A==; R# m& o- v4 {
root@gm268-1 23:22:03 ~
4 a# ^& a+ B7 Z) K+ w. ]8 A$ : q# d' l  V1 R! b

/ G. W1 v# D* x) S$ t& z4 Z. p3 r; ~: c% v% _* B7 F
' ]9 ?# [( j) j2 s- s$ w) r
$ cat client.cinder,key ) }+ c, @& v0 i. ]6 O/ E# m# J9 @
AQDMgQ9nOz4CIhAAcwnv8rvNYNe5oE5hnU2Y9A==root@gm268-1 23:22:12 ~
0 Y) ?1 R* l+ i$ w9 G# ~, O$ virsh secret-set-value --secret 3d5f35f2-7fd8-4b3c-8c86-7b40ec8f5c5b --base64 $(cat client.cinder,key)
2 J, Q8 ?* ?% j; m# p' A* D  P, ESecret value set' f: w/ a) D6 r, ^3 M/ Q+ Y3 R5 t

& Z- m! ?' Q0 R3 c9 M% `6 \* [7 E) P4 [, o  S
9 S' h9 O5 |9 ]) m& H; `2 U
root@gm268-1 23:23:58 ~) T* m$ W0 Q9 [
$ virsh secret-get-value
2 z0 O7 m# x3 x$ \$ j# d) `error: command 'secret-get-value' requires <secret> option
8 Q3 F8 E1 b; g7 i; ~% [root@gm268-1 23:24:10 ~
' P$ q. d- {4 g$ virsh secret-get-value 3d5f35f2-7fd8-4b3c-8c86-7b40ec8f5c5b
- _: Z6 [9 a! \: J( g6 cAQDMgQ9nOz4CIhAAcwnv8rvNYNe5oE5hnU2Y9A==
, E! K3 H, l3 Groot@gm268-1 23:24:24 ~
! [0 O! {3 f8 m1 I
您需要登录后才可以回帖 登录 | 注册

本版积分规则

返回首页|Archiver|手机版|小黑屋|易陆发现技术论坛 ( 蜀ICP备2026014127号-1 )

GMT+8, 2026-6-12 02:31 , Processed in 0.022399 second(s), 24 queries .

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表