2019-05-21 21:45:05 qq_41112887 阅读数 888

KVM虚拟化

什么是虚拟化?

虚拟化,通过模拟计算机的硬件,来实现在同一台计算机上同时运行多个不同的操作系统的技术。

为什么要用虚拟化?

充分利用资源,软件运行环境的隔离,只有虚拟化才行实现。

场景1:同一台物理机运行多个php版本 php5.3(openssl,gd)  php5.5  php7.2
场景2:机房的迁移,解决了硬件和系统的依赖
场景3:openstacks环境,软件发布方式
场景4:开发环境和测试环境,使用虚拟化
场景5:业务的快速部署  

虚拟化:提高了资源的利用率,各个服务的安全性隔离,解决了系统和硬件之间的依赖

KVM虚拟化管理软件的安装

安装软件

yum install -y libvirt virt-install qemu-kvm
libvirt        # 虚拟机管理软件
virt-install   # 虚拟机的安装工具和克隆工具
qemu-kvm       # 管理虚拟机的虚拟磁盘

启动服务

systemctl start libvirtd.service
systemctl enable libvirtd.service

启动一个kvm虚拟机

virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name centos7 --memory 1024 --vcpus 1 --disk /opt/centos7.raw,format=raw,size=10 --cdrom /opt/CentOS-7-x86_64-DVD-1708.iso --network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole
--virt-type               # 指定虚拟化类型
--os-type                 # 指定系统类型
--os-variant              # 指定系统版本
--name                    # 指定虚拟机的名称
--memory                  # 指定虚拟机内存
--vcpus                   # 指定虚拟机CPU
--disk                    # 指定虚拟机磁盘文件路径及名称、磁盘文件类型、磁盘空间
--cdrom                   # 指定虚拟机安装的镜像
--network                 # 指定网络
--graphics                # 
--noautocondole           # 不加改参数创建虚拟机的时候会夯住

raw和qcow2的区别

raw:裸格式,占用空间比较大,不支持快照功能,性能较好,不方便传输
qcow2:cow(copy on write)占用空间小,支持快照,性能比raw差一点,方便传输

KVM虚拟机的日常管理

查看虚拟机列表

virsh list
virsh list --all

开启虚拟机

virsh start centos7     # 最后跟的是KVM虚拟机的名称

关闭虚拟机

virsh shutdown centos7  # 正常关闭
virsh destroy centos7   # 拔电源

查看虚拟机配置

virsh dumpxml centos7
virsh dumpxml centos7 > centos7-off.xml

删除虚拟机

# 删除虚拟机之前先关闭虚拟机
virsh undefine centos7

导入虚拟机

virsh define centos7-off.xml

修改虚拟机配置

# 自带语法检查
virsh edit centos7

虚拟机重命名

virsh domrename centos7 centos-7

挂起虚拟机

virsh suspend centos-7

恢复虚拟机

virsh resume centos-7

查询vnc端口号

virsh vncdisplay centos-7

KVM虚拟机开机启动

# KVM虚拟机开机启动前提是libvirtd开机启动。
systemctl enable libvirtd
# KVM开启自启
virsh autostart centos-7

KVM虚拟机console登录

# 首先在虚拟机的内执行以下命令
grubby --update-kernel=ALL --args="console=ttyS0,115200n8"
# 重启KVM虚拟机,在KVM虚拟机内执行,重启后真正的虚拟机会关机
reboot
# 开启KVM虚拟机并使用console连接虚拟机
virsh start centos-7
virsh console centos-7

KVM虚拟机磁盘格式转换

qemu-img convert -f raw -O qcow2 /data/centos7.raw /data/centos7.qcow2

qemu-img命令管理

# 查看虚拟机磁盘文件信息
qemu-img info centos-7.raw
# 创建虚拟硬盘
qemu-img create -f qcow2 test.qcow2 10G
# 调整虚拟磁盘容量
qemu-img resize test.qcow2 +10G
# 转换磁盘格式
qemu-img convert -f raw -O qcow2 old.raw new.qcow2
                  原格式  新格式  原文件  新文件

创建KVM虚拟机快照

# 创建快照
virsh snapshot-create centos7
virsh snapshot-create-as centos7 --name install_ok
# 查看快照
virsh snapshot-list centos7
# 还原快照
virsh snapshot-revert centos7 --snapshowname centos7
# 删除快照
virsh snapshot-delete centos7  --snapshotname centos7

