找回密码
 注册
查看: 228|回复: 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 )即可,包括:
& d' s. w: ^0 S1 \/ M# C% I# e' b  L/ b' w7 v! H9 ~
QEMU/KVM
, B8 |4 c- J9 o5 tXEN( W" L) C# d4 x; v
LXC/ }2 N0 m& {- Y) u5 `) ?( D6 S# D
VirtualBox* n/ P% b# q3 f2 F
等等2 e9 l/ a5 z7 B% X
Ceph 块设备支持 QEMU/KVM ,所以你可以通过能与 libvirt 交互的软件来使用 Ceph 块设备。下面的堆栈图解释了 libvirt 和 QEMU 如何通过 librbd 使用 Ceph 块设备。# q' Q+ x2 ~# T) X6 a

7 L- \7 J8 l% g. z6 {! C
+ O9 i& M6 W+ Y  g0 M/ y4 W* l. V7 r& g. }4 |/ V  K
libvirt 常见于为云解决方案提供 Ceph 块设备,像 OpenStack 、 ClouldStack 。它们用 libvirt 和 QEMU/KVM 交互、 QEMU/KVM 再通过 librbd 与 Ceph 块设备交互。详情见块设备与 OpenStack 和块设备与 CloudStack 。关于如何安装见安装。
' I8 X3 L* B5 m4 f% T
$ J6 u* m3 S8 i. h# e) J6 q1 t0 J1 W你也可以通过 libvirt 、 virsh 和 libvirt API 使用 Ceph 块设备,详情见 libvirt 虚拟化 API 。3 _! l7 S. `3 P5 U5 I- a' v

! [, Z  ]$ X# W9 |; O要创建使用 Ceph 块设备的虚拟机,请参照下文中的步骤。在示范性实施例中,我们用 libvirt-pool 作为存储池名、 client.libvirt 作为用户名、 new-libvirt-image 作为映像名。你可以任意命名,但请确保在后续过程中用自己的名字替换掉对应名字。8 j/ w% E9 e( l8 Y- F. q

