在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-editguestfish命令来源于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

创建虚拟机:

  1. “File” > “New Virtual Machine”;
  2. 在"Choose how you would like to install the OS"处,选择"Import existing disk image";
  3. 在"Provide the existing storage path"处,选择"Browse…";
  4. 弹出对话框中选择"Browse Local"并加载"/home/cheshi/kvm_workspace/vm1/vm1.qcow2"文件并选择"Choose Volume";
  5. 在"Choose an operating system type and version"处,选择"Linux"和"CentOS 7.0",点击"Forward";
  6. 设置"Memory"和"CPUs",点击"Forward";
  7. 在"Name"处填上虚拟机的名字,在"Network selection"处选择"Bridge kvmbr0",最后点击"Finish"。

使用图形界面管理虚拟机比较直观,这里不再过多介绍。

参考资料

  1. CentOS7.2部署KVM虚拟机
  2. KVM 操作虚拟机常用命令
  3. CentOS 7 下配置KVM
  4. 三种方式在CentOS 7搭建KVM虚拟化平台
  5. 使用 libvirt创建和管理KVM虚拟机
  6. RHEL Guest Image quick start
  7. CentOS 6.9下KVM虚拟机网络Bridge(网桥)方式与NAT方式详解(转)

在CentOS7上运行KVM虚拟机相关推荐

  1. Centos7.4安装kvm虚拟机(使用virt-manager管理)

    2019独角兽企业重金招聘Python工程师标准>>> Centos7.4安装kvm虚拟机(使用virt-manager管理) 之前介绍了使用WebVirtMgr或Openstack ...

  2. vmware 上部署 kvm虚拟机

    vmware 上部署 kvm虚拟机 1.新建虚拟机,并确保打开了cpu里面的支持vm虚拟化的3个选项. 2.mkdir /data 3.qemu-img create -f qcow2 /data/y ...

  3. 在苹果 M1 上运行 Linux 虚拟机变得容易了

    导读 Canonical 使用户可以借助 Multipass(一个免费的虚拟机程序)在苹果 M1 上运行 Linux 虚拟机. 自从苹果推出 M1 芯片以来,人们为在其上运行 Linux 做出了许多努 ...

  4. CentOS7.2部署KVM虚拟机

    学习了关于PostGis.OSM数据以及Mapnik相关内容,接下来将利用假期重点学习PostgreSQL-XL和瓦片服务器集群技术,因此先把环境搭好.计划采用KVM来充分利用家里不太宽裕的" ...

  5. 2018年第13周-虚拟化技术理解(内含Centos7上安装KVM)

    虚拟化技术简介 说道KVM,那必须先提虚拟化技术,我网上查的资料,貌似大家对虚拟化的一些术语没有达成统一的标准,如:仿真.完全虚拟化.超虚拟化.操作系统级虚拟化. 其实我觉得这些术语没有统一,也仅仅是 ...

  6. CentOS7 安装管理KVM虚拟机

    为什么80%的码农都做不了架构师?>>>    系统:CentOS7 64位 [root@e3 ~]# cat /etc/redhat-release CentOS Linux re ...

  7. zabbix 自定义探索规则发现服务器上面的kvm虚拟机和对应的网卡

    安装完zabbix服务器之后 只有两个探索规则模版,挂载点探索和网卡探索 场景描述:想使用zabbix监控kvm虚拟机的网卡的流量情况, 获取虚拟机和网卡对应关系 虚拟机 S-1 virsh domi ...

  8. 使用 k3s 在 Centos7 上运行 K8S

    本文参考: 使用 k3s 在 Fedora IoT 上运行 K8S | Linux 中国 https://mp.weixin.qq.com/s?__biz=MzI1NDQwNDYyMg==&m ...

  9. CentOS7上安装KVM部署虚拟机

    一.虚拟机部署前准备 安装KVM 宿主机 准备一台虚拟机并安装centos系统 配置基本要求:内存2G,处理器2核,硬盘10G,支持虚拟化. 挂载新加硬盘 # fdisk -l # fdisk /de ...

最新文章

  1. 最小公倍数(Least Common Multiple)
  2. mysql server 80_mysql Host 'microsof-80f25e' is not allowed to connect to this MySQL server
  3. 如何去掉Delphi自动生成的~.pas等临时文件
  4. 思科cisco路由器动态路由协议配置方法
  5. tomcat路径配置详解
  6. python set 原理_Python基础教程之dict和set
  7. C++11 static_assert(转载)
  8. AI智能电话机器人源码搭建的原理与功能
  9. 根据WSDL文件生成JAVA代码
  10. xcode打包cordova项目生成ipa
  11. 服务器主板支持什么cpu,怎么看主板支持什么CPU(主板和cpu兼容搭配知识)
  12. 候鸟算法在其他问题中应用时需要修改的代码
  13. Qt和PyQt中的组合键输入捕获处理
  14. 电脑通过热点共享网络,手机连接热点可以访问其他内网
  15. JS CSS 超出字符省略号,获取字符串实际所占长度,显示文字提示tooltip
  16. 日常学习——记使用POI多线程写Excel数据(续)
  17. csp计算机专业,中国计算机学会推出CSP非专业级别认证
  18. 常用元器件使用方法1:DCDC降压芯片SY8303的使用方法
  19. Visual Studio Enterprise 2015简体中文版(企业版)秘钥
  20. 指南|研控MCC系列运动控制卡测试软件(YK-Motion )使用手册

热门文章

  1. 【微信小游戏】游戏性能检测
  2. 我的2017年文章汇总——机器学习篇
  3. mysql 利用information_schema库COLUMNS表查看哪些表含有指定字段
  4. python numpy 行 列个数_Python 用 numpy 随机抽样选择矩阵的多行或多列
  5. SRC赏金平台汇总介绍
  6. C语言--棋盘麦粒问题
  7. 关于拖延症的一些小思考
  8. 绘制六芒星战斗力属性图 —— h5 canvas 初体验
  9. 多官能度可聚会型光引发剂(图文说明)
  10. 创业服务资源获取的途径有哪些?