版权声明:本文为博主原创文章,转载请注明出处,谢谢合作! https://blog.csdn.net/sch0120/article/details/83508879
在CentOS7上运行KVM虚拟机
准备工作
检查CPU特性
CPU应该支持vmx
特性以更好地运行KVM虚拟机:lscpu | grep vmx
安装必要的软件包
sudo yum install -y epel-release net-tools vim unzip zip wget ftp
安装KVM及其依赖
sudo yum install -y qemu-kvm libvirt virt-install bridge-utils
验证安装结果
$ lsmod | grep ^kvm
kvm_intel 174250 0
kvm 570658 1 kvm_intel
启动服务并设置为开机自动运行
systemctl start libvirtd
systemctl enable libvirtd
检查服务状态:
systemctl status libvirtd
systemctl is-enabled libvirtd
创建网络环境
创建网桥kvmbr0
:
[cheshi@cheshi-desktop1 ~]$ sudo su -
[root@cheshi-desktop1 ~]# cd /etc/sysconfig/network-scripts/
[root@cheshi-desktop1 network-scripts]# vi ifcfg-kvmbr0
......
[root@cheshi-desktop1 network-scripts]# cat ifcfg-kvmbr0
DEVICE=kvmbr0
NAME=kvmbr0
ONBOOT=yes
TYPE=Bridge
BOOTPROTO=dhcp
NM_CONTROLLED=no
DELAY=0
修改当前网卡配置,更新如下几行为:
BOOTPROTO=none
BRIDGE=kvmbr0
NM_CONTROLLED=no
重启网络:
[root@cheshi-desktop1 network-scripts]# service network restart
Restarting network (via systemctl): [ OK ]
检查网络设置:
[root@cheshi-desktop1 network-scripts]# ifconfig kvmbr0
kvmbr0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 10.66.15.173 netmask 255.255.254.0 broadcast 10.66.15.255
inet6 fe80::4ecc:6aff:fec5:ad0d prefixlen 64 scopeid 0x20<link>
ether 4c:cc:6a:c5:ad:0d txqueuelen 1000 (Ethernet)
RX packets 1613 bytes 118768 (115.9 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 74 bytes 10467 (10.2 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
[root@cheshi-desktop1 network-scripts]# ifconfig eno1
eno1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet6 fe80::4ecc:6aff:fec5:ad0d prefixlen 64 scopeid 0x20<link>
ether 4c:cc:6a:c5:ad:0d txqueuelen 1000 (Ethernet)
RX packets 50352153 bytes 7052127783 (6.5 GiB)
RX errors 0 dropped 111 overruns 0 frame 0
TX packets 2944305 bytes 2436350686 (2.2 GiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
device interrupt 16 memory 0xdf000000-df020000
使用KVM虚拟机
方案一:使用KVM创建一台不带操作系统的虚拟机,然后使用安装镜像或网络服务为其安装操作系统;
方案二:直接下载操作系统的“guest image”并由其直接运行虚拟机。
第二种方法可以省去操作系统的安装过程,因此效率比较高,也比较省事,这里着重介绍这种方法。
下载操作系统的guest image
在CentOS官方的下载页面中,找到供Cloud使用的镜像文件,使用wget等命令将其下载到物理机中。
wget http://cloud.centos.org/centos/7/images/CentOS-7-x86_64-GenericCloud.qcow2.xz
准备磁盘镜像
准备虚拟机的系统盘:
[cheshi@cheshi-desktop1 kvm_workspace]$ mkdir vm1
[cheshi@cheshi-desktop1 kvm_workspace]$ cd vm1
[cheshi@cheshi-desktop1 vm1]$ cp ../CentOS-7-x86_64-GenericCloud.qcow2.xz .
[cheshi@cheshi-desktop1 vm1]$ xz -d CentOS-7-x86_64-GenericCloud.qcow2.xz
[cheshi@cheshi-desktop1 vm1]$ mv CentOS-7-x86_64-GenericCloud.qcow2 vm1.qcow2
接下来需要对镜像做一些修改,步骤中用到的virt-edit
和guestfish
命令来源于libguestfs
项目,如果找不到这两个工具,可以通过命令sudo yum install libguestfs*
来安装。
出于安全原因,我们无法登录root
用户,因此我们需要清空镜像中的root
密码:
sudo virt-edit -a ./vm1.qcow2 /etc/shadow -e 's/^root:[^:]*:/root::/'
在没有配置cloud-init
的情况下,这个服务将耗费将近5分钟的启动时间,因此最好把它禁用掉:
sudo guestfish -a ./vm1.qcow2 -i rm '/etc/systemd/system/multi-user.target.wants/cloud-config.service'
sudo guestfish -a ./vm1.qcow2 -i rm '/etc/systemd/system/multi-user.target.wants/cloud-final.service'
sudo guestfish -a ./vm1.qcow2 -i rm '/etc/systemd/system/multi-user.target.wants/cloud-init-local.service'
sudo guestfish -a ./vm1.qcow2 -i rm '/etc/systemd/system/multi-user.target.wants/cloud-init.service'
创建和管理虚拟机
创建一个xml
文件,并更改其信息为:
[cheshi@cheshi-desktop1 vm1]$ vi vm1.xml
[cheshi@cheshi-desktop1 vm1]$ cat vm1.xml
<domain type='kvm'>
<name>vm1</name>
<memory unit='KiB'>1048576</memory>
<vcpu placement='static'>2</vcpu>
<os>
<type arch='x86_64' machine='pc-i440fx-rhel7.0.0'>hvm</type>
<boot dev='hd'/>
</os>
<features>
<acpi/>
<apic/>
</features>
<on_poweroff>destroy</on_poweroff>
<on_reboot>restart</on_reboot>
<on_crash>restart</on_crash>
<devices>
<emulator>/usr/libexec/qemu-kvm</emulator>
<disk type='file' device='disk'>
<driver name='qemu' type='qcow2'/>
<source file='/home/cheshi/kvm_workspace/vm1/vm1.qcow2'/>
<target dev='vda' bus='virtio'/>
</disk>
<interface type='bridge'>
<mac address='52:54:00:da:ac:e5'/>
<source bridge='kvmbr0'/>
<model type='virtio'/>
</interface>
<console type='pty'>
<target type='serial' port='0'/>
</console>
</devices>
</domain>
创建一台虚拟机:
[cheshi@cheshi-desktop1 vm1]$ sudo virsh define ./vm1.xml
Domain vm1 defined from ./vm1.xml
启动虚拟机:
[cheshi@cheshi-desktop1 vm1]$ sudo virsh start vm1
Domain vm1 started
连接虚拟机console(使用Ctrl+]
退出):
[cheshi@cheshi-desktop1 vm1]$ sudo virsh console vm1
Connected to domain vm1
Escape character is ^]
CentOS Linux 7 (Core)
Kernel 3.10.0-862.14.4.el7.x86_64 on an x86_64
dhcp-15-92 login: root
Last login: Mon Oct 29 07:16:27 on ttyS0
[root@dhcp-15-92 ~]# ping 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=34 time=46.5 ms
--- 8.8.8.8 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 46.574/46.574/46.574/0.000 ms
[root@dhcp-15-92 ~]# exit
logout
CentOS Linux 7 (Core)
Kernel 3.10.0-862.14.4.el7.x86_64 on an x86_64
dhcp-15-92 login:
关闭虚拟机:
[cheshi@cheshi-desktop1 vm1]$ sudo virsh shutdown vm1
Domain vm1 is being shutdown
查看虚拟机状态:
[cheshi@cheshi-desktop1 vm1]$ sudo virsh list --all
Id Name State
----------------------------------------------------
- centos-minion1 shut off
- vm1 shut off
销毁虚拟机:
[cheshi@cheshi-desktop1 vm1]$ sudo virsh undefine vm1
Domain vm1 has been undefined
[cheshi@cheshi-desktop1 vm1]$ sudo virsh list --all
Id Name State
----------------------------------------------------
- centos-minion1 shut off
[cheshi@cheshi-desktop1 vm1]$
virsh命令参考:
命令 | 说明 |
---|---|
autostart | 自动开始一个域 |
create | 从一个 XML 文件创建一个域 |
define | 从一个 XML 文件定义(但不开始)一个域 |
edit | 编辑某个域的 XML 配置 |
shutdown | 关闭一个域 |
start | 开始一个(以前定义的)非活跃的域 |
reboot | 重新启动一个域 |
suspend | 挂起一个域 |
resume | 重新恢复一个域 |
vncdisplay | vnc 显示 |
undefine | 删除虚拟机,只是删除VM的配置文件,并不删除虚拟磁盘文件 |
console | 连接虚拟机控制台 |
使用图形界面管理虚拟机
运行virt-manager:
sudo virt-manager
创建虚拟机:
- “File” > “New Virtual Machine”;
- 在"Choose how you would like to install the OS"处,选择"Import existing disk image";
- 在"Provide the existing storage path"处,选择"Browse…";
- 弹出对话框中选择"Browse Local"并加载"/home/cheshi/kvm_workspace/vm1/vm1.qcow2"文件并选择"Choose Volume";
- 在"Choose an operating system type and version"处,选择"Linux"和"CentOS 7.0",点击"Forward";
- 设置"Memory"和"CPUs",点击"Forward";
- 在"Name"处填上虚拟机的名字,在"Network selection"处选择"Bridge kvmbr0",最后点击"Finish"。
使用图形界面管理虚拟机比较直观,这里不再过多介绍。