raw不支持做快照,qcow2支持快照,并且快照就保存在qcow2的磁盘文件中.

KVM虚拟机克隆

完整克隆

virt-clone --auto-clone -o web01 -n web02

链接克隆

# a.生成虚拟机磁盘文件
qemu-img create -f qcow2 -b web01.qcow2 web02.qcow2
# b.生成虚拟机配置文件
virsh dumpxml web01 > web02.xml
# 修改配置文件
## 修改名字
## 删除uuid
## 磁盘文件地址
## 删除mac地址
# c.导入虚拟机
virsh define web02.xml

KVM虚拟机的桥接模式

创建桥接网卡

virsh iface-bridge eth0 br0

取消桥接网卡

virsh iface-unbridge br0

创建KVM桥接网络的虚拟机

virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name web04 --memory 1024 --vcpus 1 --disk /data/web04.qcow2 --boot hd --network bridge=br0 --graphics vnc,listen=0.0.0.0 --noautoconsole

热添加技术

KVM虚拟机在线热添加硬盘

# 临时添加
virsh attach-disk web04 --source /data/web04-add.qcow2 --target vdb --subdriver qcow2
# 永久添加
virsh attach-disk web04 --source /data/web04-add.qcow2 --target vdb --subdriver qcow2 --config

给KVM虚拟机添加新的硬盘

# 创建一个新的硬盘
qemu-img create -f qcow2 /data/new.qcow2 10G
# 附加新硬盘
virsh attach-disk web04 --source /data/new.qcow2 --target vdb --subdriver qcow2
# 虚拟机中
## 格式化硬盘
mkfs.xfs /dev/vdb
## 挂载硬盘
mount /dev/vdb /mnt

给KVM虚拟机硬盘扩容

# 虚拟机中
## 卸载硬盘
umount /mnt
# 物理机中
## 剥离硬盘
virsh detach-disk web04 --target vdb
## 扩容
qemu-img resize /data/new.qcow2 +10G
## 再插上硬盘
virsh attach-disk wbe04 --source /data/new.qcow2 --target vdb --subdriver qcow2
# 虚拟机中
## 挂载硬盘
mount /dev/vdb /mnt
## 重新加载
xfs_growfs /mnt
## 查看挂载
df -h

根磁盘扩容

# a.在宿主机上关闭虚拟机并调整虚拟机磁盘大小
qemu-img resize oldboy.qcow2 +10G
# b.虚拟机中fdisk重新调整分区
fdisk /dev/vda
# c.重启机器,执行xfs_growfs /dev/vda1
xfs_growfs /dev/vda1
## 注:ext4文件系统需要用:resize2fs /dev/vda1

KVM虚拟机在线热添加网卡

# 添加网卡
virsh attach-interface web04 --type bridge --source br0 --model virtio
virsh attach-interface web04 --type bridge --source br0 --model virtio --config
# 删除网卡
virsh detach-interface web04 --type bridge --mac 52:54:00:35:d3:71

KVM虚拟机在线热添加内存

# 创建新的虚拟机,指定最大的内存值
virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name web04 --memory 512,maxmemory=2048 --vcpus 1 --disk /data/web04.qcow2 --boot hd --network bridge=br0 --graphics vnc,listen=0.0.0.0 --noautoconsole
# 临时添加内存
virsh setmem web04 1024M 
# 永久添加内存
virsh setmem web04 1024M --config

KVM虚拟机在线热添加cpu

# 创建新的虚拟机,指定最大的cpu个数
virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name web04 --memory 512,maxmemory=2048 --vcpus 1,maxvcpus=10 --disk /data/web04.qcow2 --boot hd --network bridge=br0 --graphics vnc,listen=0.0.0.0 --noautoconsole
# 临时添加cpu
virsh setvcpus web04 4
# 永久添加cpu
virsh setvcpus web04 4 --config

KVM虚拟机热迁移

冷迁移kvm虚拟机:配置文件,磁盘文件
热迁移kvm虚拟机:配置文件,nfs共享

KVM虚拟机实现热迁移

1:两边的环境(桥接网卡)
2:实现共享存储(nfs)
3:虚拟机桥接网络
4:在线热迁移

