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 定义终端额外的参数

开始安装后,正常的情况下会进入到这样一个界面:
CentOS7上安装并配置KVM,以及通过KVM安装CentOS系统

这是让你配置语言、时区、安装源、网络、密码等信息,就和我们在VMware里安装CentOS虚拟机是一样的,只不过这个是命令行形式,而VMware里是图形界面罢了。

首先设置语言,按数字1,回车进入以下界面:
CentOS7上安装并配置KVM,以及通过KVM安装CentOS系统

例如我要选Chinese就按数字68并回车即可,回车之后会让你选择是中文简体还是繁体,也是按下相应的数字并回车即可:
CentOS7上安装并配置KVM,以及通过KVM安装CentOS系统

配置完成之后又会再次回到配置界面,这次我们来设置时区:
CentOS7上安装并配置KVM,以及通过KVM安装CentOS系统

CentOS7上安装并配置KVM,以及通过KVM安装CentOS系统

CentOS7上安装并配置KVM,以及通过KVM安装CentOS系统

设置系统安装盘:
CentOS7上安装并配置KVM,以及通过KVM安装CentOS系统

CentOS7上安装并配置KVM,以及通过KVM安装CentOS系统

CentOS7上安装并配置KVM,以及通过KVM安装CentOS系统

CentOS7上安装并配置KVM,以及通过KVM安装CentOS系统

CentOS7上安装并配置KVM,以及通过KVM安装CentOS系统

设置root用户的密码:
CentOS7上安装并配置KVM,以及通过KVM安装CentOS系统

最后开始安装系统:
CentOS7上安装并配置KVM,以及通过KVM安装CentOS系统

安装完成之后就会停止在以下这个界面,按一下回车即可,这时就会重启安装完的系统:
CentOS7上安装并配置KVM,以及通过KVM安装CentOS系统


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.xml
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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章