& m9 c# r( W$ p; J8 C7 W配置 Ceph
# N$ ~3 ^* r/ Z- _3 x! o4 U配置 Ceph 用于 libvirt ,执行下列步骤:
( V: x# M9 F0 l
: f9 \& z1 S9 e0 M" ]! T创建——存储池(或者用默认的)。本例用 libvirt-pool 作存储池名,设定了 128 个归置组。, }# y8 ^" t4 \- k( a$ r8 P
) e8 C4 \, _; ?; A
ceph osd pool create libvirt-pool 128 128" @! D8 A: x7 k0 N) Q. s! _' T
验证存储池是否存在。
8 X$ s! @& }: i* Z9 ~
- h4 f: \5 E4 q. _ceph osd lspools
% w1 E* J9 ~& X7 A: \/ L创建—— Ceph 用户( 0.9.7 及之前的版本用 client.admin ),本例用 client.libvirt 、且权限限制到 libvirt-pool 。
5 Z" |0 V  i: ]# {% R! L" ]8 F3 }& G- t: D
ceph auth get-or-create client.libvirt mon 'allow r' osd 'allow class-read object_prefix rbd_children, allow rwx pool=libvirt-pool'% X- E  Y9 L% j1 }- K- W. G1 e
验证名字是否存在。3 t( Y3 w5 Q& S3 M6 T5 k

3 ~1 Y- n* ]* N9 a& D. r8 ]) _ceph auth list
" i5 |. a& Y& Z& ~0 l' G注: libvirt 访问 Ceph 时将用 libvirt 作为 ID ,而不是 client.libvirt 。关于 ID 和名字不同之处的详细解释请参考用户管理——用户和用户管理——命令行界面。
! J7 L' K& }$ V) A& R& A5 I
! X  B4 T) a1 L4 P6 v8 f( q用 QEMU 在 RBD 存储池中创建映像。本例中映像名为 new-libvirt-image 、存储池为 libvirt-pool 。( m$ f) Q3 ]" R( t/ x* ^
: J9 H' T2 M9 Z& I
qemu-img create -f rbd rbd:libvirt-pool/new-libvirt-image 2G" K$ ]# X4 O" m% g* p; q
验证映像是否存在。
- e3 ?5 {. ^8 a# s' S- d5 Q& b% O8 b0 A) @- I2 P
rbd -p libvirt-pool ls6 _5 u  o% N  x0 T, N% g
注:你也可以用 rbd create 创建映像,但我们建议使用示例中的命令,来顺便确认 QEMU 可正常运行。, G$ |# ]7 @: T
4 G! N8 ^5 t8 J4 s& p+ `" p
准备虚拟机管理器
; _2 T6 r! _" J1 I- C- |即使没 VM 管理器你也可以用 libvirt ,但是用 virt-manager 创建域更简单。
1 b* `3 {) b8 Z! X* j! `
. V/ G& J2 S. u4 [0 Y安装虚拟机管理器,详情见 KVM/VirtManager 。
3 ?9 E. M& U' Y! q+ O" ?
8 l& R7 D- @& d6 G% ]sudo apt-get install virt-manager
" w8 ^0 J: D: X! s下载一个 OS 映像(如有必要)。
4 g; F& o+ z6 [  d  j0 e1 D4 v8 c/ s0 `/ v/ V, `+ W+ G& J* E
启动虚拟机管理器。6 t+ s/ {4 V8 G3 x
  t. Z* A5 E& c# w! A% a  Q
sudo virt-manager
4 i0 Q; S. r( e新建虚拟机+ e2 o% f) Z% e: |% c
要用 virt-manager 创建 VM ,请按下列步骤:7 k/ T* r: D3 Y" _! m# M

' \, C/ s& s5 g" f" U点击 Create New Virtual Machine 按钮。8 Y& z7 o; _# t" E

1 ?; x# |% _" i5 J+ P命名新虚拟机的域,本例中我们用 libvirt-virtual-machine 。你可以任意命名,但请在后续命令行和配置实例中替换 libvirt-virtual-machine 为你自己选择的名字。: B" a$ U9 }* m( M
' D) C: b7 _! u# O% p( B
libvirt-virtual-machine
( |0 [: D; W5 l/ b. s9 v导入映像。2 j  }+ c/ s$ A1 o

7 G/ `* c. R' Z$ u  p- n6 F/path/to/image/recent-linux.img
4 M7 v2 x/ h4 q' n% p: N注:请导入一个较新的映像。一些较老的映像未必能正确地重扫虚拟设备。. f( L7 G) V6 U
; J; W: w1 J" c+ w- Y* _9 s
配置并启动 VM 。
7 \6 r( _7 [( C3 B* [5 H
4 Q, l$ N7 G7 {+ i* z可以用 virsh list 验证 VM 域是否存在。: p! q% ?% ?5 K/ p0 W+ E5 l( h3 y

0 l- c  [% D" C# {  x5 Vsudo virsh list1 D6 U( b7 ]) Z! E0 a
登入 VM ( root/root )
) `. ]6 k5 }2 |' k4 U2 ~  r6 Z8 ]
  g" }/ d! |, A4 m在修改配置让它使用 Ceph 前,请先停止 VM 。
% h7 j9 Y' w+ \' r6 d
: P- K8 ~5 U- R3 g4 m配置 VM
/ R+ N' ]9 h* w5 v9 r9 P* w配置 VM 使用 Ceph 时,切记尽量用 virsh 。另外, virsh 命令通常需要 root 权限(如 sudo ),否则不会返回正确结果或提示你需要 root 权限。 virsh 命令参考见 Virsh 命令参考。
3 ^+ t5 B1 {& Q3 G, G* J8 r4 U' r2 J( Y0 ?* _& {/ B2 t: K/ y6 }+ P7 g
用 virsh edit 打开配置文件。+ m" j# m' M0 J4 y/ J* g

& l- A' P3 ^' h2 Asudo virsh edit {vm-domain-name}
( H4 ~& m' t- @+ a, z<devices> 下应该有 <disk> 条目。
8 N& L# O9 s  R; X" e3 e# e( r* |4 q$ V$ [/ v' Q/ W6 Z# t
<devices>7 I$ \& }; m* c' Y4 v
        <emulator>/usr/bin/kvm</emulator># C! ]; j' h7 s' k: W4 t: }' ?  t
        <disk type='file' device='disk'>
6 y  Z# S6 t* _  Z- T                    <driver name='qemu' type='raw'/>
4 v8 ?! {# f* h1 }$ F$ @2 H                    <source file='/path/to/image/recent-linux.img'/>- C3 F0 _9 ^! h0 d
                    <target dev='vda' bus='virtio'/>
# J4 K: g5 b+ |& O# |                    <address type='drive' controller='0' bus='0' unit='0'/>
1 B0 h- n) W) p  C; s) l. W        </disk>
8 o& W7 G0 h5 {* M8 Y/ {用你的 OS 映像路径替换 /path/to/image/recent-linux.img 。使用较快的 virtio 总线的最低内核版本是 2.6.25 ,参见 Virtio 。2 H, ?. B) n3 Q8 u& E" x

3 o' k5 U. Z) x5 p1 S重要:要用 sudo virsh edit 而非文本编辑器,如果你用文本编辑器编辑了 /etc/libvirt/qemu 下的配置文件, libvirt 未必能识别出这些更改。如果 /etc/libvirt/qemu 下的 XML 文件和 sudo virsh dumpxml {vm-domain-name} 输出结果内容不同, VM 可能会运行异常。! E! S% @. Z4 _/ S: r- ?! j( f

- X% v( x/ h3 |" D把你创建的 Ceph RBD 映像创建为 <disk> 条目。
. y2 e4 B- |* {( W2 C9 c: n7 c  K" U! ^/ ^' p' C. p
<disk type='network' device='disk'>) v( h. U" j. s) Y4 X9 ^
        <source protocol='rbd' name='libvirt-pool/new-libvirt-image'>: m3 o6 U: O- _/ a6 V+ k* p
                    <host name='{monitor-host}' port='6789'/>2 `; P- H8 M, A0 `- y: y9 p" y1 ?
        </source>
5 V8 I* k& _* v1 a+ z6 ]& D6 T' ~" l        <target dev='vda' bus='virtio'/>: l# C/ O" F' Q
</disk>* X( I+ }6 t; O6 o0 y
用你的主机名替换 {monitor-host} ,可能还要替换存储池和/或映像名。你可以为 Ceph monitor 添加多条 <host> , dev 属性是将出现在 VM /dev 目录下的逻辑设备名。可选的 bus 属性是要模拟的磁盘类型,有效的设定值是驱动类型,如 ide 、 scsi 、 virtio 、 xen 、 usb 或 sata 。
$ q9 [) M% J- U
6 J8 m/ p) h; A" H% X2 Z* t7 }关于 <disk> 标签及其子标签和属性,详见硬盘。
1 O9 v7 s! g* f8 X
1 D$ X0 `) G( Q. T8 q& R! T0 Q保存文件。& t/ S1 P4 m, v- K' O

9 t( Z- w! d$ L7 b5 n. f如果你的 Ceph 存储集群启用了 Ceph 认证(默认已启用),那么必须生成一个 secret。
* j! N) x% H% w: J; M; Z/ n* K+ s' l. T6 X
cat > secret.xml <<EOF9 l5 k7 z9 r$ z$ v* R. p
<secret ephemeral='no' private='no'>$ x) U% G+ B( C$ n- m% H- O2 S7 V
        <usage type='ceph'>* b7 P' ?* N8 l' F. }- B% M
                <name>client.libvirt secret</name># v- V4 _6 ?" ?$ X- e
        </usage>
, U5 w. X7 G7 C# P$ ~0 n</secret>
( E8 S7 S; z% a+ yEOF
8 _; C$ V3 f; b' `% ^* G定义 secret。
- I% m+ H4 I, X8 J4 P" x. g/ a' ^0 v9 s8 l' W: h
sudo virsh secret-define --file secret.xml7 ]0 G- |5 ^; l. ^5 s
<uuid of secret is output here>$ P) ?2 q0 S" {8 Z6 G7 y$ I
获取 client.libvirt 密钥并把字符串保存于文件。; @! Z* L$ V/ K* D+ E' M- z

: V# c% }% q# k% z9 h- eceph auth get-key client.libvirt | sudo tee client.libvirt.key; ^$ ^) i3 G0 R. g  [/ M1 g# U2 x
设置 secret 的 UUID 。
0 K8 T1 \$ t- u* n9 k3 g* B7 s  {
sudo virsh secret-set-value --secret {uuid of secret} --base64 $(cat client.libvirt.key) && rm client.libvirt.key secret.xml: w9 v4 k. ]& [9 ^) i) Y) w3 \
还必须手动设置 secret,把下面的 <auth> 条目添加到前面的 <disk> 标签内(用上一命令的输出结果替换掉 uuid 值)。" W. w, E9 {* z
1 u+ I4 ~) \. e
sudo virsh edit {vm-domain-name}* M" Z8 P3 j$ P8 i3 T, L2 J
然后,把 <auth></auth> 标签加进域配置文件:
' M' q2 B; d0 g) n3 z% N, P5 }9 J9 @
...8 q% e/ }- }& w7 k- c, _; Z
</source>
/ B; s) U: j, ~7 C5 a<auth username='libvirt'>
4 \. M" _$ I- k4 i' n        <secret type='ceph' uuid='9ec59067-fdbc-a6c0-03ff-df165c0587b8'/>. {8 W$ S" \1 n- `  k7 P
</auth>+ e6 e- \0 T; A# W2 I5 D! [% k
<target ...: N3 I  z3 U# u5 b; E
注:示例 ID 是 libvirt ,不是第 2 步配置 Ceph 生成的 Ceph 名 client.libvirt 。确保你用的是 Ceph 名的 ID 部分。如果出于某些原因你需要更换 secret,必须先执行 sudo virsh secret-undefine {uuid} ,然后再执行 sudo virsh secret-set-value 。. m/ v1 L) p3 p  `: F$ V' W- @