# 1.修改宿主机的主机名和hosts文件
hostnamectl set-hostanme KVM01
hostnamectl set-hostanme KVM02
echo "10.0.0.11 KVM01" >>/etc/hosts
echo "10.0.0.12 KVM02" >>/etc/hosts
# 2.创建nfs服务器
## 具体部署nfs服务这里不详细解释
systemctl restart rpcbind
systemctl restart nfs
# 3.宿主机挂载nfs
mount -t nfs 10.0.0.13:/data/ /opt
# 4.创建一个KVM虚拟机
virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name oldbi --memory 1024,maxmemory=2048 --vcpus 1,maxvcpus=10  --disk /opt/oldbi.qcow2 --boot hd --network bridge=br0 --graphics vnc,listen=0.0.0.0 --noautoconsole
# 5.热迁移
virsh migrate --live --verbose oldbi qemu+ssh://10.0.0.12/system --unsafe
2013-11-12 09:23:17 lihang421 阅读数 971

kvm虚拟化技术:实战与原理解析


在具体内容上,本书不仅系统介绍了 KVM虚拟机的功能、特性和使用方 法,而且还深入地剖析了 KVM虚拟机的核心技术和工作原理,对 KVM做了全面而透彻的讲解。


对其内容详细阅读

2017-04-08 12:42:30 weixin_36908057 阅读数 1217

《kvm虚拟化技术 实战与原理解析》

1、kvm原理简介

 x86平台虚拟化技术中,新引入的虚拟化层通常称为虚拟机监控器(Virtual Machine Monitor,VMM),也叫做Hypervisor.
 宿主机是真实的物理平台,客户机是虚拟出来的平台。
 虚拟化实现的技术方式有多种,比如软件虚拟化和硬件虚拟化,再比如准虚拟化和全虚拟化。准虚拟化需要修改客户机操作系统。
 Xen是开源准虚拟化技术的例子,是取代内核由自身管理系统资源的架构。
 KVM全称 kernel Virtual Machine,内核虚拟机。它作为一个模块,成为linux内核的一部分。它是全虚拟化的解决方案,部分准虚拟化。
 虚拟级监控器的主要职能是管理真实的物理平台,并为每个虚拟客户机提供对应的虚拟硬件平台。
 虚拟机的架构分为类型一和类型二。类型一是虚拟机在系统上电后首先加载运行虚拟机监控程序,而传统的操作系统运行在创建的虚拟机上。类型二是系统上电后运行一般意义上的操作系统,虚拟机监控程序作为特殊的应用程序,视作操作系统功能的扩展。
 虚拟机的创建和运行是一个用户空间的应用程序(QEMU)和KVM模块相互配合。大部分的输入和输出设备交给QEMU来负责。

2、kvm核心基础功能

  1. 内存管理
  2. 存储
  3. cpu
  4. 网络
  5. 显示

3、kvm管理功能

它们一般对qemu-kvm命令进行封装和功能增强,提供更友好的用户交互接口。基于libvirt API, openstack提供一个模块化的web用户界面。libvirt API为其他虚拟化管理工具提供一套通用的API管理包括qemu/kvm的多种Hypervisor.

4、kvm性能测试以及参考数据

  1. 内存性能测试
    1. 磁盘I/O性能测试
    2. cpu性能测试
    3. 网络性能测试
2016-10-18 21:39:25 nirendao 阅读数 3372

第一章和第二章

第一章 虚拟化和云计算

Saas(软件即服务):将已经部署好的软件作为一种服务来提供,比如:Google Docs, Google Apps
Paas(平台即服务):将开发环境作为一种服务来提供。
Iaas(基础设施即服务):将多台服务器组成的“云端”基础设施作为计量服务提供给客户。

软件虚拟化:

利用纯软件的方法在现有的物理平台上(往往并不支持硬件虚拟化)实现对物理平台访问的截获和模拟。
常见的软件虚拟机如QEMU,它是通过纯软件来仿真x86平台处理器的取指、解码和执行,客户机的指令并不在物理 平台上直接执行。
由于所有指令都是软件模拟的,因此性能往往比较差,但是可以在同一平台上模拟不同架构平台的虚拟机。

VMware的软件虚拟化使用了动态二进制翻译技术。虚拟机监控机(VMM)在可控制的范围内,允许客户机的指令在物理平台上直接运行。但是,客户机指令在运行前会被虚拟机监控机扫描,其中突破虚拟机监控机限制的指令会被动态替换为可以在物理平台上直接运行的安全指令,或者替换为对虚拟机监控机的软件调用。优点是比纯软件模拟性能有大幅提升,缺点是失去了跨平台虚拟化的能力。

