- 积分
- 16843
在线时间 小时
最后登录1970-1-1
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?开始注册
x
1.KVM的Qemu与Ceph RBD块存储进行对接0 y# u7 C6 V" X7 }" V) Z [
1.1.Qemu与RBD块存储对接的架构图" ]" S4 I: ]* A" q$ [. o) O
Qemu本身并不是KVM的一部分,而是一整套完整的虚拟化解决方案,它是纯软件实现的,包括处理器虚拟化、内存虚拟化以及各种虚拟设备的模拟,但因为是纯软件模拟,所以性能相对比较低。而广义的KVM实际上包含两部分,一部分是基于LINUX内核支持的KVM内核模块,另一部分就是经过简化和修改Qemu。KVM内核模块模拟处理器和内存以支持虚拟机的运行,Qemu主要处理I/O以及为用户提供一个用户空间工具来进行虚拟机的管理。两者相互结合,相辅相成,构成了一个完整的虚拟化平台。
2 n C% ?4 E- f# [' n3 I* |# m/ h% L- o' G3 F
Qemu主要是用来虚拟各种资源的,例如网卡、硬盘等等,我们可以将Qemu产生的数据存储在Ceph集群的RBD块存储中。. x1 {, o4 ^2 t4 V9 W1 s
) m5 F M0 ?. i
Qemu通过librbd驱动组件与Ceph集群的librados建立连接,将数据通过RBD块存储写入到OSD中。
: S5 ~# E6 e3 s2 k/ u. S& L2 N; r
# z0 |7 a5 |/ u+ u1 n; `% [: I
# q/ A1 z% @5 s, k: M. r4 x8 v4 w; t9 E) L# O$ m8 D% j
Qemu与Ceph RBD块存储对接,其实就是在Ceph集群的RBD资源池中创建了一块存储卷,属于RBD类型,这块卷创建完后,KVM在创建虚拟机的时候就可以使用这块卷来持久化虚拟机的数据。
. Z [7 J( V0 ?0 f& A8 b
4 T5 W* R8 N( ~官方文档:https://docs.ceph.com/en/quincy/rbd/qemu-rbd/7 ]$ }' V% {) M/ g( R/ s& v4 I
) {" `$ e* Q! p
1.2.配置KVM服务器连接Ceph集群
/ x* ^; A3 C; K7 H( y8 l$ L. dQemu是在KVM服务器中直接创建的,因此需要配置KVM的服务器连接到Ceph集群,使用Ceph集群的RBD块存储。5 M# d* d* d; C
. \& i& v+ q0 X; o' {1.安装ceph相关命令, C5 s% y( s* |5 t& r
[root@kvm ~]# yum -y install ceph-common
: V- K9 b9 ]3 c# W: x( C( k/ f6 O" q/ J0 ~
2.拷贝ceph的配置文件
3 s6 _( G) I, X2 E8 A6 T[root@kvm ~]# scp -rp root@ip:/etc/ceph /etc/
1 ]+ s9 Q# G; U. i( {
. v* E' }- I1 u/ y! E& C3.查看集群的状态! W, Y+ j# C! O
[root@kvm ~]# ceph -s- t$ X8 E' G2 I8 T# }& g7 |- ~
cluster 70d27aec-742e-4a95-b000-cf37ebba35d0( v& _! F8 J/ V5 Y" G9 O6 q+ U
health HEALTH_OK
: i! f2 A; g& H, d' P monmap e3: 3 mons at {compute1=17.24.14.5:6789/0,compute2=17.24.14.6:6789/0,compute3=17.24.14.7:6789/0}
* E4 }& S" E4 x election epoch 352, quorum 0,1,2 compute1,compute2,compute3
$ v+ g, a# V: P% l0 C6 b9 L* R osdmap e29566: 131 osds: 128 up, 128 in
7 B7 n) R/ N& X7 Z* h9 e flags sortbitwise,require_jewel_osds" [6 M# Y$ z2 W9 A w2 s: k) ~* A
pgmap v191784797: 10240 pgs, 1 pools, 99538 GB data, 25555 kobjects; m y: D& I4 ~5 \
291 TB used, 174 TB / 465 TB avail* h: I) B3 w$ n5 z) ^0 O/ M
10234 active+clean& N6 W+ i2 q/ x ?9 ~* [' M
5 active+clean+scrubbing+deep7 S# e. X% I! B/ q0 m4 G: z
1 active+clean+scrubbing
. K3 o7 ?; l' `! q3 B) T9 K
5 a3 H1 I2 V! K$ t$ N, `1.3.在Ceph集群中为KVM创建一个资源池
# z+ `* y& n" U$ W( Y% _. m; {! O[root@kvm ~]# ceph osd pool create kvm_rbd 32 32
$ W L6 ^5 v2 L9 Y; @pool 'kvm_rbd' created, b; K( r; {( Z2 D6 q2 l
- u8 }% C: P$ d3 t
1.4.使用Qemu在RBD块存储中创建卷
0 V% G) e! e! d& D1)在RBD中创建卷( c9 J- e& s/ y- d
6 X' T' h0 P; c# T6 P+ I
命令:qemu-img create -f raw rbd:{资源池名称}/卷名 大小
/ D7 {) h/ N5 a5 n+ G
' z& y; Q. S* _1 M/ s) j+ r[root@kvm ~]# qemu-img create -f raw rbd:kvm_rbd/vs-centos7.img 500G
9 D3 V# Y: l/ S$ F n) r& W DFormatting 'rbd:kvm_rbd/vs-centos7.img', fmt=raw size=5368709120000 cluster_size=0
! H; `& P5 d, T
5 L$ i' h; e w# z+ u' F) l7 e8 a5 G% _0 \" U5 p6 q
2)查看创建的Qemu卷
9 N/ M+ y5 ?$ @" p) X- O
0 v/ I3 ~" y# U[root@kvm ~]# qemu-img info rbd:kvm_rbd/vs-centos7.img3 l0 ], P; n3 O
image: rbd:kvm_rbd/vs-centos7.img
3 i B( s; Z9 \0 y5 l A8 Tfile format: raw, [6 v' v4 `6 x5 y- I* v
virtual size: 500.0G (536870912000 bytes)- {- S/ y% S F
disk size: unavailable
4 x7 y' @' s8 u. Q
2 c6 s; x! e. h; U这个卷其实就是资源池中创建的一个块设备。5 n% z- v: E/ s
p L" L; n5 {
[root@kvm ~]# rbd -p kvm_rbd ls3 w$ P- N/ E/ o$ Z( s! g3 e% a# S
vs-centos7.img* W* D+ [0 I5 i. q1 v' Q
/ Q G- Q7 n' u1 E% B. I
[root@kvm ~]# rbd info kvm_rbd/vs-centos7.img
7 u0 `+ a# z1 m: yrbd image 'vs-centos7.img':
% \$ F1 X8 _, d' Y) | size 500 GiB in 1280 objects+ e; M! X+ q7 C8 Q8 F4 J% z5 S
order 22 (4 MiB objects)$ t- x6 D! k4 N( ^( u/ H- G
snapshot_count: 0
9 U& W B5 S+ S- r) t6 w; Z6 c id: 19a9415778427) I7 R" C' J! e# Q; T# s
block_name_prefix: rbd_data.19a9415778427% ~4 r$ S4 G; m
format: 27 N9 R7 e9 @, T) a
features: layering- D G7 p& S; \' ?+ O
op_features: : g3 X% c: g5 F ^# P* O
flags:
" I8 o( x1 T# ?5 S+ x8 } create_timestamp: Wed Apr 20 22:14:33 2022
. {% Q$ A# S7 l access_timestamp: Wed Apr 20 22:16:43 2022
5 s8 ?& p2 C2 |8 S- Q y modify_timestamp: Wed Apr 20 22:14:33 2022" w$ M$ O( o5 R# u6 C
. r/ l+ ?$ b* p+ [0 ?, o; {1.5.扩容卷的空间+ R. T3 E+ K6 ^6 j4 d6 H; d9 A" v; I
[root@kvm ~]# qemu-img resize rbd:kvm_rbd/vs-centos7.img 6G
0 J" ~6 D. a- l: B& G/ ~Image resized
! _3 \$ o& p3 \( \# b9 N% G+ {4 D+ p; G' o! K& O
2.Libvirt使用Qemu为KVM虚拟机提供存储
: S- B' c0 ^; t: u5 `% e, ?4 SQemu已经通过RBD创建出来一个块存储,现在还无法为虚拟提供使用,想要让虚拟机的数据持久化到RBD块存储中,还需要配置Libvirt驱动,由Libvirt通过Qemu读取到Ceph集群的块存储,从而将Qemu在RBD中创建的块设备添加到虚拟机中,充当虚拟机的硬盘,持久化产生的数据。
) {& A" \( W' J# }' g7 z. o! d0 Y7 X
官方文档:https://docs.ceph.com/en/quincy/rbd/libvirt/0 s6 Z# [! W0 J
4 r$ s( q1 s" }$ ~ h. t
1 P0 Q% ]) U! r1 X! S1 M$ |6 E) l+ C7 L' y4 Z
KVM与Ceph对接,其实就是在Ceph的RBD资源池中创建一个KVM虚拟机可以使用的块设备,然后将块设备添加到虚拟机中进行使用,针对虚拟机的系统盘,也可以通过工具导入到Ceph的块存储中。) n6 `, v) U% p) n) e. `
6 P: Y3 o: q+ v# R) m3 t+ R5 e
大致实现步骤:1 M. a* i6 J8 G* D4 G
2 l2 C( p7 u% g) {8 x2 ^1)在Ceph集群中创建一个资源池作为Qemu卷存储的块存储资源池。5 A- t' ?# `8 r( s
4 J( ]; G+ a1 f" x8 _* O6 y
2)创建一个用户用于Libvirt访问Ceph集群的块设备。( }1 d2 L. N+ R5 z) |
8 j0 K1 u8 f# t3)创建一个Qemu存储卷。
/ {" j' R% p! p! [
" [ \1 A& Z3 i5 L4)在KVM中创建Secret证书,存放访问Ceph集群的用户认证信息。0 u0 X, Z* g4 G
' N) x7 q/ B" `$ x5 a
5)编辑虚拟机应用RBD块存储中的Qemu卷,存储虚拟机的数据。
9 c" u. T x0 F M! j/ }* X1 a' a
7 u3 V/ O Z; F% H其中1/2/3步骤都可以不做,在前面配置Qemu的到时候已经完成了,这里为了全面实现步骤,会全部都进行操作。
9 ~) U5 ?$ H( T9 i8 A: h
3 T" ?3 w5 G1 m9 Q) X4 F( k2.1.在Ceph集群中创建资源池
2 K8 H! {' }9 Y" @! k' d1.创建资源池
9 ]. ]# m: b; }- P" ~[root@ceph-node-1 ~]# ceph osd pool create kvm-libvirt-pool 16 16! k O/ q, Q d) s6 H2 _+ \
pool 'kvm-libvirt-pool' created( R; i2 ?2 } ~% \* p
3 _1 f$ G7 a2 \6 g+ J
2.将资源池初始化成RBD类型
# m3 b+ Z1 f- V7 W# w4 `[root@ceph-node-1 ~]# rbd pool init kvm-libvirt-pool% R2 R2 M! L3 ^* r) k( l$ q. p
' `( u8 D7 r& J. c5 T9 k$ `' s
2.2.创建用于KVM访问RBD块存储的用户( K1 W7 p+ v8 h+ O& P0 F7 R
[root@ceph-node-1 ~]# ceph auth get-or-create client.kvm-libvirt mon 'profile rbd' osd 'profile rbd pool=kvm-libvirt-pool'
& P: S3 @5 ?0 R5 |[client.kvm-libvirt]. ?9 Z) P. v/ E" h! Y
key = AQBaK2BinaBzJxAAO8GmydNxxxxx2BUFhdw==
% }+ a, c; ?& I: O a5 j% D$ K0 l5 o4 R4 Y. l" }; Y$ [' m, @
2.3.创建Qemu卷
+ w3 G' B3 ~% K4 Y[root@kvm ~]# qemu-img create -f raw rbd:kvm-libvirt-pool/vs-centos-1-data.img 500G, Z# r1 {$ _/ {/ O
Formatting 'rbd:kvm-libvirt-pool/vs-centos-1-data.img', fmt=raw size=536870912000 cluster_size=0 0 F6 l+ A4 u9 |" N, s% H9 v
8 s) W' _( Z& X/ Z9 F
[root@kvm ~]# qemu-img info rbd:kvm-libvirt-pool/vs-centos-1-data.img
' \' o$ l* m: Ximage: rbd:kvm-libvirt-pool/vs-centos-1-data.img0 y/ J; D: R0 ~; s8 I v7 W: g
file format: raw
' i6 x# S3 I' cvirtual size: 500.0G (536870912000 bytes)9 V7 g m7 M1 w( ~& O
disk size: unavailable
3 d; @2 C, N( G' P& r7 Y/ t2 \" a p: Y2 [" _2 F3 ^
2.4.将Ceph的认证用户写入到KVM的Secret中. s" o) H5 n8 F, O
首先将认证用户的名称写入到一个XML文件中,通过virsh命令的secret-define参数将带有用户名称的XML导入到KVM虚拟化中,此时会在KVM中生成一个Secret,每个Secret都有一个UUID,这个UUID可以理解成是Secret的名称,此时Secret中已经有用户名的信息了,最后再通过secret-set-value参数将认证用户的KEY写入到Secret中。# d0 A3 k2 z( }) {# r, G, ^
' _! z: T5 ^: T, g2 F$ x用户名称和Key都写入到Secret后,虚拟机在连接Ceph集群时,直接指定Secret的UUID即可使用。4 e, @+ Y- T7 i' G$ i. r
' k# Z) W& T9 }) \
1.编写带有认证用户名称的xml$ Q4 J& l7 p2 q
[root@kvm ~]# cat secret.xml- `; {" N3 S* k9 V. w' C* r
<secret ephemeral='no' private='no'>
! D9 h% I: r: M8 `; ~ <usage type='ceph'>( R" F* r) b/ G/ \9 m+ [' I
<name>client.kvm-libvirt secret</name>2 s- B* K- b0 H' T. ]
</usage>
0 n1 X3 I& U L& c* g0 ]</secret>
, F/ V) g/ z3 V$ A1 j% M* b#name中就是认证用户的名称
) [. g1 H5 ~6 N% V2 j
S8 c: E' s' ]+ G! L) x2.将认证用户的xml文件导入到KVM中生成一个Secret
2 }" |6 ^: b8 K N( S[root@kvm ~]# virsh secret-define --file secret.xml 2 {0 i$ M3 p- @1 O0 `# b. v f
生成 secret 66d9bec3-cbd7-4161-9614-1d0bc81c5e82& T! y+ i F5 v
: m; U2 }( X, T/ M
3.将认证用户的Key写入到Secret中( W. _2 t5 S9 _' X! h1 I* g: e9 L
[root@kvm ~]# virsh secret-set-value --secret 66d9bec3-cbd7-4161-9614-1d0bc81c5e82 --base64 AQBaK2BinaBzJxAAO8GmydNIxGc2fVn2BUFhdw==3 Y" H0 h Q6 o0 u6 D, x% H
secret 值设定0 L* w* b% V5 u g( l0 A
#--secret:secret的uuid0 l3 N2 j6 d0 Y1 G' x# y5 ?6 G
#--base64:用户的key# O' w! {+ m+ ^) e
7 h1 d; n4 W# e4 ?4.查看生成的Secret信息
: T3 t. ]! R8 u1 e[root@kvm ~]# virsh secret-list # g, A8 J) X7 `' W) k7 ~3 Q
UUID 用量1 N# o, B$ } X0 Y* q
--------------------------------------------------------------------------------
; g2 F" s+ P0 X5 C' F1 \2 B+ Q 66d9bec3-cbd7-4161-9614-1d0bc81c5e82 ceph client.kvm-libvirt secret# Y4 r' @* B5 y+ ~, G
[root@kvm ~]# virsh secret-dumpxml 66d9bec3-cbd7-4161-9614-1d0bc81c5e82
* f# n; r% A8 O8 L3 \1 C<secret ephemeral='no' private='no'>
5 b9 G8 P- B- T, \6 i s0 b <uuid>66d9bec3-cbd7-4161-9614-1d0bc81c5e82</uuid>
9 _' K, t8 {) }" w" d) T <usage type='ceph'>3 x# @6 ~# D3 ^5 @9 l. V1 M
<name>client.kvm-libvirt secret</name> n9 P& L3 d, F! }
</usage>$ e f0 I% {' f! c. t; g4 E5 V
</secret>' h$ T% K. r. P" i! B# E7 q
, d& V& p& U6 S& D: k2.5.在虚拟机中应用RBD块存储中创建的块设备
+ L" m4 |7 q+ n. d p需要编辑虚拟机的配置文件,在配置文件中添加新硬盘的信息,添加的硬盘就是Ceph RBD中Qemu创建的卷,也是块设备。3 {; Y1 [, m: |
( m3 G8 ?* I1 a1 H' R O# Z1)先停止运行虚拟机* L5 o3 h$ M$ D
8 K6 [4 }- Y8 Z0 {% f3 @
虚拟机添加硬盘需要重启才能生效,可以先停止运行,添加完硬盘后再启动虚拟机。 r# M4 t/ }- B1 D8 `9 L) [6 o
' t" Q7 R$ t4 y" D6 L2 O
[root@kvm ~]# virsh destroy vs-centos-1 2 e S1 {( e. y& a) m: Z
域 vs-centos-1 被删除
* o& P x q2 ^& H' ~7 V! }8 \& K8 F5 _+ z% f
2)调整虚拟机的配置文件增加硬盘
8 y0 b, F; h9 P' \7 M- j8 W" f. E
在<devices>模块中添加一组<disk>,<disk>就是用来配置硬盘的信息。
$ U0 s8 f6 e x+ W! v: ~" G1 `/ q
7 Z3 [) P: x: g* f在<source>中配置硬盘的来源,我们是Ceph集群的RBD块存储提供的硬盘,因此在protocol中要填写rbd,name中填写块设备的名称。
1 `: E* s& l0 ?% O' s2 j2 `+ B& u9 q; h& Z
在<auth>中配置认证用户的Secret,在username中填写认证用户的名称、uuid填写secret的uuid。: {2 ?& M. p6 G4 A' T4 W
' M( X |# ?, r5 Q[root@kvm ~]# virsh edit vs-centos-1 , m7 d7 P( ~0 P Q9 U. @6 w& ]) ?
<disk type='network' device='disk'>7 ]+ A/ f; R/ `; L
<source protocol='rbd' name='kvm-libvirt-pool/vs-centos-1-data.img'>
+ v- u$ A O* n1 V0 j/ k <host name='192.18.0.20' port='6789'/>
6 @, d x8 ^5 r2 _ <host name='192.18.0.21' port='6789'/>) ^, h) d* e0 }: H* z# D, }( h. I' ]; G
<host name='192.18.0.22' port='6789'/>* v$ I, n/ i. r3 H( ]
</source>
/ h- q# i1 V( ^/ X2 R, w <auth username='kvm-libvirt'>0 N; R! a. @/ }& G# _5 \. I* `
<secret type='ceph' uuid='66d9bec3-cbd7-4161-9614-1d0bc81c5e82'/>$ M9 J' K$ U; b+ ~( e5 M
</auth>% W# ]) `$ G0 ^- F0 g
<target dev='vdb' bus='virtio'/>/ N5 s: W5 C+ Z9 O7 P
</disk>
6 q( l# Y8 ]$ |! P+ G+ t( D/ i
1 V( o# f9 ?; H1 C
2 ]2 ]5 B6 }0 X0 o5 t3 T3)启动虚拟机观察硬盘是否添加成功* \2 E) @ X0 u8 w- M: p8 ^% f
2 x% C) z# d* d# c
两种方式可以查看虚拟机的硬盘,更倾向于后者,清晰明了。
& Y- {* B5 J. N+ J% @6 P( D0 d2 T6 ]: R7 `* W2 t, |$ Z3 P% A3 K
[root@kvm ~]# virsh qemu-monitor-command --hmp vs-centos-1 'info block'
X6 q3 G/ j9 r& i7 k4 Kdrive-virtio-disk0: removable=0 io-status=ok file=/var/lib/libvirt/images/vs-centos-1.img ro=0 drv=qcow2 encrypted=0 bps=0 bps_rd=0 bps_wr=0 iops=0 iops_rd=0 iops_wr=0
0 h4 _. ^" R% j1 s; ^+ S! Vdrive-virtio-disk1: removable=0 io-status=ok file=rbd:kvm-libvirt-pool/vs-centos-1-data.img:id=kvm-libvirt:key=AQBaK2BinaBzJxAAO8GmydNIxGc2fVn2BUFhdw==:auth_supported=cephx\\;none:mon_host=192.168.20.20\\:6789\\;192.168.20.21\\:6789\\;192.168.20.22\\:6789 ro=0 drv=raw encrypted=0 bps=0 bps_rd=0 bps_wr=0 iops=0 iops_rd=0 iops_wr=0
+ }: M- L& X3 F9 X8 edrive-ide0-0-0: removable=1 locked=0 tray-open=0 io-status=ok [not inserted]
\) I: l' G# w9 n
* t$ o% v" d$ F# O[root@kvm ~]# virsh domblklist vs-centos-1 & m+ P" N V+ m
目标 源
. P4 M3 x4 Q0 [9 s# z/ Q- B------------------------------------------------
# y8 N! o" F6 N% @2 o# T$ fvda /var/lib/libvirt/images/vs-centos-1.img
% r! B' t& Z, N2 x8 g4 F; R% |8 ~vdb kvm-libvirt-pool/vs-centos-1-data.img
/ ~! V3 V5 d5 F: ~- c, Thda -
& s" f3 D* ?9 k3 g1 g! v) z; o% d4 _6 R2 i9 D" [
2.6.虚拟机使用RBD块存储提供的硬盘
% {/ H( e* q' ]% L# J* k' M+ T0 FRBD块存储提供的硬盘已经挂载到虚拟机中了,下面进入虚拟机中使用该硬盘。; _: q) O" K% l& r) p, ^
$ t2 ]3 l) K& ^9 U
由块存储提供的硬盘建议不分区,直接将整个盘进行挂载,后期扩容时非常方便。6 W2 J$ r V' ~5 Q+ S8 i
7 Z- v9 K- k( r6 A, C, x: |
lsblk, b# s1 i! g: ?9 Q9 e
mkfs.xfs /dev/vdb
& g9 L+ y+ Y$ G2 u" x4 Bmkdir /data* y, D3 W( C" [7 @# Q# k# A
mount /dev/vdb /data T4 \, C0 S7 T# F5 {# g
df -hT
! Z/ c5 s' \! _; y$ pcd /data
5 N# J9 @9 H/ s; c: U# r1 _# d. {* P$ ]touch file{1..5}.txt
2 e0 J! P3 k& `6 G/ G* A1 |ll5 x; O. }/ R! e
5 D$ x6 g& g6 r9 E" O: e- x
+ S8 Z0 k' ~3 g% N
此时KVM虚拟机已经和Ceph集群的RBD块存储对接完成,由RBD块存储为虚拟机提供硬盘存储数据。
! g/ Q" x/ e' D$ `/ e F! m! |- N$ v( b+ i: c: o
" u; ]/ l' O; ]4 s! A o+ J$ {4 a; v
{) c/ C, @ L8 k. W+ \
2.7.RBD提供给KVM虚拟机的硬盘扩容方法
' E2 {3 @% c6 ?1)扩容RBD块存储中块设备的空间
1 v$ O! L5 \- @( M
: M7 X2 Q! w+ }将原来的5G扩容到7G。
% o% v4 {5 {6 T5 S+ w% N, u9 @8 l3 b2 U6 G+ d1 ]3 ^
[root@kvm ~]# qemu-img resize rbd:kvm-libvirt-pool/vs-centos-1-data.img 7G( w2 b( S7 H4 _- G0 B6 ^% A* P
Image resized.
* g9 N% Y. n$ B4 N r
; _) i* Z: M+ G; p/ D/ {: m2)重启虚拟机# m( P d8 s+ H G8 x- ~9 ^" e6 a
6 p, z; `! b# u, G, p$ O+ O
KVM虚拟机硬盘空间扩容后,需要重启虚拟机才能识别到扩容后的空间大小。( O8 J) u9 d, S1 j/ [& K
1 _0 W0 z! n5 ^3 V2 F* q7 @
[root@kvm ~]# virsh destroy vs-centos-1
6 v9 _; x9 r' l# G$ A域 vs-centos-1 被删除) ~( G2 z, y; Q/ }
" F+ h2 x. U, @( }- V
[root@kvm ~]# virsh start vs-centos-1
; k) R' P4 ^, }' T域 vs-centos-1 已开始/ V) S& Q7 b% o) K4 w2 ~
2 Y: [) ^7 h) |7 W6 I6 S$ Q7 t! Z( L
3)查看硬盘空间是否生效
7 _: x6 p, z/ a- H1 Z. D8 y* T! R4 Z
& O, u+ r! g# e+ R: \磁盘空间已生效。
[: g9 Z Y" c! |; w
$ J e. S7 N6 f- o: ]- N4 e; s* R( D, K; f N& ~- ]
z% j5 v( _/ g( d$ _* e- \; z8 e2 B3.将现有虚拟机本地的系统盘迁移到Ceph集群进行存储
5 A& O+ _! r7 q: P6 n) A首先将本地的系统盘导入到Ceph集群的RBD存储资源池中,形成一个新的块设备文件,然后来编辑虚拟机的配置文件,调整系统盘的信息即可完成迁移。8 G1 t$ n( W3 W) y* z7 Z* L
1 [ }4 _2 Y5 X) ~
3.1.将本地的系统盘导入到Ceph集群的RBD中
8 O& R! m$ A4 M5 @命令格式:qemu-img convert -f qcow2 {本地数据盘路径} -O raw {rbd存储资源池块设备路径}+ d. [, g. b% b, Y! o, e" x h1 z
+ K$ N, }' e2 f. c2 t[root@kvm ~]# qemu-img convert -f qcow2 /var/lib/libvirt/images/virtual-host.img -O raw rbd:kvm-libvirt-pool/vs-centos-1-sys.img, l+ L! a: ~* o7 m2 _
5 O# v- j3 O0 s" Q& w8 D0 I
查看导入到RBD块存储的系统盘。
0 |9 W! B9 x8 t: P$ m& e, l$ t! ^3 n2 y5 A. |5 B# W
[root@kvm ~]# rbd -p kvm-libvirt-pool ls
) h* H' t+ q1 h3 Ivs-centos-1-data.img
/ q9 u8 n& I& ~+ N) mvs-centos-1-sys.img
g) v- ^ ~* s9 l% L" r! _4 l& c; Z! L, a1 M) Z h Z, ?
[root@kvm ~]# rbd info kvm-libvirt-pool/vs-centos-1-sys.img
$ z9 c* O. F2 r) i9 ~! U' b( Frbd image 'vs-centos-1-sys.img':8 B4 b5 `. v3 H/ `( N: t$ O! V# z
size 10 GiB in 2560 objects
; W& j4 o I0 u/ S* X order 22 (4 MiB objects)
- t0 G' F; \9 A snapshot_count: 0
$ U6 r- J( U+ V/ K2 @ id: 19a5d559f577b: B2 M! X+ L, W1 `/ z( ^$ b- i: v
block_name_prefix: rbd_data.19a5d559f577b
6 x! A9 r+ c9 d5 p4 E format: 2) j8 [/ X6 u# g; A
features: layering: o; M0 a7 D; \: s" I9 G
op_features:
' T Z- @( m0 N* Z flags: 8 I5 F2 `& t$ c0 `
create_timestamp: Thu Apr 21 13:06:56 2022& X p8 i, O& X8 E3 |9 V0 k
access_timestamp: Thu Apr 21 13:06:56 2022
! V' w& U2 w ~ modify_timestamp: Thu Apr 21 13:08:58 20224 i. n0 ?* f$ c% J1 W
: D6 [' h( V+ U' t+ i6 y
3.2.修改虚拟机的配置文件调整系统盘的路径3 }$ m; o h+ [+ p/ M6 L) w- \
直接将现有系统盘的配置信息修改成下面的内容。4 c, C9 Y) B# ^6 R/ M; z% e
# C( _+ j' a, |4 H3 L
[root@kvm ~]# virsh edit vs-centos-1
- d- s5 i$ P* q1 e$ T <disk type='network' device='disk'>
8 S/ \$ g& j) f2 E! c <driver name='qemu'/>
; R5 K6 v0 T2 t. s <auth username='kvm-libvirt'>+ E6 `; ^8 \1 B+ j2 Q8 T- t
<secret type='ceph' uuid='66d9bec3-cbd7-4161-9614-1d0bc81c5e82'/>: B* [* g2 ?! O) s: h( X6 g
</auth>) a) ]$ _. ] k2 R) f) y2 A: T
<source protocol='rbd' name='kvm-libvirt-pool/vs-centos-1-sys.img'>
5 o# c9 v' @0 z2 f) A+ B' K <host name='192.168.20.20' port='6789'/>
_; R% c: C; _0 d+ t9 ? <host name='192.168.20.21' port='6789'/>
" r s, }3 o: z# h& _+ r. k0 b7 U <host name='192.168.20.22' port='6789'/>, I! h# C" g9 a% m0 v1 A
</source>
3 u% K1 U" \4 I7 d! @ <target dev='vda' bus='virtio'/>
8 O3 B5 X" g, ^; T7 ^! X, @" h </disk>' }/ k# N# J I% D
. x% R' C* m @/ x! {
& S, v S# H$ a$ z1 v' i
l1 \* c3 A+ g3 @ G- V( Z+ ]
3.3.重启虚拟机7 G% F! c+ f) x7 [* j
[root@kvm ~]# virsh destroy vs-centos-1& K- `/ W7 Z/ M5 v4 A. U: c
域 vs-centos-1 被删除& ]: D2 f! u7 b ^
& Z% i4 Z9 W K" m% C" l
[root@kvm ~]# virsh start vs-centos-1
8 T$ v7 C5 ?2 ~* R& b E域 vs-centos-1 已开始
4 L3 ^ R, S4 g5 A1 G( F
$ S! s" c7 N9 x) n; H# ~$ `, z5 C6 n V3.4.验证虚拟机是否可用
9 N2 W3 x: z( G h安全没问题。
- A' l1 l& d8 P1 B% H
4 E; R& L# d% b$ J3 t6 {3 ^) r S" |' ^, T2 D+ S! E" X
6 E/ M/ b: M7 c* u' O. ], F5 |1 `- C, `4.实现类似云平台秒级部署虚拟机
/ {+ S, y; c Z/ H在很多云平台中,例如阿里云、腾讯云等等,都是秒级就能够购买启动虚拟机,这是如何实现的呢?其实很简单,本章节就来实现如何在云平台秒级部署和启动虚拟机。- K. x9 A( T- c2 Q* X
; u5 x6 \; a, w% R/ y
秒级部署启动虚拟机实现非常简单,其实就是将一个已经存在主机操作系统的块设备创建一个快照,并将快照启用保护模式,每当需要部署启动一个新的虚拟机时,就在快照的基础上创建一个链接镜像,链接镜像也相当是一块块设备,虚拟机会去应用这个块设备文件,从而完成虚拟机的快速部署。. Q1 ]! `6 [: ~# B7 `
& R( D9 n* I- `* V* S
如果快照丢失,就意味着链接镜像无法使用,从而导致虚拟机无法运行。3 w6 H! G& J( J
% s, ?% D6 ]3 R6 U o+ I
4.1.将现有虚拟机的系统镜像块设备创建一个快照4 A( G) Q/ O" s- N' d
将系统盘对应的块设备创建一个快照并设置成保护模式。' ?2 G9 E8 {7 x& L2 X
- A+ t$ K5 Y) z5 c% c7 ~[root@ceph-node-1 ~]# rbd snap create kvm-libvirt-pool/vs-centos-1-sys.img@centos-template' N$ `5 ?9 l4 A8 O4 |1 K+ d( U3 O
[root@ceph-node-1 ~]# rbd snap protect kvm-libvirt-pool/vs-centos-1-sys.img@centos-template7 Y4 i& k5 G& y0 m: v
7 H- N% F' D W5 V% N4 Q4.2.为新虚拟机提供克隆镜像
" d$ O/ D/ l+ C8 r4 }9 u* U/ s7 K为即将要创建的虚拟机提供一个可以独立使用的系统镜像,需要在快照的基础上为新的虚拟机创建出克隆镜像,这个克隆的镜像就是一个块设备,可以立即开箱即用,挂载到虚拟机之后就可以运行出一个操作系统。
: i4 T1 v/ l9 x' Y, a! D9 l" `7 S( E: L- W
[root@ceph-node-1 ~]# rbd clone kvm-libvirt-pool/vs-centos-1-sys.img@centos-template kvm-libvirt-pool/clone-vm-1.img4 B% Y, e9 ^, q" J) P' D2 L3 h
[root@ceph-node-1 ~]# rbd clone kvm-libvirt-pool/vs-centos-1-sys.img@centos-template kvm-libvirt-pool/clone-vm-2.img
* O' T1 r4 _, M2 E0 l7 j1 ?8 l0 n4 w, E0 m. J: H/ ?5 N
& w8 ]1 \5 O# p# z8 K) V7 q& s1 F
4.3.通过虚拟机文件准备多个虚拟机
- f( M4 J+ n; M; r+ _KVM的虚拟机配置文件都位于/etc/libvirt/qemu/这个目录中,通过配置文件就可以快速创建出一个全新的虚拟机。6 `8 o. Z& {0 G$ m
Y8 v) a }% H3 C: W+ N进入到虚拟机的配置文件目录,将现有的配置文件多拷贝几份,一个配置文件相当于一个虚拟机。
; ?9 n0 U5 y0 C) l# k6 h3 m
, N8 ?: U3 \ ^, ?# e/ n/ L, K[root@kvm qemu]# cd /etc/libvirt/qemu/" J# v4 A/ C9 Y+ F! r$ J
[root@kvm qemu]# cp vs-centos-1.xml clone-vm-1.xml 1 g1 I* M+ J- @& U" [
[root@kvm qemu]# cp vs-centos-1.xml clone-vm-2.xml. T& D' z. G: G3 m) X w
; `& \! R6 G) ^* P0 l
1 I4 T. T" f8 `5 D
4.4.编辑虚拟机的配置文件
8 a4 B7 Z- x$ H7 Q. }' V, k' K4 y# D) }在拷贝的虚拟机配置文件中将以下这些配置删除,否则会有问题。/ F+ J; ]8 t- v7 t' k7 b& s2 W$ V
4 ^3 ^9 m! c# c7 j+ ?<uuid>940a207d-a412-4f34-b1ba-c2ee8898f02b</uuid>5 W3 T% M1 I0 I! k- j; [/ @" K
6 ~' o5 G) b) W: ?
<mac address='52:54:00:eb:f6:97'/>0 Q+ ]3 n+ b7 \
0 S2 J* n- j: _4 j
<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
" b! j' n. j9 E4 `# _- V6 P3 ~0 S* f, O: T$ _& {& N% I' Q$ \/ k
4.4.1.vs-centos-1虚拟机的配置文件
: v! w4 l- g# V0 L) o, \ _6 D[root@kvm qemu]# vim clone-vm-1.xml
. e4 }( o: J0 z<!--
: V! _ A5 f5 f- P& x7 x+ i! rWARNING: THIS IS AN AUTO-GENERATED FILE. CHANGES TO IT ARE LIKELY TO BE
2 l- b/ D {6 ]3 |' t7 oOVERWRITTEN AND LOST. Changes to this xml configuration should be made using:
; l: b! ?. l+ q) q5 F virsh edit vs-centos-11 k$ S5 \" x6 ? R; @, X
or other application using the libvirt API.
, L1 Q1 m% |% H-->! j( B/ C2 O$ f, D1 U7 ^
: `+ P5 j2 }8 D4 H& f* S$ f' r<domain type='kvm'>9 A$ Q% G, C: x# }+ U5 M+ l/ Y
<name>clone-vm-1</name> <!--虚拟机的名称-->
* s5 Z' B# p+ n6 j6 W! g: B <memory unit='KiB'>1048576</memory>
0 Y- D: L4 T* Z: C5 U# I3 M <currentMemory unit='KiB'>1048576</currentMemory>
7 ~' I J2 T7 Q0 J: ]- ~" y <vcpu placement='static'>1</vcpu>; a' u( `+ `/ r
<os>9 t/ x/ }, a! B" | |
<type arch='x86_64' machine='pc-i440fx-rhel7.0.0'>hvm</type>
$ ]# Z" Z& X& K9 X! d. y- J8 Z <boot dev='hd'/>
8 Z- x% W/ h: U) P* z& Z </os>0 X1 u* [& A$ w$ a
<features>( A0 k* i |. k, q2 O! t( b9 O
<acpi/>* J1 o! b/ n4 Y- K4 u9 l
<apic/>% D; K/ |; L! `/ T
</features>/ F$ ?6 Y3 [7 d* t+ z
<cpu mode='custom' match='exact' check='partial'>
' ]3 y- s) |: K* M) H5 W& Q <model fallback='allow'>Nehalem-IBRS</model>
+ P4 [9 d S/ Y( e </cpu>) ^% Q! Y _5 X \* h
<clock offset='utc'>
5 i, u( V* m, l/ F+ j2 S7 i' X3 g <timer name='rtc' tickpolicy='catchup'/>7 [2 j# y4 I2 k+ j
<timer name='pit' tickpolicy='delay'/>6 L- a7 E3 T' k+ W
<timer name='hpet' present='no'/>4 Y a0 W2 V% z. z/ o* @
</clock>
7 N# g% q1 e" F/ C% E <on_poweroff>destroy</on_poweroff>$ r0 I5 U% a3 ]
<on_reboot>restart</on_reboot>
) v9 t8 f6 R) _ @$ v <on_crash>destroy</on_crash>
. w7 p& R$ @+ s+ O0 K <pm>, N' U/ B# ^- x# x* x' ], ]
<suspend-to-mem enabled='no'/>
( I( B9 q7 _; K( N( L9 H9 R/ q& s <suspend-to-disk enabled='no'/>: t2 X( p' k3 O# P" s5 Z
</pm>6 E# k9 \: H* I; e7 `
<devices>
0 c7 T" `, L, r; B <emulator>/usr/libexec/qemu-kvm</emulator>
: `$ o' L- l0 q' T/ V# A1 ` <disk type='network' device='disk'>
) a* x6 g! ]. x <driver name='qemu'/>
, O6 v2 J1 @& ?) h1 l' b <auth username='kvm-libvirt'>
" y' w$ n( b7 J1 `5 i/ @# G/ R2 [ <secret type='ceph' uuid='66d9bec3-cbd7-4161-9614-1d0bc81c5e82'/>! i) o! e' T7 G& a( U4 B3 }
</auth>, m3 V$ X' W0 i/ w
<source protocol='rbd' name='kvm-libvirt-pool/clone-vm-1.img'> <!--填写克隆的系统镜像块存储路径-->
- L" Z- z% h9 N5 N <host name='192.168.20.20' port='6789'/>
' h$ O/ _% W. h3 |# y1 ]! ] <host name='192.168.20.21' port='6789'/>
" ?3 d4 O7 l: o <host name='192.168.20.22' port='6789'/>+ o/ x8 C7 `7 N2 D
</source>% P; C* A$ i- a0 x8 q4 y& t4 g
<target dev='vda' bus='virtio'/>- [ [9 z3 a( ?. ?- S7 A
</disk>
k# K) w# U/ x. _) e <disk type='file' device='cdrom'>% I* ? b! o: H8 f5 H$ b* H
<driver name='qemu' type='raw'/>' G0 c$ l, _+ Y7 w) O, x
<target dev='hda' bus='ide'/> J+ E! |7 z" O! V4 p/ b
<readonly/>
! l8 A+ [+ v C0 Y+ ] <address type='drive' controller='0' bus='0' target='0' unit='0'/>; y( h) k8 T6 c7 W5 \; t, e
</disk>0 h$ V4 H7 e9 K( u0 P
<controller type='usb' index='0' model='ich9-ehci1'>
, C& N: u! y9 k( G- c/ ]6 }9 t <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x7'/>0 }( L( g X1 o2 _- |
</controller>
9 m! q6 g ^5 G# B <controller type='usb' index='0' model='ich9-uhci1'>
9 D! f1 @! b* g9 H$ [ <master startport='0'/>
+ N7 j7 I3 l% L) F6 G( ? <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0' multifunction='on'/>/ W* R: A. u3 m4 P& }8 ]& ?
</controller>8 R1 I9 P u! }/ E
<controller type='usb' index='0' model='ich9-uhci2'>
9 ~1 V g! ~. d" g: ~* |9 V <master startport='2'/>0 N8 m. q I% T# [
<address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x1'/>
4 @; H. ?3 P1 X& ^# T </controller>
- p+ p' `6 A1 U, ~; d* k; I <controller type='usb' index='0' model='ich9-uhci3'>
# }9 A1 c6 `7 H) }* {3 H4 u- Y <master startport='4'/>, c# Q, }/ B, \; e- a& \
<address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x2'/>" I5 A; w K# {: F
</controller>: l3 Z: C4 t! H, h* p
<controller type='pci' index='0' model='pci-root'/>& z' N% h& ]' B9 T9 C
<controller type='ide' index='0'>! |9 R$ V2 E9 Q7 l( {, M
<address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/>* ~* k! @5 B) @
</controller>- j9 b. x4 G: S" l, \3 e
<controller type='virtio-serial' index='0'>
" ?! a8 `( s' m: v <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/>8 P$ ^7 L0 t& g9 S. h
</controller>
( ?' U/ q9 Z+ }5 a; J3 C <interface type='network'>
1 u' U3 M/ n8 \5 {* ]7 { <source network='default'/>4 u) L |( `2 S7 F; C
<model type='virtio'/># |+ V+ z9 h) U/ s0 m4 C( e
</interface>- B0 r8 a, R9 `5 g
<serial type='pty'>0 F0 J% W ?# {( Y9 S
<target type='isa-serial' port='0'>8 b9 P3 @- S7 K8 G$ X
<model name='isa-serial'/>2 s9 c. X- q$ j
</target>$ K( f, ]1 K1 A# r
</serial>5 D7 O8 B7 {/ [) o9 h+ E
<console type='pty'>; W" R) ~ ?/ M" t+ N5 z
<target type='serial' port='0'/>
; C2 p4 ~& v- S& ]5 p$ S2 k8 e0 H </console>
6 J( _/ c! \% f1 Q; }8 ` <channel type='unix'>) j3 e8 _" R6 u1 j9 ?5 f
<target type='virtio' name='org.qemu.guest_agent.0'/>1 U( K2 ^/ @! J% W% j) @6 N
<address type='virtio-serial' controller='0' bus='0' port='1'/> R% P: B- n1 Q5 _6 n0 {/ G* l4 ?
</channel>: R- E& L) m- w
<input type='tablet' bus='usb'>
! M0 |% @- N! ^6 l% ^ <address type='usb' bus='0' port='1'/>
. [8 c. f3 A' \ </input>
3 \* k: b' m" k <input type='mouse' bus='ps2'/>! B# H' ~7 _, [; Y K% D1 r7 k
<input type='keyboard' bus='ps2'/>
; c. g6 ]9 X/ P' M <graphics type='vnc' port='5901' autoport='no' listen='0.0.0.0' passwd='123456'> <!--修改VNC的端口号-->
: E2 H5 }/ I3 M0 q0 g) O% E3 d <listen type='address' address='0.0.0.0'/>
7 A0 @/ Q5 Z) e; O/ s! K </graphics>
; @* V& ~4 ^( [2 C4 f <video>
+ I/ c$ K- D+ i <model type='cirrus' vram='16384' heads='1' primary='yes'/>
8 l- |9 g; W! X4 u3 j1 @ <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
4 C3 b7 h' X6 R! U </video>
) z v# |) R' m" D) F <memballoon model='virtio'>& \* _# Z' J( ?3 ?& K7 F3 I/ i( B
<address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/>, D( F, r- n2 M
</memballoon>
x0 s7 o; O% x6 y7 I( r </devices>
7 ? n5 Q8 s4 c0 o" A; b# i</domain>+ ?0 a0 a, ^9 O3 ]
8 ? V- j9 r! d" T& k
4.4.1.vs-centos-2虚拟机的配置文件
% B+ L+ B- ?# r& B[root@kvm qemu]# vim clone-vm-2.xml& x8 }1 B! ~0 `; j6 ~2 z0 L
<!--, V, ^6 l5 t; A2 r0 I* M0 @8 K
WARNING: THIS IS AN AUTO-GENERATED FILE. CHANGES TO IT ARE LIKELY TO BE
. l; L- f+ X" Q+ i4 [OVERWRITTEN AND LOST. Changes to this xml configuration should be made using:
% B* C, Q+ Y/ [5 l. |# C' [" Q Y virsh edit vs-centos-1
' z3 Q6 t( q1 t' k; h) _/ eor other application using the libvirt API.: d+ |& a! m' B( N1 L$ k$ l
-->$ ]) W$ p. l8 ^7 t- v
3 I' u2 N' `% `: o3 T: ]- S3 Z
<domain type='kvm'>% V% n5 f" _( P; V% E
<name>clone-vm-2</name> <!--虚拟机的名称-->5 E# p8 B! J8 t P3 p! p( }
<memory unit='KiB'>1048576</memory>3 R! [, U2 q+ K' s7 _3 ]
<currentMemory unit='KiB'>1048576</currentMemory>
" K8 l& F2 f" p1 @ <vcpu placement='static'>1</vcpu>& P7 }: F# }3 K" t; }
<os>7 D8 _" L" F+ J8 |" k8 x
<type arch='x86_64' machine='pc-i440fx-rhel7.0.0'>hvm</type>4 I) \/ F, P: o( V9 }$ k9 I( I
<boot dev='hd'/>
& h& F# M. s' E9 n) M j </os>
I5 d; R9 W5 M! U+ z <features>% \, b; y1 g' ~8 b; b5 h
<acpi/>5 W* i( u" e0 M: v5 s
<apic/>
+ R! ?0 A! F8 e3 h </features>1 T9 c4 z& I! n6 p1 F1 {# } q
<cpu mode='custom' match='exact' check='partial'>
0 s3 C: s2 |* e) m* a. F( P1 C, | <model fallback='allow'>Nehalem-IBRS</model>
& }2 Q, } H8 L' L% Z' G </cpu>
! O1 Z0 |' G3 Z; y! t# a, c) [ <clock offset='utc'>
/ J$ [7 W9 Q. b* o" Q4 ^ <timer name='rtc' tickpolicy='catchup'/>
^5 g8 n/ ]/ B9 ] <timer name='pit' tickpolicy='delay'/>
- a) C: B- n6 m* G& f4 u <timer name='hpet' present='no'/>6 L( e2 A+ f G* x: H
</clock>
9 E5 K7 Q) t9 Z <on_poweroff>destroy</on_poweroff>" ?( m q [$ O8 ^6 ]! j
<on_reboot>restart</on_reboot>
& I' a- s9 C6 d0 m3 y <on_crash>destroy</on_crash>
) I3 T2 w7 x% C8 K <pm>6 m9 ?' c# x: w5 ~2 c
<suspend-to-mem enabled='no'/>
- Q1 K2 c# a0 p. r1 j2 q8 p <suspend-to-disk enabled='no'/>
4 }& z. c9 b9 G </pm>
4 P3 b' }; Z0 N0 K* y* S <devices>$ k/ }) m- y, J# t7 N) q
<emulator>/usr/libexec/qemu-kvm</emulator>4 Q6 B; m3 I* n V P* E1 L; m
<disk type='network' device='disk'># w; T, T1 ?& n. b, r
<driver name='qemu'/>5 q, M( N5 a/ k
<auth username='kvm-libvirt'>! n5 J7 c" Q7 A
<secret type='ceph' uuid='66d9bec3-cbd7-4161-9614-1d0bc81c5e82'/>
/ a: l, o! C0 I. ]& V+ ?5 b0 f5 O </auth>
2 {! x0 n% ]; F6 I <source protocol='rbd' name='kvm-libvirt-pool/clone-vm-2.img'> <!--填写克隆的系统镜像块存储路径--> \. o) n% m! _9 N1 L: M& G7 a- `
<host name='192.168.20.20' port='6789'/>+ E6 j* E( o! e: t9 Z6 }5 M
<host name='192.168.20.21' port='6789'/>, K8 k& W* w- w% W* G' v1 S( \
<host name='192.168.20.22' port='6789'/>& J6 r, \5 ^, u
</source>
; z0 _, ?# C8 e& T! C' b <target dev='vda' bus='virtio'/>5 C6 k! |; v3 c% z4 V
</disk>6 b s1 r6 n" p0 H7 T
<disk type='file' device='cdrom'>
8 t# ~, @$ c- T- H! n& y <driver name='qemu' type='raw'/>
+ Q9 @) t4 Z. v <target dev='hda' bus='ide'/>8 T3 v& v2 b- ?* ^- U+ I1 Z/ b
<readonly/>
! j+ `& \7 p; U! O* t <address type='drive' controller='0' bus='0' target='0' unit='0'/>
9 N- d/ J4 r; f# Q8 ] </disk>
1 M7 m3 V$ g& `2 Y1 |, [$ r0 ]9 I <controller type='usb' index='0' model='ich9-ehci1'> C4 f/ b0 f& F5 n) W; `
<address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x7'/>
. C1 x' S; n# B: R) z; W5 X6 p </controller>! z6 i4 o; v- ~& J. |6 h6 j
<controller type='usb' index='0' model='ich9-uhci1'>
# s$ A0 N: n1 x <master startport='0'/>
" w/ S6 a; G) T/ R- j5 g: ] <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0' multifunction='on'/>$ L6 K/ r+ m# o7 P5 X( a# O
</controller>6 T7 u8 D0 o" C
<controller type='usb' index='0' model='ich9-uhci2'>) |: C" p7 o2 _+ T. ]3 ^6 m
<master startport='2'/>1 D/ r4 K7 u9 k- N8 V
<address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x1'/>
; |3 D: d* l" ^, P8 n6 p </controller>3 N) g; W( g& X9 y" j. M
<controller type='usb' index='0' model='ich9-uhci3'>
: D7 b) U7 e; i2 s0 q/ |1 M <master startport='4'/>
9 v" l8 Q/ X" p v" H- I- z <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x2'/>7 D' t$ n- T3 J
</controller>
* \8 f/ u& m3 D+ Q6 Z <controller type='pci' index='0' model='pci-root'/>
: r4 }4 E' |9 @ <controller type='ide' index='0'>! d& ^) j+ N# }1 A! ~0 x
<address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/>
9 ?: {+ p1 I; N7 N/ F, }4 t </controller>
$ S% [2 @( @( f$ m; ] <controller type='virtio-serial' index='0'>
7 s# z# v3 Z8 w" i2 ~& r4 S0 @ <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/>, f& a7 P8 o6 {& w% u3 m; _% T
</controller>1 c7 ?0 }/ E8 ^+ t/ n: a
<interface type='network'>
( @. ~9 E% I# K( i* f+ m. q <source network='default'/>4 c5 {- f; g/ C% ?( w9 }' {
<model type='virtio'/>4 ]& W9 c9 d& K5 H. \; M! q5 N/ f, S
</interface>
0 P7 P1 s) I+ m5 S0 P' l4 Z _4 | <serial type='pty'>6 s' ]9 X3 k% w8 [1 Z* B
<target type='isa-serial' port='0'>% { o" M% H: N% M
<model name='isa-serial'/>
) m! E1 E& y: u# k# F </target>0 L" t( E; c z: T2 v
</serial>
! }2 y. n6 e* k1 k0 O6 o <console type='pty'>
3 s3 p' Y0 W4 S4 L% N7 M" F <target type='serial' port='0'/>8 [/ H Z& N% P8 z/ V' e
</console>/ Y5 \( x5 T+ B8 [2 W* Q
<channel type='unix'>2 b% {$ K! [% X L
<target type='virtio' name='org.qemu.guest_agent.0'/>" b4 m- ~$ E: J# N- N5 \
<address type='virtio-serial' controller='0' bus='0' port='1'/>6 {5 t$ C' I: s
</channel>6 Y S7 i1 n, C7 E9 t2 T( w& }
<input type='tablet' bus='usb'>( z7 y( _ S# c0 Q0 y
<address type='usb' bus='0' port='1'/>
4 s& _% Q2 p' Q) y; R3 h9 Q; D </input>
# t- n+ T# J# r2 u6 K5 ]0 G <input type='mouse' bus='ps2'/>
9 ?0 {0 x7 m1 ?# k/ J' ^" m: B3 n5 ] <input type='keyboard' bus='ps2'/>9 m( @1 C7 ]2 k# \
<graphics type='vnc' port='5902' autoport='no' listen='0.0.0.0' passwd='123456'> <!--修改VNC的端口号-->
% m6 v+ ^2 O# B. P3 n+ g" r- ]# e <listen type='address' address='0.0.0.0'/>( V, X- u4 B% P: s% E
</graphics>- ?7 ~# l$ j0 g8 ?# k& ^# ~# ^* l
<video>) Z2 N* O/ M" t6 f1 ~
<model type='cirrus' vram='16384' heads='1' primary='yes'/>
3 v m; r1 e! _& {; u; g <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>( ~) w. t: |6 j9 r7 D: K
</video>9 @& U: m4 o) u* P' x& R9 d4 L
<memballoon model='virtio'>; h# C; U: Z( a! \6 V6 Q" w e- j
<address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/>
! M& Y( m: r$ V# B: v$ c, k </memballoon>* Q- B3 k# `! o1 Y6 x8 b
</devices>' A6 l+ j5 \3 F" O( r: ~; ^
</domain>
+ c: G3 E( w' }6 d+ M
9 [) f9 r8 _% Y7 M% O$ g8 L8 p1 Y& j7 N. ]. f# P7 ?
4.5.将虚拟机配置文件导入到虚拟化平台
3 F& U. x2 `/ n" j* Y[root@kvm qemu]# virsh define clone-vm-1.xml t* @$ {& |: L
定义域 clone-vm-1(从 clone-vm-1.xml)
9 y7 U% h. d! q, t! J1 q8 g* M8 d: {: r5 O( L: F; ~3 R) \9 p
[root@kvm qemu]# virsh define clone-vm-2.xml
* c- M; o# F/ v. T& Q定义域 clone-vm-2(从 clone-vm-2.xml)
2 P% o5 ]7 P, N C& `( ~1 u- A
; F+ R" X7 W8 k2 D导入虚拟机后,虚拟机并不会运行,而是出于挂起状态,等待管理员手动启动。* n+ A4 P9 E: z: @" F+ c: S
8 Q3 `$ Z: }4 R/ I4 c
[root@kvm qemu]# virsh list --all4 z5 X5 E: P ]. h) X: p
Id 名称 状态
# i9 d: R" p3 u, C# N----------------------------------------------------, R& I3 s9 j/ q
7 vs-centos-1 running5 W* ?. q, E3 E2 n
- clone-vm-1 关闭1 r( `) D0 T* y
- clone-vm-2 关闭2 W6 O! T2 y5 D7 X
6 y: W/ M0 H X+ V0 j" [8 u4 O
4.6.启动虚拟机验证是否能够秒级使用: y; x/ H: n6 A2 o: A3 z( U4 h
[root@kvm qemu]# virsh start clone-vm-1
! u( x2 m1 u* A1 l/ y5 a5 h9 |域 clone-vm-1 已开始2 X8 D, U* g1 d% S- V/ y6 @' y( G
) N9 j4 I0 a9 B8 z7 V0 b _, I" J[root@kvm qemu]# virsh start clone-vm-24 V% G2 q. b6 H# T$ j0 p) ^- H
域 clone-vm-2 已开始
" c! W0 O4 o. T- E2 A8 p& d# m# x- h* F9 {
! [1 K+ W' ?0 Z/ I9 k4 A* p待后期更新。( M+ J* q% ^0 J% w$ M9 p, {
0 @; q1 q' H; u9 ~7 L! w1 A8 z% k5 T' J) W: ]% t
|
|