centos7使用kvm创建虚拟机
1. 查看系统版本
[root@promote libvirt]# cat /etc/centos-release
CentOS Linux release 7.5.1804 (Core)
2.首先验证CPU是否支持虚拟化,输入有vmx或svm就支持,支持虚拟化则就支持KVM
[root@promote libvirt]# cat /proc/cpuinfo | egrep 'vmx|svm'
3. 查看是否加载KVM
[root@promote images]# lsmod | grep kvm
kvm_intel 183720 15
kvm 578558 1 kvm_intel
irqbypass 13503 3 kvm
这表明已经加载,如果没有加载则执行以下命令加载KVM
[root@promote images]#modprobe kvm
4. 关闭selinux和iptables
[root@promote images]# setenforce 0
setenforce: SELinux is disabled
[root@promote images]# vim /etc/sysconfig/selinux
SELINUX=disabled
[root@promote images]# systemctl stop firewalld
5.安装libvirt,kvm软件包
[root@promote images]# yum install qemu-kvm qemu-img \
virt-manager libvirt libvirt-python virt-manager \
libvirt-client virt-install virt-viewer bridge-utils -y
qemu-kvm: KVM模块
libvirt: 虚拟管理模块
virt-manager: 图形界面管理虚拟机
virt-install: 虚拟机命令行安装工具
6.虚拟机安装
在这里你可以选择图形化界面安装,也可以选择命令行方式去安装。在这里介绍一下命令行的安装形式,图形化安装请参考这篇文章,本文前半部分准备工作也主要参考这篇文章。
1)配置网卡
安装完KVM之后,需要配置一下网卡,增加一个桥接网卡:
[root@localhost ~]# cd /etc/sysconfig/network-scripts/
[root@localhost /etc/sysconfig/network-scripts]# cp ifcfg-eno16777728 ifcfg-br0 # 拷贝当前的网卡文件
[root@localhost /etc/sysconfig/network-scripts]# vim ifcfg-eno16777728 # 修改文件内容如下
TYPE=Ethernet
BOOTPROTO=dhcp
DEFROUTE=yes
PEERDNS=yes
PEERROUTES=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes
IPV6_FAILURE_FATAL=no
NAME=eno16777728
DEVICE=eno16777728
ONBOOT=yes
BRIDGE=br0
[root@localhost /etc/sysconfig/network-scripts]# vim ifcfg-br0 # 修改文件内容如下
TYPE=Bridge
BOOTPROTO=dhcp
DEFROUTE=yes
PEERDNS=yes
PEERROUTES=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes
IPV6_FAILURE_FATAL=no
NAME=br0
DEVICE=br0
ONBOOT=yes
[root@localhost /etc/sysconfig/network-scripts]# systemctl restart network # 重启服务
重启完服务后,执行ifconfig命令可以看到此时eno16777728网卡的IP到br0网卡上了,这样我们的网卡就配置完成了:
[root@localhost /etc/sysconfig/network-scripts]# ifconfig
br0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.77.130 netmask 255.255.255.0 broadcast 192.168.77.255
inet6 fe80::20c:29ff:fef1:912c prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:f1:91:2c txqueuelen 0 (Ethernet)
RX packets 51 bytes 8341 (8.1 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 27 bytes 2710 (2.6 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
eno16777728: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
ether 00:0c:29:f1:91:2c txqueuelen 1000 (Ethernet)
RX packets 147615 bytes 168580073 (160.7 MiB)
RX errors 0 dropped 8 overruns 0 frame 0
TX packets 45008 bytes 3866579 (3.6 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 0 (Local Loopback)
RX packets 2459 bytes 1125227 (1.0 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 2459 bytes 1125227 (1.0 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
接下来我们就可以启动KVM的服务了:
[root@localhost ~]# systemctl start libvirtd # 启动libvirtd服务
[root@localhost ~]# ps aux |grep libvirtd # 检查服务进程
root 5744 2.2 0.1 614840 14120 ? Ssl 23:02 0:00 /usr/sbin/libvirtd
root 5872 0.0 0.0 112664 964 pts/1 R+ 23:02 0:00 grep --color=auto libvirtd
[root@localhost ~]# brctl show # 可以看到两个网卡
bridge name bridge id STP enabled interfaces
br0 8000.000c29f1912c no eno16777728 # 我们配置的桥接网卡
virbr0 8000.525400240b50 yes virbr0-nic # NAT模式的网卡
2)创建卷
qemu-img create -f qcow2 yunxiang.qcow2 10G
这样就创建了一个10G的动态扩展的qcow2格式的磁盘(这里的10G只是磁盘的最大值,没有被写入数据前只有不到200k大小)
查看卷信息可以用下面的命令,disk size才是其实际占用的宿主机磁盘大小
[root@promote images]# qemu-img info yunxiang.qcow2
image: yunxiang.qcow2
file format: qcow2
virtual size: 10G (10737418240 bytes)
disk size: 1.8G
cluster_size: 65536
Format specific information:
compat: 1.1
lazy refcounts: false
3)创建虚拟机
将服务成功启动后,我们就可以使用KVM安装虚拟机了,首先需要准备一个操作系统的镜像文件,我这里用的是CentOS7的镜像文件:
[root@promote iso]# ls
CentOS-7-x86_64-Minimal-1804.iso
到这里,我们安装虚拟机的形式也有两种,分别是命令配置以及xml文件
a)命令行安装虚拟机
使用命令行安装这个CentOS7镜像文件:
[root@localhost ~]# virt-install --name yunxiang --ram=512 --vcpus=2 --location=/home/iso/CentOS-7-x86_64-Minimal-1804.iso --disk path=/home/images/yunxiang.qcow2,size=10 --network bridge=br0 --graphics=none --console=pty,target_type=serial --extra-args="console=tty0 console=ttyS0"
命令说明:
--name 指定虚拟机的名称
--memory 指定分配给虚拟机的内存资源大小
maxmemory 指定可调节的最大内存资源大小,因为KVM支持热调整虚拟机的资源
--vcpus 指定分配给虚拟机的CPU核心数量
maxvcpus 指定可调节的最大CPU核心数量
--os-type 指定虚拟机安装的操作系统类型
--os-variant 指定系统的发行版本
--location 指定ISO镜像文件所在的路径,支持使用网络资源路径,也就是说可以使用URL
--disk path 指定虚拟硬盘所存放的路径及名称,size 则是指定该硬盘的可用大小,单位是G
--bridge 指定使用哪一个桥接网卡,也就是说使用桥接的网络模式
--graphics 指定是否开启图形
--console 定义终端的属性,target_type 则是定义终端的类型
--extra-args 定义终端额外的参数
开始安装后,正常的情况下会进入到这样一个界面:
这是让你配置语言、时区、安装源、网络、密码等信息,就和我们在VMware里安装CentOS虚拟机是一样的,只不过这个是命令行形式,而VMware里是图形界面罢了。
首先设置语言,按数字1,回车进入以下界面:
例如我要选Chinese就按数字68并回车即可,回车之后会让你选择是中文简体还是繁体,也是按下相应的数字并回车即可:
配置完成之后又会再次回到配置界面,这次我们来设置时区:
设置系统安装盘:
设置root用户的密码:
最后开始安装系统:
安装完成之后就会停止在以下这个界面,按一下回车即可,这时就会重启安装完的系统:
b)使用xml安装
xml文件内容
下面是我平时使用的的xml文件
<domain type="kvm">
<name>centos</name> //虚拟机名称
<memory unit="MiB">1024</memory> //虚拟机最大内存上线
<currentMemory unit="MiB">1024</currentMemory> //虚拟机当前内存
<vcpu>2</vcpu> //cpu数量
<os>
<type arch="x86_64" machine="pc">hvm</type>
<boot dev="hd" />
<boot dev="cdrom" />
</os>
<features>
<acpi />
<apic />
<pae />
</features>
<clock offset="localtime" />
<on_poweroff>destroy</on_poweroff>
<on_reboot>restart</on_reboot>
<on_crash>destroy</on_crash>
<devices>
<emulator>/usr/libexec/qemu-kvm</emulator> //这个位置一般不动,,这是你的kvm安装位置
<disk type="file" device="disk">
<driver name="qemu" type="qcow2"/>
<source file="/home/images/centos.qcow2" /> //qcow2镜像盘位置
<target dev='sda' bus='virtio'/>
<alias name='virtio-disk0'/>
</disk>
<disk type="file" device="cdrom">
<source file="/home/iso/CentOS-7-x86_64-Minimal-1804.iso" />
//iso文件
<target dev='hda' bus='ide'/>
</disk>
<interface type="bridge">
<source bridge="br0"/>
</interface>
<input type="mouse" bus="ps2" />
<graphics type="vnc" port="-1" autoport="yes" listen="0.0.0.0" keymap="en-us" />
<serial type='pty'>
<target port='0'/>
</serial>
<console type='pty'>
<target type='serial' port='0'/>
</console>
</devices>
</domain>
如果你是启动一个已经安装好系统的qcow2镜像的话,只需要下面这段关于把iso的disk定义删除即可。
<disk type="file" device="cdrom">
<source file="/home/iso/CentOS-7-x86_64-Minimal-1804.iso" />
//iso文件
<target dev='hda' bus='ide'/>
</disk>
如果你是需要intel的cpu,那么就在后面加入cpu model
<cpu mode='host-model'>
<model fallback='forbid'/>
</cpu>
如果你想要选择网卡的驱动为virtio 或者rtl8139,可以通过在配置项中加入如下语句(下面为设置为virtio)
<model type='virtio'/>
安装步骤
首先定义虚拟机xml模板,然后启动虚拟机就可以
[root@promote images]# virsh define centos.xml
[root@promote images]# virsh start centos
start后面的参数,是之前用xml定义的虚拟机的name标签指定的,也可以在define虚拟机后,使用命令virsh list --alll
使用virsh undefine [虚拟主机名]来取消虚拟机的定义
vnc查看虚拟机
查询虚拟机所使用的vnc端口
[root@promote images]#virsh vncdisplay centos
这里就可以使用自己windows的pc上的vnc去连接被创建的虚拟机。
以下介绍一下管理虚拟机的一些常用命令:
[root@localhost ~]# virsh console study01 # 进入指定的虚拟机,进入的时候还需要按一下回车
[root@localhost ~]# virsh start study01 # 启动虚拟机
[root@localhost ~]# virsh shutdown study01 # 关闭虚拟机
[root@localhost ~]# virsh destroy study01 # 强制停止虚拟机
[root@localhost ~]# virsh undefine study01 # 彻底销毁虚拟机,会删除虚拟机配置文件,但不会删除虚拟磁盘
[root@localhost ~]# virsh autostart study01 # 设置宿主机开机时该虚拟机也开机
[root@localhost ~]# virsh autostart --disable study01 # 解除开机启动
[root@localhost ~]# virsh suspend study01 # 挂起虚拟机
[root@localhost ~]# virsh resume study01 # 恢复挂起的虚拟机
参考
https://blog.csdn.net/qq_39452428/article/details/80781403
http://blog.51cto.com/zero01/2083896
https://my.oschina.net/hgfdoing/blog/514637
http://blog.51cto.com/zhongle21/2096413