! t( i# Z$ G$ m6 e" V# Y/ w7 Y总结
& ^4 r6 N" U  H% x2 a一旦完成上面的配置,你就可以启动 VM 了。为确认 VM 和 Ceph 在通信,你可以执行如下过程。; {- B& S. \. B6 Z8 b/ J
" r& E" I! }! V  m, |( q
检查 Ceph 是否在运行:  M% q5 }# m& z
" x, u/ O/ ?6 O! K
ceph health
5 O$ j+ q( }. v* h2 |3 a& K: j- O检查 VM 是否在运行。% m5 V; d! g  O0 A& d7 _2 L

! R: Y& W0 c# P( B" p+ hsudo virsh list- i6 Z( Z7 y4 y+ ?: B' f" d
检查 VM 是否在和 Ceph 通信,用你的 VM 域名字替换 {vm-domain-name} :
* R/ G7 Q" K# S/ ~- R
7 l' Z' n( ]  I+ {1 @: ysudo virsh qemu-monitor-command --hmp {vm-domain-name} 'info block'
+ k0 _" t$ W4 F2 E检查一下 <target dev='hdb' bus='ide'/> 定义的设备是否出现在 /dev 或 /proc/partitions 里。
# v: m0 G7 S9 ]% M( `
1 X! p9 b# c. b5 V, zls dev% `' M9 x+ y9 L: f1 w/ N
cat proc/partitions3 t( O% \# Y4 H; B
如果看起来一切正常,你就可以在虚拟机内使用 Ceph 块设备了。. {/ a% E4 Z$ P6 E
1 ]' d; r) ~1 e- Y

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
 楼主| 发表于 2024-11-15 23:25:35 | 显示全部楼层
$ virsh secret-define --file secret.xml 8 V! U* R- x: X, j$ D7 [  {
Secret 3d5f35f2-7fd8-4b3c-8c86-7b40ec8f5c5b created
( {9 U0 e: V" v6 w8 Z. T+ L9 V* _) d( _% y5 N( l
root@gm268-1 23:21:04 ~, o8 }  `7 |' C/ K) i9 p
$ virsh secret-list 0 Q( t6 X  ]2 R( A: v, ]( O
UUID                                   Usage
, I4 |5 A( B$ Z+ x! _/ g( e7 X: Z* @-------------------------------------------------------------------
: z9 ~8 ^% o/ a  O/ z0 d 3d5f35f2-7fd8-4b3c-8c86-7b40ec8f5c5b   ceph client.cinder secret
9 `0 ~. u2 ~: }+ O0 d0 y' {0 ]1 y- d5 u
root@gm268-1 23:21:10 ~/ [* b9 ~6 l( x7 f% _
$ ceph auth get-key client.cinder |sudo tee client.cinder,key$ P) I+ y5 Y& U1 X0 Y: [
AQDMgQ9nOz4CIhAAcwnv8rvNYNe5oE5hnU2Y9A==4 |  x4 \, K( ^3 `
root@gm268-1 23:22:03 ~
% d- e! S" y& w) F; S, S2 O  a$ j$
/ W; V# c2 F9 v$ u- b% f
0 I# W+ T, B' F
  f# G+ |# l* O( l7 `. b; l" q( Y$ J+ @# l# l" P
$ cat client.cinder,key % m' m& W6 t. s3 e* j' `
AQDMgQ9nOz4CIhAAcwnv8rvNYNe5oE5hnU2Y9A==root@gm268-1 23:22:12 ~
* x( D8 y- L/ s/ v% ?8 l+ }) C$ virsh secret-set-value --secret 3d5f35f2-7fd8-4b3c-8c86-7b40ec8f5c5b --base64 $(cat client.cinder,key)
! u8 w0 R, Z# ISecret value set
( [0 Q& `! Y- M, G  D5 w; F/ l  K* e5 V5 S) k( }2 l

" n. J7 P; e, y; s! Q$ `
& o* q, p3 J5 {8 \: U5 R/ Eroot@gm268-1 23:23:58 ~* I# I3 V+ G- p. ~9 R& e: I
$ virsh secret-get-value
- K6 a% p6 h; P6 ^8 Uerror: command 'secret-get-value' requires <secret> option' M! e* h7 L, |* P; d2 ~' b) ^
root@gm268-1 23:24:10 ~
  O: z- U/ W, y- x, N& H$ virsh secret-get-value 3d5f35f2-7fd8-4b3c-8c86-7b40ec8f5c5b + Y4 q* V1 |. X3 A& a
AQDMgQ9nOz4CIhAAcwnv8rvNYNe5oE5hnU2Y9A==
+ J' U# X9 @1 u( H1 h* i( Aroot@gm268-1 23:24:24 ~
$ T0 f" l& E" S' r0 l4 i
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-6-12 02:51 , Processed in 0.023657 second(s), 25 queries .

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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