在CentOS7上运行KVM虚拟机
在CentOS7上运行KVM虚拟机
- 准备工作
- 检查CPU特性
- 安装一些基础软件包(非必须)
- 安装KVM及相关工具
- 验证安装结果
- 启动服务并设置为开机自动运行
- 创建网络环境
- 使用KVM虚拟机
- 下载操作系统的guest image
- 准备磁盘镜像
- 创建和管理虚拟机
- 使用图形界面管理虚拟机
- 参考资料
准备工作
检查CPU特性
CPU应该支持vmx
特性以更好地运行KVM虚拟机:lscpu | grep vmx
安装一些基础软件包(非必须)
sudo yum install -y epel-release net-tools vim unzip zip wget ftp bridge-utils
安装KVM及相关工具
sudo yum install -y qemu-kvm libvirt
sudo yum install -y libguestfs-tools libguestfs-tools libguestfs-tools-c
验证安装结果
$ 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
创建网络环境
注意: 如果这时系统里已经有了virbr0
这个网桥,则可以跳过本章节,后面直接使用virbr0
网桥即可。
创建default
网络和virbr0
网桥:
sudo virsh net-define /usr/share/libvirt/networks/default.xml
sudo virsh net-start default
sudo virsh net-autostart default
sudo virsh net-list
检查网络设置:
[root@cheshi-desktop1 ~]# sudo virsh net-listName State Autostart Persistent
--------------------------------------------default active yes yes[root@cheshi-desktop1 ~]# ifconfig virbr0
virbr0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500inet 10.66.15.173 netmask 255.255.254.0 broadcast 10.66.15.255inet6 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 0TX packets 74 bytes 10467 (10.2 KiB)TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0[root@cheshi-desktop1 ~]# ifconfig eno1
eno1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500inet6 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 0TX packets 2944305 bytes 2436350686 (2.2 GiB)TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0device 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 kvm_workspace]$ xz -d CentOS-7-x86_64-GenericCloud.qcow2.xz
[cheshi@cheshi-desktop1 kvm_workspace]$ cp CentOS-7-x86_64-GenericCloud.qcow2 /var/lib/libvirt/images/vm1.qcow2
[cheshi@cheshi-desktop1 kvm_workspace]$ cd /var/lib/libvirt/images/
接下来需要对镜像做一些修改,步骤中用到的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'
备注:
- 在一些打包有较新版本cloud-init工具的镜像中,
cloud-*.service
可能位于'/etc/systemd/system/cloud-init.target.wants/
路径下,因此上述命令可能需要一些修改。- 此外,本节中对镜像的修改也可通过脚本来完成,使用时如遇权限不足的问题请将
qcow2
镜像放置于/tmp
目录下进行修改。
创建和管理虚拟机
回到之前的路径下,创建一个xml
文件,并更改其信息为:
[cheshi@cheshi-desktop1 kvm_workspace]$ cat vm1.xml
<domain type='kvm' id='1'><name>vm1</name><memory unit='KiB'>2097152</memory><currentMemory unit='KiB'>2097152</currentMemory><vcpu placement='static'>4</vcpu><os><type arch='x86_64' machine='pc-i440fx-2.7'>hvm</type></os><features><acpi/><apic/></features><cpu mode='custom' match='exact'><model fallback='allow'>Skylake-Client</model></cpu><on_poweroff>destroy</on_poweroff><on_reboot>restart</on_reboot><on_crash>destroy</on_crash><devices><emulator>/usr/libexec/qemu-kvm</emulator><disk type='file' device='disk'><driver name='qemu' type='qcow2'/><source file='/var/lib/libvirt/images/vm1.qcow2'/><target dev='vda' bus='virtio'/></disk><interface type='network'><source network='default' bridge='kvmbr0'/><target dev='vnet0'/><model type='virtio'/></interface><console type='pty' tty='/dev/pts/5'><source path='/dev/pts/5'/><target type='serial' port='0'/><alias name='serial0'/></console></devices>
</domain>
备注:必要时可使用
whereis qemu-kvm
确定执行文件所在位置。
创建一台虚拟机:
[cheshi@cheshi-desktop1 kvm_workspace]$ sudo virsh define ./vm1.xml
Domain vm1 defined from ./vm1.xml
启动虚拟机:
[cheshi@cheshi-desktop1 kvm_workspace]$ sudo virsh start vm1
Domain vm1 started
连接虚拟机console(使用Ctrl+]
退出):
[cheshi@cheshi-desktop1 kvm_workspace]$ 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_64dhcp-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
logoutCentOS Linux 7 (Core)
Kernel 3.10.0-862.14.4.el7.x86_64 on an x86_64dhcp-15-92 login:
关闭虚拟机:
[cheshi@cheshi-desktop1 kvm_workspace]$ sudo virsh shutdown vm1
Domain vm1 is being shutdown
查看虚拟机状态:
[cheshi@cheshi-desktop1 kvm_workspace]$ sudo virsh list --allId Name State
----------------------------------------------------- centos-minion1 shut off- vm1 shut off
销毁虚拟机:
[cheshi@cheshi-desktop1 kvm_workspace]$ sudo virsh undefine vm1
Domain vm1 has been undefined
[cheshi@cheshi-desktop1 kvm_workspace]$ sudo virsh list --allId Name State
----------------------------------------------------- centos-minion1 shut off[cheshi@cheshi-desktop1 kvm_workspace]$
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"。
使用图形界面管理虚拟机比较直观,这里不再过多介绍。
参考资料
- CentOS7.2部署KVM虚拟机
- KVM 操作虚拟机常用命令
- CentOS 7 下配置KVM
- 三种方式在CentOS 7搭建KVM虚拟化平台
- 使用 libvirt创建和管理KVM虚拟机
- RHEL Guest Image quick start
- CentOS 6.9下KVM虚拟机网络Bridge(网桥)方式与NAT方式详解(转)
在CentOS7上运行KVM虚拟机相关推荐
- Centos7.4安装kvm虚拟机(使用virt-manager管理)
2019独角兽企业重金招聘Python工程师标准>>> Centos7.4安装kvm虚拟机(使用virt-manager管理) 之前介绍了使用WebVirtMgr或Openstack ...
- vmware 上部署 kvm虚拟机
vmware 上部署 kvm虚拟机 1.新建虚拟机,并确保打开了cpu里面的支持vm虚拟化的3个选项. 2.mkdir /data 3.qemu-img create -f qcow2 /data/y ...
- 在苹果 M1 上运行 Linux 虚拟机变得容易了
导读 Canonical 使用户可以借助 Multipass(一个免费的虚拟机程序)在苹果 M1 上运行 Linux 虚拟机. 自从苹果推出 M1 芯片以来,人们为在其上运行 Linux 做出了许多努 ...
- CentOS7.2部署KVM虚拟机
学习了关于PostGis.OSM数据以及Mapnik相关内容,接下来将利用假期重点学习PostgreSQL-XL和瓦片服务器集群技术,因此先把环境搭好.计划采用KVM来充分利用家里不太宽裕的" ...
- 2018年第13周-虚拟化技术理解(内含Centos7上安装KVM)
虚拟化技术简介 说道KVM,那必须先提虚拟化技术,我网上查的资料,貌似大家对虚拟化的一些术语没有达成统一的标准,如:仿真.完全虚拟化.超虚拟化.操作系统级虚拟化. 其实我觉得这些术语没有统一,也仅仅是 ...
- CentOS7 安装管理KVM虚拟机
为什么80%的码农都做不了架构师?>>> 系统:CentOS7 64位 [root@e3 ~]# cat /etc/redhat-release CentOS Linux re ...
- zabbix 自定义探索规则发现服务器上面的kvm虚拟机和对应的网卡
安装完zabbix服务器之后 只有两个探索规则模版,挂载点探索和网卡探索 场景描述:想使用zabbix监控kvm虚拟机的网卡的流量情况, 获取虚拟机和网卡对应关系 虚拟机 S-1 virsh domi ...
- 使用 k3s 在 Centos7 上运行 K8S
本文参考: 使用 k3s 在 Fedora IoT 上运行 K8S | Linux 中国 https://mp.weixin.qq.com/s?__biz=MzI1NDQwNDYyMg==&m ...
- CentOS7上安装KVM部署虚拟机
一.虚拟机部署前准备 安装KVM 宿主机 准备一台虚拟机并安装centos系统 配置基本要求:内存2G,处理器2核,硬盘10G,支持虚拟化. 挂载新加硬盘 # fdisk -l # fdisk /de ...
最新文章
- 最小公倍数(Least Common Multiple)
- mysql server 80_mysql Host 'microsof-80f25e' is not allowed to connect to this MySQL server
- 如何去掉Delphi自动生成的~.pas等临时文件
- 思科cisco路由器动态路由协议配置方法
- tomcat路径配置详解
- python set 原理_Python基础教程之dict和set
- C++11 static_assert(转载)
- AI智能电话机器人源码搭建的原理与功能
- 根据WSDL文件生成JAVA代码
- xcode打包cordova项目生成ipa
- 服务器主板支持什么cpu,怎么看主板支持什么CPU(主板和cpu兼容搭配知识)
- 候鸟算法在其他问题中应用时需要修改的代码
- Qt和PyQt中的组合键输入捕获处理
- 电脑通过热点共享网络,手机连接热点可以访问其他内网
- JS CSS 超出字符省略号,获取字符串实际所占长度,显示文字提示tooltip
- 日常学习——记使用POI多线程写Excel数据(续)
- csp计算机专业,中国计算机学会推出CSP非专业级别认证
- 常用元器件使用方法1:DCDC降压芯片SY8303的使用方法
- Visual Studio Enterprise 2015简体中文版(企业版)秘钥
- 指南|研控MCC系列运动控制卡测试软件(YK-Motion )使用手册