KVM安装
查看cpu是否支持虚拟化
cat /proc/cpuinfo | grep -E ‘vmx|svm’
“关闭防火墙和selinux” --注:如果虚拟机ping不通就把防火墙开起来
1.需求内核(rhel6以上):
[root@kvm-server ~]# uname -r
3.10.0-1062.el7.x86_64
2.如果之前安装kvm了清理环境:卸载kvm
[root@kvm-server ~]# yum remove rpm -qa | egrep qemu|virt|kvm
-y
[root@kvm-server ~]# rm -rf /var/lib/libvirt /etc/libvirt/
3.升级系统:(在安装虚拟机出错的情况下,一般是操作系统的版本问题)
[root@kvm-server ~]# yum upgrade
4.安装软件:
[root@kvm-server ~]# yum install qemu virt librbd1-devel -y
其实下载的是下面几款软件
[root@kvm-server ~]# yum install qemu-kvm libvirt virt-manager librbd1-devel -y
qemu-kvm libvirt virt-manager
qemu-kvm : 主包
libvirt:api接口
virt-manager:图形化界面
5.启动服务:
centos7:
[root@kvm-server ~]# systemctl start libvirtd
6.查看kvm模块加载:
[root@kvm-server ~]# lsmod | grep kvm
kvm_intel 188644 0
kvm 621480 1 kvm_intel
irqbypass 13503 1 kvm
如果看到有这两行,说明支持kvm模块
KVM gustos图形方式部署安装虚拟机
[root@kvm-server ~]# virt-manager
====================
下面就是点点点
#安装完成一台虚拟机之后,网络模式默认是NAT的。也只有这一种网络
备注
#####一、GuestOS安装问题解析
问题1:用图形安装guest os的时候卡住不动
解决:升级系统
[root@qfedu.com ~]# yum upgrade -y
问题2:升级系统后安装guest os的时候还是卡住不动
解决:需要在安装宿主机的时候安装兼容性程序(有的同学就没有安装也可以使用,这可能是bug)
问题3:如果安装了各种兼容程序之后还是不行
如果所有问题都排查过后还是安装不上guestos,最后的原因就是在安装宿主机系统的时候各种兼容性软件没有安装而且Yum也没有自动处理导致的
完全文本方式安装虚拟机
[root@kvm-server ~]# yum install -y vsftpd #安装ftp,并配置最后将镜像上传到ftp中
[root@kvm-server ~]# mkdir /var/ftp/centos7u4
[root@kvm-server IOS]# mount CentOS-7-x86_64-DVD-1708.iso /var/ftp/centos7u4/
[root@kvm-server ~]# virt-install --connect qemu:///system -n vm10 -r 2050 --disk path=/var/lib/libvirt/images/vm10.img,size=5 --os-type=linux --os-variant=centos7.0 --vcpus=1 --location=ftp://10.0.111.182/centos7u4 -x console=ttyS0 --nographics
用这种方式安装的操作系统有一个毛病:纯文本安装的输入时大小写莫名的变换,远程ssh没问题。内存不低于2G
注意:
virt-install
bash: virt-install: 未找到命令…
yum install libguestfs-tools -y
yum install virt-install.noarch -y
参数解释:
-n name
-r 以M为单位指定分配给虚拟机的内存大小
–disk 指定作为客户机存储的媒介 size以G为单位的存储
–os-type 系统类型
–os-variant 系统类型版本
–vcpus 指定核数,不能超过物理cpu
–location 客户虚拟机安装源下载,必须为镜像挂载在ftp目录下
-x console=ttyS0 执行终端0
–nographics 无图形,文本模式
模板镜像+配置文件 方式安装虚拟机—需要掌握
1.虚拟机配置文件
[root@kvm-server ~]# ls /etc/libvirt/qemu
networks vm2.xml
2.储存虚拟机的介质
[root@kvm-server ~]# ls /var/lib/libvirt/images/
vm2.img
define方式创建好,不会启动
create方式创建好,会启动
实战:
1.拷贝模板镜像和配置文件
[root@kvm-server ~]# cp /etc/libvirt/qemu/vm2.xml /etc/libvirt/qemu/vm3.xml
[root@kvm-server ~]# cp /var/lib/libvirt/images/vm2.img /var/lib/libvirt/images/vm3.img
2.修改配置文件
生成新的UUID
[root@kvm-server ~]# uuidgen
2e3fa6db-ff7f-41c3-bc8f-0428e81ebb57
[root@kvm-server ~]# vim /etc/libvirt/qemu/vm3.xml
<domain type='kvm'>
<name>vm3</name> #名字不能一样需要修改
<uuid>2e3fa6db-ff7f-41c3-bc8f-0428e81ebb57</uuid> #uuid不能一样需要修改
<memory unit='KiB'>1024000</memory> #内存,可选
<currentMemory unit='KiB'>1024000</currentMemory> #当前内存与上面定义一样
<vcpu placement='static'>2</vcpu> #cpu可选
<os>
<type arch='x86_64' machine='pc-i440fx-rhel7.0.0'>hvm</type>
<boot dev='hd'/>
</os>
<features>
<acpi/>
<apic/>
</features>
<cpu mode='custom' match='exact' check='partial'>
<model fallback='allow'>SandyBridge-IBRS</model>
<feature policy='require' name='md-clear'/>
<feature policy='require' name='spec-ctrl'/>
<feature policy='require' name='ssbd'/>
</cpu>
<clock offset='utc'>
<timer name='rtc' tickpolicy='catchup'/>
<timer name='pit' tickpolicy='delay'/>
<timer name='hpet' present='no'/>
</clock>
<on_poweroff>destroy</on_poweroff>
<on_reboot>restart</on_reboot>
<on_crash>destroy</on_crash>
<pm>
<suspend-to-mem enabled='no'/>
<suspend-to-disk enabled='no'/>
</pm>
<devices>
<emulator>/usr/libexec/qemu-kvm</emulator>
<disk type='file' device='disk'>
<driver name='qemu' type='qcow2'/>
<source file='/var/lib/libvirt/images/vm3.img'/> #磁盘镜像需要修改
<target dev='vda' bus='virtio'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/>
</disk>
<controller type='usb' index='0' model='ich9-ehci1'>
<address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x7'/>
</controller>
<controller type='usb' index='0' model='ich9-uhci1'>
<master startport='0'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0' multifunction='on'/>
</controller>
<controller type='usb' index='0' model='ich9-uhci2'>
<master startport='2'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x1'/>
</controller>
<controller type='usb' index='0' model='ich9-uhci3'>
<master startport='4'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x2'/>
</controller>
<controller type='pci' index='0' model='pci-root'/>
<controller type='virtio-serial' index='0'>
<address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
</controller>
<interface type='network'>
<mac address='52:54:00:82:d6:3c'/> #mac地址不能一样需要修改,只能修改后三段。
<source network='default'/>
<model type='virtio'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
</interface>
<serial type='pty'>
<target type='isa-serial' port='0'>
<model name='isa-serial'/>
</target>
</serial>
<console type='pty'>
<target type='serial' port='0'/>
</console>
<channel type='unix'>
<target type='virtio' name='org.qemu.guest_agent.0'/>
<address type='virtio-serial' controller='0' bus='0' port='1'/>
</channel>
<channel type='spicevmc'>
<target type='virtio' name='com.redhat.spice.0'/>
<address type='virtio-serial' controller='0' bus='0' port='2'/>
</channel>
<input type='tablet' bus='usb'>
<address type='usb' bus='0' port='1'/>
</input>
<input type='mouse' bus='ps2'/>
<input type='keyboard' bus='ps2'/>
<graphics type='spice' autoport='yes'>
<listen type='address'/>
<image compression='off'/>
</graphics>
<sound model='ich6'>
<address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
</sound>
<video>
<model type='qxl' ram='65536' vram='65536' vgamem='16384' heads='1' primary='yes'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
</video>
<redirdev bus='usb' type='spicevmc'>
<address type='usb' bus='0' port='2'/>
</redirdev>
<redirdev bus='usb' type='spicevmc'>
<address type='usb' bus='0' port='3'/>
</redirdev>
<memballoon model='virtio'>
<address type='pci' domain='0x0000' bus='0x00' slot='0x08' function='0x0'/>
</memballoon>
<rng model='virtio'>
<backend model='random'>/dev/urandom</backend>
<address type='pci' domain='0x0000' bus='0x00' slot='0x09' function='0x0'/>
</rng>
</devices>
</domain>
#必须修改name,uuid,mac地址,其余可选
用vim修改完之后需要define一下配置文件
[root@kvm-server ~]# virsh define /etc/libvirt/qemu/vm3.xml
重启一下:
[root@kvm-server ~]# systemctl restart libvirtd
宿主机开启路由转发:
[root@kvm-server ~]# vim /etc/sysctl.conf
[root@kvm-server ~]# sysctl -p
net.ipv4.ip_forward = 1
查看虚拟机列表:
[root@kvm-server ~]# virsh list --all
Id 名称 状态
----------------------------------------------------
- vm2 关闭
- vm3 关闭
四、虚拟机添加设备
1.图形方式:
首先,关闭要添加硬件的虚拟机
双击虚拟机,在打开的对话框点击上方的View,点击Details,点击Add Hardware可以选择要添加的虚拟硬件
按需求点点就可以了。
```shell
2.修改配置文件方式:
我们给虚拟机vm3添加磁盘为例:
首先需要创建出要添加的磁盘
[root@kvm-server ~]# qemu-img create -f qcow2 /var/lib/libvirt/images/vm4-1.qcow2 5G
注:创建空的磁盘文件:这里我们创建一个5G的磁盘,不过创建出来,通过ll -h查看大小,看不出它是5G,添加上之后才能看到
[root@kvm-server ~]# cd /etc/libvirt/qemu/
[root@kvm-server qemu]# vim vm3.xml
加好之后,启动虚拟机
[root@kvm-server qemu]# systemctl restart libvirtd
[root@kvm-server qemu]# virsh list --all
Id 名称 状态
----------------------------------------------------
6 centos7.0 running
- vm3 关闭
[root@kvm-server qemu]# virsh start vm3
可以看到我们新添加的磁盘vdb
#然后可以正常分区,制作文件系统,进行挂载
虚拟机克隆
1.图形界面:Applications (左上角)-----> System Tools ------>Virtual Machine Manager
关闭要克隆的虚拟机,右键点击虚拟机选择Clone
2.在终端执行命令克隆
[root@kvm-server ~]# virt-clone -o vm2 --auto-clone
正在分配 'vm2-clone.qcow2' | 5.0 GB 00:00
成功克隆 'vm2-clone'。
-o origin-原始
[root@kvm-server ~]# virt-clone -o vm2 -n vm5 --auto-clone
正在分配 'vm5.qcow2' | 5.0 GB 00:00
成功克隆 'vm5'。
-n :指定新客户机的名字
[root@kvm-server ~]# virt-clone -o vm2 -n vm6 -f /var/lib/libvirt/images/vm6.img
正在分配 'vm6.img' | 5.0 GB 00:00
成功克隆 'vm6'。
-f ,--file NEW_DISKFILE:为新客户机使用新的磁盘镜像文件
这条命令在克隆的同时,可以指定镜像文件的位置和名称。
[root@kvm-server ~]# virsh list --all
Id 名称 状态
----------------------------------------------------
- vm2 关闭
- vm2-clone 关闭
- vm3 关闭
- vm5 关闭
- vm6 关闭
kvm高级命令
#建立虚拟机磁盘镜像文件:
磁盘镜像文件格式:
1.qed ----不用了
2.raw 原始格式,性能最好 直接占用你一开始给多少 系统就占多少 不支持快照
qcow 先去网上了解一下cow(写时拷贝copy on write) ,性能远不能和raw相比,所以很快夭折了,所以出现了qcow2(性能低下 早就被抛弃)
3.qcow2 性能上还是不如raw,但是raw不支持快照,qcow2支持快照。
#什么叫写时拷贝?
raw立刻分配空间,不管你有没有用到那么多空间
qcow2只是承诺给你分配空间,但是只有当你需要用空间的时候,才会给你空间。最多只给你承诺空间的大小,避免空间浪费
实际工作当中用哪个 看你用不用快照。本身做快照也是需要存储空间的。
[root@kvm-server images]# pwd
/var/lib/libvirt/images
建立qcow2格式磁盘文件:
[root@kvm-server images]# qemu-img create -f qcow2 test.img 5G
Formatting 'test.img', fmt=qcow2 size=5368709120 encryption=off cluster_size=65536 lazy_refcounts=off
qemu-kvm qemu是早先的一个模拟器,kvm是基于qemu发展出来的。
建立raw格式磁盘文件:
[root@kvm-server images]# qemu-img create -f raw test.raw 5G
Formatting 'test.raw', fmt=raw size=5368709120
查看已经创建的虚拟磁盘文件:
[root@kvm-server images]# qemu-img info test.img
[root@kvm-server images]# qemu-img info test.raw
=============================================================================
#挂载磁盘,,,先前条件:文件系统没有坏掉
将vm2虚拟机先关闭
查看vm2的磁盘镜像分区信息:
[root@kvm-server images]# virt-df -h -d vm2
文件系统 大小 已用空间 可用空间 使用百分比%
vm2:/dev/sda1 1014M 92M 922M 10%
vm2:/dev/centos/root 3.5G 863M 2.6G 25%
1.创建一个挂载目录
[root@kvm-server images]# mkdir /test
2.挂载虚拟机的跟分区到test目录
[root@kvm-server images]# guestmount -d vm2 -m /dev/centos/root --rw /test/
[root@kvm-server images]# cd /test/
[root@kvm-server test]# ls
bin dev home lib64 mnt proc run srv tmp var
boot etc lib media opt root sbin sys usr
[root@kvm-server test]# cat etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:997:User for polkitd:/:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
取消挂载
[root@kvm-server ~]# guestunmount /test
五、KVM存储配置
#存储池
概念:
kvm必须要配置一个目录当作他存储磁盘镜像(存储卷)的目录,我们称这个目录为存储池
#kvm默认存储池的位置:
/var/lib/libvirt/images/
1.创建基于文件夹的存储池(目录,可自定义)
[root@kvm-server ~]# mkdir -p /data/vmfs
2.定义存储池与其目录
[root@kvm-server ~]# virsh pool-define-as vmdisk --type dir --target /data/vmfs
Pool vmdisk defined
解释:vmdisk是新建的存储池的名称。可自定义
3.创建已定义的存储池
(1)创建已定义的存储池
[root@kvm-server ~]# virsh pool-build vmdisk
Pool vmdisk built
(2)查看已定义的存储池,存储池不激活无法使用。
[root@kvm-server ~]# virsh pool-list --all
Name State Autostart
-------------------------------------------
default active yes
ISO active yes
vmdisk inactive no
4.激活并自动启动已定义的存储池
[root@kvm-server ~]# virsh pool-start vmdisk
Pool vmdisk started
[root@kvm-server ~]# virsh pool-autostart vmdisk
Pool vmdisk marked as autostarted
[root@kvm-server ~]# virsh pool-list --all
Name State Autostart
-------------------------------------------
default active yes
ISO active yes
vmdisk active yes
这里vmdisk存储池就已经创建好了,可以直接在这个存储池中创建虚拟磁盘文件了。
5.在存储池中创建虚拟机存储卷
[root@kvm-server ~]# virsh vol-create-as vmdisk vm99.qcow2 2G --format qcow2
Vol vm99.qcow2 created
[root@kvm-server ~]# ll /data/vmfs/ -h
总用量 196K
-rw------- 1 root root 193K 10月 25 16:04 vm99.qcow2
6.存储池相关管理命令
(1)在存储池中删除虚拟机存储卷
[root@kvm-server ~]# virsh vol-delete --pool vmdisk vm99.qcow2
Vol vm99.qcow2 deleted
(2)取消激活存储池
[root@kvm-server ~]# virsh pool-destroy vmdisk
Pool vmdisk destroyed
(3)删除存储池定义的目录/data/vmfs
[root@kvm-server ~]# virsh pool-delete vmdisk
Pool vmdisk deleted
(4)取消定义存储池
[root@kvm-server ~]# virsh pool-undefine vmdisk
Pool vmdisk has been undefined
到此kvm存储池配置与管理操作完毕。
六、kvm快照
为虚拟机vm2创建一个快照(磁盘格式必须为qcow2)
[root@kvm-server ~]# virsh snapshot-create-as vm2 vm2.snap1
注意:如果在创建快照的时候报错:
error: unsupported configuration: internal snapshot for disk vda unsupported for storage type raw
raw
不支持snapshot
qcow2
现在比较主流的一种虚拟化镜像格式,经过一代的优化,目前qcow2的性能上接近raw裸格式的性能,这个也算是redhat的官方渠道了
对于qcow2的格式,几点还是比较突出的:
•更小的存储空间
•支持多个snapshot,对历史snapshot进行管理
查看磁盘文件格式
[root@kvm-server images]# qemu-img info /var/lib/libvirt/images/vm2.qcow2
image: /var/lib/libvirt/images/vm2.qcow2
file format: qcow2
virtual size: 5.0G (5368709120 bytes)
disk size: 5.0G
cluster_size: 65536
Format specific information:
compat: 1.1
lazy refcounts: true
[root@kvm-server ~]# virsh snapshot-list vm2 #查看某台虚拟机设备的快照
Name Creation Time State
------------------------------------------------------------
创建一块磁盘
[root@kvm-server ~]# qemu-img create -f raw /var/lib/libvirt/images/vm2-1.raw 2G
Formatting '/var/lib/libvirt/images/vm2-1.raw', fmt=raw size=2147483648
[root@kvm-server ~]# ll -h /var/lib/libvirt/images/vm2-1.raw
-rw-r--r-- 1 root root 2.0G 10月 25 16:25 /var/lib/libvirt/images/vm2-1.raw
将其添加到vm2虚拟机上面
[root@kvm-server ~]# cd /etc/libvirt/qemu/
[root@kvm-server qemu]# vim vm2.xml
[root@kvm-server images]# virsh define /etc/libvirt/qemu/vm2.xml
[root@kvm-server images]# virsh start vm2
[root@kvm-server qemu]# virsh snapshot-create-as vm2 vm2.snap1
错误:不支持的配置:存储类型 vdb 不支持磁盘 raw 的内部快照
#磁盘格式的转换
由于raw的磁盘格式,不支持快照功能,我们需要将其转换为qcow2的格式
[root@kvm-server qemu]# qemu-img convert -O qcow2 /var/lib/libvirt/images/vm2-1.raw /var/lib/libvirt/images/vm2-1.qcow2
[root@kvm-server qemu]# cd /var/lib/libvirt/images/
[root@kvm-server images]# ll -h
总用量 21G
-rw------- 1 root root 5.1G 10月 24 18:59 centos7.0.qcow2
-rw-r--r-- 1 root root 193K 10月 25 16:44 vm2-1.qcow2
-rw-r--r-- 1 root root 2.0G 10月 25 16:25 vm2-1.raw
-rw------- 1 root root 5.1G 10月 25 16:13 vm2.qcow2
[root@kvm-server images]# qemu-img info /var/lib/libvirt/images/vm2-1.qcow2
image: /var/lib/libvirt/images/vm2-1.qcow2
file format: qcow2
virtual size: 2.0G (2147483648 bytes)
disk size: 196K
cluster_size: 65536
Format specific information:
compat: 1.1
lazy refcounts: false
然后去修改vm2虚拟机的磁盘格式和名称
[root@kvm-server images]# vim /etc/libvirt/qemu/vm2.xml
[root@kvm-server images]# virsh define /etc/libvirt/qemu/vm2.xml
创建快照
[root@kvm-server qemu]# virsh snapshot-create-as vm2 vm2.snap2
已生成域快照 vm2.snap2
然后我们开始做快照,图形化方式不再介绍
登录vm2的虚拟机:
[root@vm2 ~]# mkdir /opt/test
[root@kvm-server ~]# virsh snapshot-create-as vm2 vm2-snap3
已生成域快照 vm2-snap3
再次登录vm2的虚拟:
[root@vm2 ~]# rm -rf /opt/test/
[root@kvm-server ~]# virsh shutdown vm2
[root@kvm-server ~]# virsh snapshot-create-as vm2 vm2-snap4
已生成域快照 vm2-snap4
查看快照
[root@kvm-server ~]# virsh snapshot-list vm2
名称 生成时间 状态
------------------------------------------------------------
vm2-snap3 2019-10-30 15:27:15 +0800 running
vm2-snap4 2019-10-30 15:29:37 +0800 shutoff
然后将vm2关闭,恢复到快照vm2.snap3
[root@kvm-server ~]# virsh snapshot-revert vm2 vm2-snap3
[root@kvm-server ~]# virsh start vm2
Domain vm2 started
在vm2虚拟机上查看
[root@vm2 ~]# ls /opt/
test
可以再恢复到vm2.snap4测试一下
删除虚拟机快照操作:
[root@kvm-server ~]# virsh shutdown vm2
[root@kvm-server ~]# virsh snapshot-list vm2
名称 生成时间 状态
------------------------------------------------------------
vm2-snap3 2019-10-30 15:27:15 +0800 running
vm2-snap4 2019-10-30 15:29:37 +0800 shutoff
[root@kvm-server ~]# virsh snapshot-delete --snapshotname vm2-snap3 vm2
已删除域快照 vm2-snap3
[root@kvm-server ~]# virsh snapshot-list vm2
名称 生成时间 状态
------------------------------------------------------------
vm2-snap4 2019-10-30 15:27:15 +0800 running
七、KVM网络配置
四种网络
NAT default方式:支持主机与虚拟机互访,虚拟机访问外界网络,但不支持外界访问虚拟机。
isolated 隔离,vmware--host-only:仅主机模式。外网不能访问虚拟机,虚拟机也不能访问外网
bridge ----桥接模式属于桥接口
路由模式
#查看管理接口对应的网卡
[root@kvm-server ~]# brctl show
bridge name bridge id STP enabled interfaces
virbr0 8000.525400831963 yes virbr0-nic
vnet0
vnet1
注意:这里vnet网卡,是每台启动的虚拟机正在使用的网卡设备,每台虚拟机使用的不同
#从交换机上把vnet网卡删除:
[root@kvm-server ~]# brctl delif virbr0 vnet0
来到vm2的虚拟机,ping不通百度
添加vnet网卡添加到交换机上:
[root@kvm-server ~]# brctl addif virbr0 vnet0
来到vm2的虚拟机,恢复正常
配置文件方式配置桥接:在宿主机上
先将kvm虚拟机关闭
配置文件方式配置桥接:在宿主机上
[root@kvm-server ~]# ip a #先找出宿主机用的哪个网卡设备,我的是enp0s25
[root@kvm-server ~]# cd /etc/sysconfig/network-scripts/
1.定义网卡配置文件
[root@kvm-server network-scripts]# vim ifcfg-br0 #创建该桥接网卡,默认没有此文件需要新建
[root@kvm-server network-scripts]# cat ifcfg-br0
TYPE=Bridge
NAME=br0
DEVICE=br0
ONBOOT="yes"
BOOTPROTO=static
IPADDR=10.0.111.182 #要和宿主机在一个网络,这里我用的是宿主机的ip
GATEWAY=10.0.111.1 #宿主的网关,nat的是.2,桥接是.1
NETMASK=255.255.255.0
DNS1=114.144.144.144
DNS2=8.8.8.8
然后看清楚宿主机正在使用的网卡,修改配置文件,(将物理机网卡桥到桥接网卡)
[root@kvm-server network-scripts]# cp ifcfg-enp0s25 ifcfg-enp0s25.back
[root@kvm-server network-scripts]# vim ifcfg-enp0s25
NAME=enp0s25 #定义网卡设备名称
DEVICE=enp0s25 #宿主机正在使用的网卡设备
ONBOOT=yes
BRIDGE=br0 #和ifcfg-br0文件里面的设备对应,新添加
2.重启libvirtd服务
[root@kvm-server network-scripts]# systemctl restart libvirtd
3.重启network服务
[root@kvm-server network-scripts]# systemctl restart network
删除桥接网卡步骤:
1.删除br0的配置文件
2.修改正常网卡的配置文件
3.重启系统
[root@kvm-server network-scripts]# mv ifcfg-br0 ifcfg-br0.bak
[root@kvm-server network-scripts]# mv ifcfg-enp0s25 ifcfg-enp0s25.bak
[root@kvm-server network-scripts]# mv ifcfg-enp0s25.back ifcfg-enp0s25
[root@kvm-server network-scripts]# systemctl restart libvirtd
[root@kvm-server network-scripts]# systemctl restart network
[root@kvm-server network-scripts]# ping www.baidu.com
PING www.a.shifen.com (39.156.66.14) 56(84) bytes of data.
64 bytes from 39.156.66.14 (39.156.66.14): icmp_seq=1 ttl=52 time=13.3 ms
配置文件方式创建nat网络:
配置文件方式创建nat网络:
[root@kvm-server ~]# cd /etc/libvirt/qemu/networks
[root@kvm-server networks]# ls
autostar default.xml
[root@kvm-server networks]# cp default.xml nat1.xml
[root@kvm-server networks]# vim nat1.xml
重启服务
[root@kvm-server netwoeks]# systemctl restart libvirtd
配置文件方式创建isolated网络隔离网络:这个模式没用过,不再操作
[root@kvm-server networks]# cp default.xml isolated200.xml
[root@kvm-server networks]# vim isolated200.xml
启动:
[root@kvm-server networks]# systemctl restart libvirtd
开机自启动:
[root@kvm-server networks]# virsh net-autostart isolated200
查看所有的网络:
[root@kvm-server networks]# virsh net-list
kvm迁移(了解)
最简单的方法:
拷贝配置文件,磁盘镜像文件
冷迁移:将虚拟机关闭,将虚拟机放到另外一台宿主机上面
热迁移----有一个毛病:迁移过程中会暂停虚拟机
192.168.1.1/24 192.168.1.2/24
++++++++++++ ++++++++++++
+ + + +
+ KVM-A + =======> + KVM-B +
+ + + +
++++++++++++ ++++++++++++
images images
/var/lib/libvirt/images /var/lib/libvirt/images
八、自动化脚本管理kvm
#!/bin/bash
#kvm batch create vm tool
#version:0.1
#author:name
#需要事先准备模板镜像和配置文件模板
echo "1.创建自定义配置单个虚拟机
2.批量创建自定义配置虚拟机
3.批量创建默认配置虚拟机
4.删除虚拟机"
read -p "选取你的操作(1/2/3):" op
batch_self_define() {
kvmname=`openssl rand -hex 5`
sourceimage=/var/lib/libvirt/images/vmmodel.img
sourcexml=/etc/libvirt/qemu/vmmodel.xml
newimg=/var/lib/libvirt/images/${kvmname}.img
newxml=/etc/libvirt/qemu/${kvmname}.xml
cp $sourceimage $newimg
cp $sourcexml $newxml
kvmuuid=`uuidgen`
kvmmem=${1}000000
kvmcpu=$2
kvmimg=$newimg
kvmmac=`openssl rand -hex 3 | sed -r 's/..\B/&:/g'`
sed -i "s@kvmname@$kvmname@;s@kvmuuid@$kvmuuid@;s@kvmmem@$kvmmem@;s@kvmcpu@$kvmcpu@;s@kvmimg@$kvmimg@;s@kvmmac@$kvmmac@" $newxml
virsh define $newxml
virsh list --all
}
self_define() {
read -p "请输入新虚机名称:" newname
read -p "请输入新虚机内存大小(G):" newmem
read -p "请输入新虚机cpu个数:" newcpu
sourceimage=/var/lib/libvirt/images/vmmodel.img
sourcexml=/etc/libvirt/qemu/vmmodel.xml
newimg=/var/lib/libvirt/images/${newname}.img
newxml=/etc/libvirt/qemu/${newname}.xml
cp $sourceimage $newimg
cp $sourcexml $newxml
kvmname=$newname
kvmuuid=`uuidgen`
kvmmem=${newmem}000000
kvmcpu=$newcpu
kvmimg=$newimg
kvmmac=`openssl rand -hex 3 | sed -r 's/..\B/&:/g'`
sed -i "s@kvmname@$kvmname@;s@kvmuuid@$kvmuuid@;s@kvmmem@$kvmmem@;s@kvmcpu@$kvmcpu@;s@kvmimg@$kvmimg@;s@kvmmac@$kvmmac@" $newxml
virsh define $newxml
virsh list --all
}
case $op in
1)self_define;;
2)
read -p "请输入要创建的虚拟机的个数:" num
read -p "请输入新虚机内存大小(G):" newmem
read -p "请输入新虚机cpu个数:" newcpu
for((i=1;i<=$num;i++))
do
batch_self_define $newmem $newcpu
done;;
3)
read -p "请输入要创建的虚拟机的个数:" num
for((i=1;i<=$num;i++))
do
batch_self_define 1 1
done;;
*)echo "输入错误,请重新执行脚本"
exit;;
esac
配置文件模板
# vim /etc/libvirt/qemu/vmmodel.xml
<domain type='kvm'>
<name>kvmname</name>
<uuid>kvmuuid</uuid>
<memory unit='KiB'>kvmmem</memory>
<currentMemory unit='KiB'>kvmmem</currentMemory>
<vcpu placement='static'>kvmcpu</vcpu>
<os>
<type arch='x86_64' machine='pc-i440fx-rhel7.0.0'>hvm</type>
<boot dev='hd'/>
</os>
<features>
<acpi/>
<apic/>
</features>
<cpu mode='custom' match='exact' check='partial'>
<model fallback='allow'>Haswell-noTSX</model>
</cpu>
<clock offset='utc'>
<timer name='rtc' tickpolicy='catchup'/>
<timer name='pit' tickpolicy='delay'/>
<timer name='hpet' present='no'/>
</clock>
<on_poweroff>destroy</on_poweroff>
<on_reboot>restart</on_reboot>
<on_crash>destroy</on_crash>
<pm>
<suspend-to-mem enabled='no'/>
<suspend-to-disk enabled='no'/>
</pm>
<devices>
<emulator>/usr/libexec/qemu-kvm</emulator>
<disk type='file' device='disk'>
<driver name='qemu' type='qcow2'/>
<source file='kvmimg'/>
<target dev='vda' bus='virtio'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
</disk>
<controller type='usb' index='0' model='ich9-ehci1'>
<address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x7'/>
</controller>
<controller type='usb' index='0' model='ich9-uhci1'>
<master startport='0'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0' multifunction='on'/>
</controller>
<controller type='usb' index='0' model='ich9-uhci2'>
<master startport='2'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x1'/>
</controller>
<controller type='usb' index='0' model='ich9-uhci3'>
<master startport='4'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x2'/>
</controller>
<controller type='pci' index='0' model='pci-root'/>
<controller type='virtio-serial' index='0'>
<address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/>
</controller>
<interface type='network'>
<mac address='52:54:00:kvmmac'/>
<source network='default'/>
<model type='virtio'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
</interface>
<serial type='pty'>
<target type='isa-serial' port='0'>
<model name='isa-serial'/>
</target>
</serial>
<console type='pty'>
<target type='serial' port='0'/>
</console>
<channel type='unix'>
<target type='virtio' name='org.qemu.guest_agent.0'/>
<address type='virtio-serial' controller='0' bus='0' port='1'/>
</channel>
<input type='mouse' bus='ps2'/>
<input type='keyboard' bus='ps2'/>
<memballoon model='virtio'>
<address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/>
</memballoon>
</devices>
</domain>
B:字母数字与字母数字分割,非字母数字与非字母数字分割
&:表示原来的内容
随机生成mac地址
其中方式如下:
# echo `openssl rand -hex 1`:`openssl rand -hex 1`:`openssl rand -hex 1`
99:6e:67
# openssl rand -hex 3 | sed -r 's/(..)(..)(..)/\1:\2:\3/g'
94:89:e3
# openssl rand -hex 3 | sed -r 's/..\B/&:/g'
c5:66:90