硬件虚拟化:

物理平台本身提供对特殊指令的截获和重定向的支持;甚至新的硬件会提供额外的资源来帮助软件实现对关键硬件资源的虚拟化,从而提升性能。

以x86平台的虚拟化为例,支持虚拟技术的x86 CPU 带有特别优化过的指令集来控制虚拟过程,通过这些指令集,VMM很容易将客户机置于一种受限制的模式下运行,一旦客户机试图访问物理资源,硬件会暂停客户机的运行,将控制权交回给VMM处理。VMM可以将客户机在受限模式下对一些特殊资源的访问完全由硬件重定向到VMM指定的虚拟资源。整个过程不需要暂停客户机的运行和VMM软件的参与。

由于虚拟化硬件可提供全新的架构,支持操作系统直接在其上运行,无需进行二进制转码,减少了相关的性能开销,极大简化了VMM的设计,进而使得VMM能够按照通用标准进行编写,性能更加强大。

准虚拟化:

改动客户机操作系统,使它以为自己运行在虚拟环境下,能够同虚拟机监控机协同工作。所以,准虚拟化需要修改客户机的操作系统的源代码来实现主动通知。

Xen是准虚拟化的一个例子,它适用于Linux这样的开源操作系统,而不适合于Windows这样的闭源操作系统。

全虚拟化:

支持运行任何理论上可在真实物理平台上运行的操作系统。不需要对客户机操作系统进行任何修改。

KVM

KVM的开发人员并不是从底层开始新写一个Hypervisor,而是选择了基于Linux Kernel,通过加载新的模块而使Linux Kernel变身成为一个Hypervisor.
KVM目前设计为通过可加载的内核模块,支持广泛的客户机操作系统,包括Windows.

在KVM架构中,虚拟机实现为常规的Linux进程,由标准Linux调度程序进行调度。事实上,每个虚拟CPU实现为一个常规的Linux进程。这使得KVM可以享受Linux内核的所有功能。

KVM本身不执行任何模拟,需要用户空间程序通过/dev/kvm接口设置一个客户机虚拟服务器的地址空间,向它提供模拟的I/O,并将它的视频显示映射回宿主的显示屏。这个应用程序(注:上述的“用户空间程序”)就是大名鼎鼎的QEMU.

REHL6.x系统中的一个KVM客户机可以支持160个虚拟CPU和多达2TB的内存,KVM宿主机支持4096个CPU核心和多达64TB的内存。


第二章 KVM原理简介

操作系统内核设计分为:微内核和单内核。

单内核指的是整个内核从整体上作为一个单独的大过程来实现,并且同时运行在一个单独的地址空间内。所有的内核服务都在这样一个大的内核空间运行,内核之间的通信可以简单地实现为函数调用。

对于微内核来说,内核的功能被划分为多个独立的过程,每一个过程叫做一个服务器。多个服务器都运行在自己的地址空间,只有少量核心的服务器运行在特权模式下,服务器之间的通信采用了进程间通信机制。独立的服务器进程提高系统的健壮性,但是进程间通信由于涉及内核空间和用户空间的上下文切换,其开销比函数调用大得多。

Linux采用实用主义的设计:Linux内核被设计成单内核以满足性能要求;但同时,Linux内核还具有模块化设计和动态装载内核模块的能力。除了诸如进程切换、内存管理等核心内核功能,将大部分内核功能作为单独的内核模块设计并实现。这些内核模块编译好后以单独的二进制文件的形式存在,内核在运行过程中,按照需求,动态地加载并链接进入内核空间运行。不使用的模块还可以在运行过程中动态卸载。这样的设计,既保证了内核的性能,也改进了传统单内核设计的灵活性。
KVM就是以内核模块的形式存在,为Linux内核增加了虚拟化的功能。

从虚拟机的基本架构来区分,分为2种:类型一和类型二。
类型一:
系统上电之后首先加载运行虚拟机监控程序,而传统的操作系统则是运行在其创建的虚拟机中。
类型一的虚拟机监控程序,可以视为一个特别为虚拟机而优化裁剪的操作系统内核。
著名的开源虚拟化软件Xen、商业软件VMware ESX/ESXi 和微软的Hyper-V就是类型一的代表。

