目录
一、KVM概述
1.1 KVM是什么
1.2 KVM和QEMU的关系
1.3 kvm相关安装包及其作用
二、安装KVM
三、命令行创建虚拟机并安装CentOS7
四、报错处理
4.1 问题1
4.2 问题2
一、KVM概述
1.1 KVM是什么
KVM(Kernel-based Virtual Machine, 即内核级虚拟机) 是一个开源的系统虚拟化模块。它使用Linux自身的调度器进行管理,所以相对于Xen,其核心源码很少。目前KVM已成为学术界的主流VMM之一,它包含一个为处理器提供底层虚拟化可加载的核心模块kvm.ko(kvm-intel.ko 或 kvm-amd.ko)。
kvm还需要一个经过修改的QEMU 软件(qemu-kvm),作为虚拟机上层控制和界面。KVM的虚拟化需要硬件支持(如 Intel VT技术或者AMD V技术)。是基于硬件的完全虚拟化。 KVM可以运行多个其本身运行未改动的镜像的虚拟机,例如Windows,Mac OS X ,每个虚拟机都有各自的虚拟硬件,比如网卡、硬盘核图形适配器等。
1.2 KVM和QEMU的关系
QEMU是个独立的虚拟化解决方案,从这个角度它并不依赖KVM。而KVM是另一套虚拟化解决方案,不过因为这个方案实际上只实现了内核中对处理器(Intel VT, AMD SVM)虚拟化特性的支持,换言之它缺乏设备虚拟化以及相应的用户空间管理虚拟机的工具,所以它借用了QEMU的代码并加以精简,连同KVM一起构成了另一个独立的虚拟化解决方案:KVM+QEMU。
1.3 kvm相关安装包及其作用
安装包说明:
KVM安装包 | 含义 |
qemu-kvm | 主要KVM程序包 |
virt-manager | GUI虚拟机管理工具 |
libvirt | C语言工具包,提供libvirt服务 |
libvirt-client | 虚拟客户机提供的C语言工具包 |
virt-install | 基于libvirt服务的虚拟机创建命令 |
qemu-kvm-tools | KVM调试工具 |
qemu-img | 安装qemu组件,使用qemu命令来创建磁盘,启动虚拟机 |
bridge-utils | 创建和管理桥接设备的工具 |
python-virtinst | 创建虚拟机所需要的命令行工具和程序库 |
二、安装KVM
测试服务器
系统版本 | IP地址 | 最低资源配置 |
CentOS7.6 | 192.168.2.126 | CPU:8核 |
虚拟化软件:WMware ESXi、KVM | 7.0版本 |
- 宿主操作系统(在哪个操作系统上操作):CentOS 7.6
- 虚拟化软件:VMWare ESXI7.0、KVM
- 待安装操作系统(等下虚拟机建好后需要安装的操作系统):CentOS 7.6
基础环境设置
# 关闭防火墙和selinux
systemctl stop firewalld
systemctl disable firewalld
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
setenforce 0
# 安装基本工具包。
yum -y install vim wget net-tools unzip zip gcc gcc-c++ epel-release
检测机器的CPU是否支持KVM。若显示结果由vmx(Intel)或svm(AMD)字样,就说明支持。
准备镜像文件
安装KVM所需组件
yum -y install qemu-kvm qemu-kvm-tools virt-install qemu-img bridge-utils libvirt virt-manager
安装包说明:
KVM安装包 | 含义 |
qemu-kvm | 主要KVM程序包 |
virt-manager | GUI虚拟机管理工具 |
libvirt | C语言工具包,提供libvirt服务 |
qemu-kvm-tools | KVM调试工具 |
qemu-img | 安装qemu组件,使用qemu命令来创建磁盘,启动虚拟机 |
bridge-utils | 创建和管理桥接设备的工具 |
配置虚拟网卡
cat > /etc/sysconfig/network-scripts/ifcfg-br0 << EOF
TYPE="Bridge"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="static"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="br0"
UUID="4eaf3908-3128-4e53-84a8-fd13984e4525"
DEVICE="br0"
ONBOOT="yes"
IPADDR="192.168.2.126"
GATEWAY="192.168.2.254"
EOF
cat > /etc/sysconfig/network-scripts/ifcfg-ens192 << EOF
TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="static"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="ens192"
UUID="4eaf3908-3128-4e53-84a8-fd13984e4525"
DEVICE="ens192"
ONBOOT="yes"
IPADDR="192.168.2.126"
GATEWAY="192.168.2.254"
BRIDGE="br0"
EOF
重启网络服务
systemctl restart network
启动libvirtd服务
systemctl restart libvirtd
三、命令行创建虚拟机并安装CentOS7
使用命令安装
virt-install --name=study01 \
--memory=2048,maxmemory=2048 \
--vcpus=2,maxvcpus=2 \
--os-type=linux --os-variant=rhel7 \
--location=/images/ISO/CentOS-7-x86_64-Minimal-1810.iso \
--disk path=/images/kvm/study01.img,size=30 \
--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 定义终端额外的参数
附录:virt-install参数说明
usage: virt-install --name NAME --memory MB STORAGE INSTALL [options]
从指定安装源创建新虚拟机。
optional arguments:
-h, --help show this help message and exit
--version show program's version number and exit
--connect URI 通过 libvirt URI 连接到虚拟机管理程序
通用选项:
-n NAME, --name NAME 客户机实例名称
--memory MEMORY Configure guest memory allocation. Ex:
--memory 1024 (in MiB)
--memory 512,maxmemory=1024
--memory 512,maxmemory=1024,hotplugmemorymax=2048,hotplugmemoryslots=2
--vcpus VCPUS 配置客户机虚拟 CPU(vcpu) 数量。例如:
--vcpus 5
--vcpus 5,maxcpus=10,cpuset=1-4,6,8
--vcpus sockets=2,cores=4,threads=2
--cpu CPU CPU model and features. Ex:
--cpu coreduo,+x2apic
--cpu host-passthrough
--cpu host
--metadata METADATA 配置客户机元数据。例如:
--metadata name=foo,title="My pretty title",uuid=...
--metadata description="My nice long description"
安装方法选项:
--cdrom CDROM 光驱安装介质
-l LOCATION, --location LOCATION
安装源 (例如:nfs:host:/path, http://host/path,
ftp://host/path)
--pxe 使用 PXE 协议从网络引导
--import 在已有的磁盘镜像中构建客户机
--livecd 将光驱介质视为 Live CD
-x EXTRA_ARGS, --extra-args EXTRA_ARGS
将附加参数添加到由 --location
引导的内核中
--initrd-inject INITRD_INJECT
添加指定文件到由 --location 指定的 initrd
根中
--os-variant DISTRO_VARIANT
在客户机上安装的操作系统,例如:'fedor
a18'、'rhel6'、'winxp' 等。
--boot BOOT 配置客户机引导设置。例如:
--boot hd,cdrom,menu=on
--boot init=/sbin/init (针对容器)
--idmap IDMAP 为 LXC 容器启用用户名称空间。例如:
--idmap uid_start=0,uid_target=1000,uid_count=10
设备选项:
--disk DISK 指定存储的各种选项。例如:
--disk size=10 (在默认位置创建 10GiB 镜像)
--disk /my/existing/disk,cache=none
--disk device=cdrom,bus=scsi
--disk=?
-w NETWORK, --network NETWORK
配置客户机网络接口。例如:
--network bridge=mybr0
--network network=my_libvirt_virtual_net
--network network=mynet,model=virtio,mac=00:11...
--network none
--network help
--graphics GRAPHICS 配置客户机显示设置。例如:
--graphics vnc
--graphics spice,port=5901,tlsport=5902
--graphics none
--graphics vnc,password=foobar,port=5910,keymap=ja
--controller CONTROLLER
配置客户机控制器设备。例如:
--controller type=usb,model=ich9-ehci1
--input INPUT 配置客户机输入设备。例如:
--input tablet
--input keyboard,bus=usb
--serial SERIAL 配置客户机串口设备
--parallel PARALLEL 配置客户机并口设备
--channel CHANNEL 配置客户机通信通道
--console CONSOLE 配置文本控制台连接主机与客户机
--hostdev HOSTDEV 配置物理 USB/PCI 等主机设备与客户机共享
--filesystem FILESYSTEM
传递主机目录到客户机。例如:
--filesystem /my/source/dir,/dir/in/guest
--filesystem template_name,/,type=template
--sound [SOUND] 配置客户机声音设备仿真
--watchdog WATCHDOG 配置客户机 watchdog 设备
--video VIDEO 配置客户机视频硬件。
--smartcard SMARTCARD
配置客户机智能卡设备。例如:
--smartcard mode=passthrough
--redirdev REDIRDEV 配置客户机重定向设备。例如:
--redirdev usb,type=tcp,server=192.168.1.1:4000
--memballoon MEMBALLOON
配置客户机 memballoon 设备。例如:
--memballoon model=virtio
--tpm TPM 配置客户机 TPM 设备。例如:
--tpm /dev/tpm
--rng RNG Configure a guest RNG device. Ex:
--rng /dev/urandom
--panic PANIC 配置客户机 panic 设备。例如:
--panic default
--memdev MEMDEV Configure a guest memory device. Ex:
--memdev dimm,target_size=1024
客户机配置选项:
--security SECURITY 设置域安全驱动配置。
--cputune CPUTUNE Tune CPU parameters for the domain process.
--numatune NUMATUNE 为域进程调整 NUMA 策略。
--memtune MEMTUNE 为域进程调整内存策略。
--blkiotune BLKIOTUNE
为域进程调整 blkio 策略。
--memorybacking MEMORYBACKING
为域进程设置内存后备策略。例如:
--memorybacking hugepages=on
--features FEATURES 设置域 <features> XML。例如:
--features acpi=off
--features apic=on,eoi=on
--clock CLOCK 设置域 <clock> XML。例如:
--clock offset=localtime,rtc_tickpolicy=catchup
--pm PM 配置 VM 电源管理功能
--events EVENTS 配置 VM 生命周期管理策略
--resource RESOURCE 配置 VM 资源分区(cgroups)
--sysinfo SYSINFO Configure SMBIOS System Information. Ex:
--sysinfo emulate
--sysinfo host
--sysinfo bios_vendor=Vendor_Inc.,bios_version=1.2.3-abc,...
--sysinfo system_manufacturer=System_Corp.,system_product=Computer,...
--sysinfo baseBoard_manufacturer=Baseboard_Corp.,baseBoard_product=Motherboard,...
--qemu-commandline QEMU_COMMANDLINE
Pass arguments directly to the qemu emulator. Ex:
--qemu-commandline='-display gtk,gl=on'
--qemu-commandline env=DISPLAY=:0.1
虚拟化平台选项:
-v, --hvm 这个客户机应该是一个全虚拟化客户机
-p, --paravirt 这个客户机应该是一个半虚拟化客户机
--container 这个客户机应该是一个容器客户机
--virt-type HV_TYPE 要使用的管理程序名称 (kvm, qemu, xen, ...)
--arch ARCH 模拟 CPU 架构
--machine MACHINE 机器类型为仿真类型
其它选项:
--autostart 主机启动时自动启动域。
--transient Create a transient domain.
--wait WAIT 请等待数分钟以便完成安装。
--noautoconsole 不要自动尝试连接到客户端控制台
--noreboot 安装完成后不启动客户机。
--print-xml [XMLONLY]
打印生成的 XML 域,而不是创建客户机。
--dry-run 运行安装程序,但不创建设备或定义客户
机。
--check CHECK 启用或禁用验证检查。例如:
--check path_in_use=off
--check all=off
-q, --quiet 抑制非错误输出
-d, --debug 输入故障排除信息
开始安装后会显示安装引导界面,其实跟普通安装CentOS一样,只不过平时是用图形界面安装,这里是用命令行来配置语言、时区、安装源、网络、密码等信息,[!]代表你需要配置的,[x]代表你已经设置了。
各选项含义如下:
1)语言设置 2)时区设置
3)安装源 4)软件包选择
5)系统分区 6)Kdump功能
7)网络配置 8)密码设置
9)创建用户
按1进入语言选择界面:
这里选择了中文,输入68并回车,然后会让你选择是简体还是繁体,这里也按下相应的数字然后回车:
选择 1 简体中文
接下来选择时区:
选择亚洲
选择回车继续
选择亚洲 时区 上海
设置系统安装盘
选择 "c" 继续
默认下一步
选择标准分区
选中标准分区后,我们输入“c”回车继续
设置root密码
设置完root 密码后,输入 b 开始安装。
安装完成后会停止在以下这个界面,按一下回车就会自动重启。
重启完成后就会进入到登录界面
进入到KVM虚拟机安装的目录或磁盘,会发现下面多出了个文件
四、报错处理
4.1 问题1
[root@kvm ~]# virsh console study01
Connected to domain study01
Escape character is ^]
error: 操作失败: 这个域有活跃控制台会话
原因及解决办法:如果你之前连接过,没有退出,但是你与宿主机的ssh断了,就会出现这种问题,也就是你之前的连接控制台的连接还存在;
解决:
#查看virsh进程号,kill即可
ps -ef | grep virsh
kill -9 ****
或者查看virt-manager 是不是没有关闭引起冲突。
4.2 问题2
先执行命令virsh start study01,启动虚拟机。
当执行命令virsh console mycentos后出现如下显示:
virsh console mycentos Connected to domain mycentos Escape character is ^]
按任何键都没有反应。
解决方法:
启动mycentos修改其配置:
1、修改 /etc/securetty 到最后添加 ttyS0
echo ttyS0 >>/etc/securetty
2、修改/etc/inittab 到最后添加 S0:12345:respawn:/sbin/agetty/ ttyS0 115200
echo "S0:12345:respawn:/sbin/agetty/ ttyS0 115200" >> /etc/inittab
3、修改/etc/grub.conf ,在 kernel 这一行的末尾,添加console=ttyS0
4、重启mycentos : reboot
重启后即可正常通过终端连接到虚拟机。
参考命令行创建虚拟机:
【KVM】KVM虚拟机安装搭建及基本使用 - 简书
cento7安装kvm并通过kvm命令行安装centos7_kvm安装-CSDN博客
KVM(二)命令行新建虚拟机_kvm命令行创建虚拟机-CSDN博客
控制台进不去解决方式:
virsh console 进不去虚拟机_virsh 命令-腾讯云开发者社区-腾讯云
KVM 桥接设置: linux-kvm.org/page/Main_Page
CentOS7安装kvm并配置网络连接-腾讯云开发者社区-腾讯云