类型二:
在系统上电之后仍然运行一般意义的操作系统(也就是俗称的宿主机操作系统),虚拟机监控程序作为特殊的应用程序,可以是为操作系统功能的扩展。
对于类型二虚拟机来说,最大的优势在于可以充分利用现有的操作系统;但也会受到宿主机操作系统的一些限制。
KVM、VMware Workstation、VirtualBox就是属于类型二虚拟机。

KVM模块

P38-39

KVM模块的主要功能是初始化CPU硬件,打开虚拟化模式,然后将虚拟客户机运行在虚拟机模式下,并对虚拟客户机的运行提供一定的支持。
KVM仅支持硬件虚拟化。

以KVM在Intel公司的CPU上运行为例:
1. 在内核被加载的时候,KVM模块会先初始化内部的数据结构;
2. 做好准备之后,KVM模块检测系统当前的CPU,然后打开CPU控制寄存器CR4中的虚拟化模式开关;
3. 通过执行VMXON指令将宿主操作系统(包括KVM模块本身)置于虚拟化模式的根模式;
4. 最后,KVM模块创建特殊设备文件 /dev/kvm 并等待来自用户空间的命令;
5. 接下来,虚拟机的创建和运行将是一个用户空间应用程序(QEMU)和KVM模块相互配合的过程。

KVM模块和用户空间QEMU的通信接口主要是一系列针对特殊设备文件的IOCTL调用。
KVM模块加载之初,只存在 /dev/kvm 文件,而针对该文件的最重要的IOCTL调用就是“创建虚拟机”,其可以被理解为KVM为了某个特定的虚拟客户机(用户空间程序创建并初始化)创建对应的内核数据结构。同时,KVM还会返回一个文件句柄来代表所创建的虚拟机。

针对虚拟处理器最重要的IOCTL调用就是“执行虚拟处理器”。通过它,用户空间准备好的虚拟机在KVM模块的支持下,被置于虚拟化模式的非根模式下,开始执行二进制指令。在非根模式下,所有敏感的二进制指令都会被处理器捕捉到,处理器在保存现场之后,自动切换到根模式,由KVM决定如何进一步处理(要么由KVM模块直接处理,要么返回用户空间交由用户空间程序处理)。

除了处理器的虚拟化,内存虚拟化也是由KVM模块实现的。实际上,这一部分是一个虚拟机实现代码中代码量最大、实现最复杂的部分(至少在硬件支持二维地址翻译之前是这样的)。

处理器对设备的访问主要是通过IO指令和MMIO,其中IO指令会被处理器直接截获,MMIO会通过配置内存虚拟化来捕捉。但是,外设的模拟一般并不由KVM模块负责。一般来说,只有对性能要求比较高的虚拟设备才会由KVM内核模块来直接负责,比如虚拟中断控制器和虚拟时钟。大部分输入输出设备还是会交给用户态程序QEMU负责。

QEMU设备模型

QEMU本身并不是KVM的一部分,其自身就是一个著名的开源虚拟机软件。它是一个纯软件的实现,所以性能低下。

为了简化开发和代码重用,KVM在QEMU的基础上进行了修改。在虚拟机运行期间,QEMU会通过KVM模块提供的系统调用计入内核,由KVM模块负责将虚拟机置于处理器的特殊模式运行。遇到虚拟机进行输入输出操作,KVM模块会从上次的系统调用出口处返回QEMU,有QEMU来负责解析和模拟这些设备。

2019-04-28 17:39:17 MatrixGod 阅读数 398

KVM虚拟化技术之使用Qemu-kvm创建和管理虚拟机

  • KVM介绍

    • KVM是开源软件,全称是kernel-based virtual machine(基于内核的虚拟机),属于内核的一个模块,Linux 2.6.20核心以上的版本中默认带有kvm模块。它包含一个为处理器提供底层虚拟化 可加载的核心模块kvm.ko(kvm-intel.ko或kvm-AMD.ko)
    • kvm虚拟机=kvm模块 + qemu模拟器
      • kvm负责分配内存和cpu,qemu负责模拟网络设备和io设备
  • 系统初始化

    • 检查服务器是否支持虚拟化

      1
      
      [root@kvm ~]# egrep '(vmx|svm)' /proc/cpuinfo
      
    • 检查内核中是否加载kvm模块

      1
      2
      3
      4
      
      [root@kvm ~]# lsmod | grep kvm
      kvm_intel             174841  3 
      kvm                   578518  1 kvm_intel
      irqbypass              13503  3 kvm
      
    • 关闭selinux

      1
      2
      3
      4
      5
      
      [root@kvm ~]# cat /etc/sysconfig/selinux | grep "SELINUX"
      # SELINUX= can take one of these three values:
      SELINUX=disabled
      # SELINUXTYPE= can take one of three two values:
      SELINUXTYPE=targeted
      
  • 为KVM虚拟机配置桥接网络

    • 新建网桥br0,并配置,转移ip到网桥上

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      
      [root@kvm ~]# cd /etc/sysconfig/network-scripts/
      [root@kvm network-scripts]# cat ifcfg-br0 
      TYPE=Bridge
      BOOTPROTO=none
      DEFROUTE=yes
      NAME=br0
      DEVICE=br0
      ONBOOT=yes
      IPADDR=192.168.175.6
      PREFIX=24
      GATEWAY=192.168.175.2
      
    • 配置eth0使用桥接模式

      1
      2
      3
      4
      5
      6
      7
      
      [root@kvm network-scripts]# cat ifcfg-eth0 
      TYPE=Ethernet
      BOOTPROTO=none
      NAME=eth0
      DEVICE=eth0
      ONBOOT=yes
      BRIDGE=br0
      
  • 配置完成后,重启网络服务

    1
    
    [root@kvm network-scripts]# systemctl restart network
    
  • 查看ifconfig如下

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    
    [root@kvm network-scripts]# ifconfig br0
    br0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
            inet 192.168.175.6  netmask 255.255.255.0  broadcast 192.168.175.255
            inet6 fe80::20c:29ff:fe52:20f6  prefixlen 64  scopeid 0x20<link>
            ether 00:0c:29:52:20:f6  txqueuelen 1000  (Ethernet)
            RX packets 49  bytes 4628 (4.5 KiB)
            RX errors 0  dropped 0  overruns 0  frame 0
            TX packets 53  bytes 7133 (6.9 KiB)
            TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
    
    [root@kvm network-scripts]# ifconfig eth0
    eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
            ether 00:0c:29:52:20:f6  txqueuelen 1000  (Ethernet)
            RX packets 6382  bytes 469272 (458.2 KiB)
            RX errors 0  dropped 0  overruns 0  frame 0
            TX packets 8765  bytes 703077 (686.5 KiB)
            TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
    
  • 安装kvm相关组件

    • 安装命令

      1
      
      [root@kvm network-scripts]# yum  install qemu-kvm python-virtinst virt-* libvirt libvirt-client bridge-utils qemu-img -y
      
  • 各组件功能

    1. kvm模块:qemu-kvm
    2. 图形界面管理虚拟机:virt-manager
    3. 网络接口管理工具:bridge-utils
    4. 虚拟机管理工具:libvirt
    5. 虚拟机管理工具客户端:libivirt-client
    6. python组件,记录xml信息:python-virtinst
    7. qemu组件,创建硬盘,启动虚拟机等:qemu-img
    8. 虚拟机安装命令:virt-install
  • 启动libvirt服务

    1
    
    [root@kvm network-scripts]# systemctl start libvirtd && systemctl enable libvirtd && systemctl status libvirt
    
  • 查看系统网络,会自动生成一个桥设备,默认虚拟机和宿主机通信的设备

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    
    [root@kvm network-scripts]# ifconfig virbr0
    virbr0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
            inet 192.168.122.1  netmask 255.255.255.0  broadcast 192.168.122.255
            ether 52:54:00:66:6f:6a  txqueuelen 1000  (Ethernet)
            RX packets 0  bytes 0 (0.0 B)
            RX errors 0  dropped 0  overruns 0  frame 0
            TX packets 0  bytes 0 (0.0 B)
            TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
    [root@kvm network-scripts]# brctl show
    bridge name     bridge id               STP enabled     interfaces
    br0             8000.000c295220f6       no              eth0
    virbr0          8000.525400666f6a       yes             virbr0-nic
    
  • 安装虚拟机

    • 创建硬盘设备

      1
      
      qemu-img create -f qcow2  /data/vm1.qcow2 5G
      
  • 创建虚拟机

    1
    2
    
    virt-install --virt-type kvm --name vm2 --ram 512 --cdrom=/data/CentOS-7.5-x86_64-DVD-1804.iso --disk path=/data/vm1.qcow2 --network bridge=br0 --graphics vnc,listen=0.0.0.0 --noautoconsole
    注:自行上传iso系统镜像
    
  • 安装tigervnc或者vnc viewe工具可以连接到安装虚拟机图形界面,默认端口5900

  • 查看kvm进程

    1
    2
    3
    4
    
    [root@kvm ~]# ps -ef | grep kvm
    root        628      2  0 22:02 ?        00:00:00 [kvm-irqfd-clean]
    avahi       714      1  0 22:02 ?        00:00:00 avahi-daemon: running [kvm.local]
    qemu       3070      1  3 22:21 ?        00:01:26 /usr/libexec/qemu-kvm -name vm2 -S -machine pc-i440fx-rhel7.0.0,accelkvm,usb=off,dump-guest-core=off -cpu IvyBridge-IBRS -m 512 -realtime mlock=off -smp 1,sockets=1,cores=1,threads=1 -uuid ef1dcbd8-1684-4ae0-9dc7-500d59236911 -no-user-config -nodefaults -chardev socket,id=charmonitor,path=/var/lib/libvirt/qemu/domain-2-vm2/monitor.sock,server,nowait -mon chardev=charmonitor,id=monitor,mode=control -rtc base=utc,driftfix=slew -global kvm-pit.lost_tick_policy=delay -no-hpet -no-shutdown -global PIIX4_PM.disable_s3=1 -global PIIX4_PM.disable_s4=1 -boot strict=on -device ich9-usb-ehci1,id=usb,bus=pci.0,addr=0x4.0x7 -device ich9-usb-uhci1,masterbus=usb.0,firstport=0,bus=pci.0,multifunction=on,addr=0x4 -device ich9-usb-uhci2,masterbus=usb.0,firstport=2,bus=pci.0,addr=0x4.0x1 -device ich9-usb-uhci3,masterbus=usb.0,firstport=4,bus=pci.0,addr=0x4.0x2 -device virtio-serial-pci,id=virtio-serial0,bus=pci.0,addr=0x5 -drive file=/data/vm1.qcow2,format=qcow2,if=none,id=drive-virtio-disk0 -device virtio-blk-pci,scsi=off,bus=pci.0,addr=0x6,drive=drive-virtio-disk0,id=virtio-disk0,bootindex=1 -drive if=none,id=drive-ide0-0-0,readonly=on -device ide-cd,bus=ide.0,unit=0,drive=drive-ide0-0-0,id=ide0-0-0 -netdev tap,fd=26,id=hostnet0,vhost=on,vhostfd=28 -device virtio-net-pci,netdev=hostnet0,id=net0,mac=52:54:00:0f:1f:00,bus=pci.0,addr=0x3 -chardev pty,id=charserial0 -device isa-serial,chardev=charserial0,id=serial0 -chardev socket,id=charchannel0,path=/var/lib/libvirt/qemu/channel/target/domain-2-vm2/org.qemu.guest_agent.0,server,nowait -device virtserialport,bus=virtio-serial0.0,nr=1,chardev=charchannel0,id=channel0,name=org.qemu.guest_agent.0 -device usb-tablet,id=input0,bus=usb.0,port=1 -vnc 0.0.0.0:0 -vga cirrus -device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x7 -msg timestamp=on
    

    实际上一个虚拟机对于宿主机而言,只是宿主机上的一个进程而已

  • 查看虚拟机

    1
    2
    3
    4
    
    [root@kvm ~]# virsh list
     Id    Name                           State
    ----------------------------------------------------
     2     vm2                            running
    
  • virsh常用命令

    1
    2
    3
    4
    5
    6
    7
    
    virsh list --all     ##列出所有虚拟机
    virsh list           ##列出运行中的虚拟机
    virsh start vm       ##启动虚拟机
    virsh shutdown vm    ##关闭虚拟机
    virsh undfine vm     ##销毁虚拟机
    virsh console vm1    ##通过console连接虚拟机
    virsh edit vm1       ##编辑位于/etc/libvirt/qemu/vm1.xml
    
  • https://www.hiecho.cn/2019/02/27/KVM%E8%99%9A%E6%8B%9F%E5%8C%96%E6%8A%80%E6%9C%AF%E4%B9%8B%E4%BD%BF%E7%94%A8Qemu-kvm%E5%88%9B%E5%BB%BA%E5%92%8C%E7%AE%A1%E7%90%86%E8%99%9A%E6%8B%9F%E6%9C%BA/

KVM虚拟化技术实践

阅读数 16818

没有更多推荐了,返回首页