KVM虚拟化学习总结
虚拟化技术介绍
什么是虚拟化
在计算机技术中,虚拟化(Virtualization)是一种资源管理技术,是将计算机的 各自实体资源。予以抽象、转换后呈现出来并可供分割、组合为一个或多个计算机配置环境,并重新分割、重新组合、以达到最大化合理利用物理资源的目的;
虚拟化的优势
降低硬件设备资金成本和运维成本; 最大限度的减少或消除停机; 提高IT部门的工作效率、效益、敏捷性和响应能力。 加快应用和资源的调配速度; 提高业务连续性和灾难恢复能力
什么是虚拟机
虚拟机计算机也称为虚拟机(VM、Virtual Machine),它是一种严密隔离且内含操作系统和应用的软件容器。每个自暴寒虚拟机都是完全独立的。用过将多台虚拟机放置在一台宿主机上,可仅在一台物理服务器或“主机”上运行多个操作系统和多种应用,名为“hyperVisor”的精简软件层可将虚拟机和主机分离开来,并根据需要为每个虚拟机动态分配计算资源。
虚拟机的主要特性
特性名称 说明 共享硬件 可在一台物理机上运行多个操作系统;可在虚拟机之间分配系统硬件资源; 相互隔离 各虚拟机相互隔离互补影响; 封装 可将虚拟机的完整状态保存在文件中;移动和复制虚拟机就如移动文件般轻松; 独立于硬件 可将任意虚拟机调配或迁移到其他服务器上;
虚拟化分类
服务器虚拟化
服务器虚拟化支持将多个擦欧总系统作为搞笑的虚拟机在单个物理服务器上运行,主要优势: 提升IT效率 降低运维成本 更快的部署工作负载 提高应用性能 提高服务器的可用性 消除服务器数量剧增情况和复杂性
网络虚拟化
通过软件定义网络,即网络的创建不在依赖于物理设备,如公有云厂商允许用户自己创建新的网络,在kubernetes、opennstack等平台中都会使用到网络虚拟化技术;
桌面虚拟化
桌面部署为代管服务使IT组织能够更快的响应不断编号的工作场所需求和新出现的机会。还可以将虚拟化桌面和应用快速的、批量的部署给分支机构的PC或者使用移动设备的员工;
应用虚拟化:
应用虚拟化是将应用程序与操作系统 解耦合,为应用程序提供了一个虚拟的运行环境。 在这个环境中,不仅包括应用程序的可执行文件,还包括它所需要的运行时环境。
存储虚拟化
库虚拟化
在linux上允许window程序使用wine,在mac系统上允许window程序使CrossOver等;
容器技术
当前应用比较广泛的虚拟化技术,典型的就是docker,linux Container、pouch、RKT等;
KVM虚拟化与XEN虚拟化技术的对比
XEN KVM 出现时间 2003 2007 支持的企业 Cirtix、Novell、Oracle、Sun、Rethat、Virtual lron redhat、Ubuntu 支持的虚拟化技术 全虚拟化、半虚拟化 全虚拟化 支持的架构 X86、IA64、AMD、Fujtsu、IBM、Sun 支持虚拟化的CPU 支持的操作系统类型 UNIX、Linux、Microsoft windows UNIX、Linux、Microsoft windows 动态迁移 支持 支持 内核支持 需要额外对内核打补丁 内置在内核中
Hypervisor类型与说明
Hypervisor是一种允许在基础物理服务器和操作系统之中间的软件层,其可以允许多个操作系统和应用共享底层的内存、CPU、磁盘等物理硬件,也可以叫做VMM(virtual machine monitor),即虚拟机监视器; Hypervisor是所有虚拟化技术的核心技术,非中断的支持多工作负载迁移的能力是hypervisor的基本功能,当服务器启动并执行Hypervisor时,它会给每一台虚拟机分配适量的内存、CPU、网络和磁盘,并加载所有虚拟机的操作系统;
直接运行到物理机的虚拟化
需要运行在操作系统内的虚拟化:
KVM XEN vmware workstation paralles desktop Microsoft hyper-V VirtualBox
常见的Hypervisor类型:
类型1-裸机型:
直接运行在硬件设备上,这种架构搭建的虚拟机环境称为裸机虚拟化环境
类型2-主机托管型:
运行在具有虚拟化功能的操作系统上,构建的是主机虚拟化环境
kvm虚拟化被redhat划分到类型1的裸机型中;
KVM虚拟化技术介绍
KVM是硬件辅助的虚拟化技术,主要负责比较繁琐的CPU和内存虚拟化,而Qemu则负责I/O虚拟化,二者合作各自发挥自身的优势:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uAkykwuj-1668762793360)(ImageDB/image-20221118163734972.png)]
什么是KVM
官网:https://www.redhat.com/zh/topics/virtualization/what-is-KVM
基于内核的虚拟机 Kernel-based Virtual Machine(KVM)是一种内建于 Linux® 中的开源虚拟化技术。具体而言,KVM 可帮助您将 Linux 转变为虚拟机监控程序,使主机计算机能够运行多个隔离的虚拟环境,即虚拟客户机或虚拟机(VM)。
KVM 是 Linux 的一部分。Linux 2.6.20 或更新版本包括 KVM。KVM 于 2006 年首次公布,并在一年后合并到主流 Linux 内核版本中。由于 KVM 属于现有的 Linux 代码,因此它能立即享受每一项新的 Linux 功能、修复和发展,无需进行额外工程。
KVM是如何运行的
KVM 将 Linux 转变为 1 类(裸机恢复)虚拟机监控程序。所有虚拟机监控程序都需要一些操作系统层面的组件才能运行虚拟机,如内存管理器、进程调度程序、输入/输出(I/O)堆栈、设备驱动程序、安全管理器以及网络堆栈等。由于 KVM 是 Linux 内核的一部分,因此所有这些组件它都有。每个虚拟机都像普通的 Linux 进程一样实施,由标准的 Linux 调度程序进行调度,并且使用专门的虚拟硬件,如网卡、图形适配器、CPU、内存和磁盘等。
KVM的资源限制
官方介绍:https://access.redhat.com/articles/rhel-kvm-limits
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-peeocMbM-1668762793361)(ImageDB/image-20221118164301466.png)]
KVM结构组件构成
组件名称 功能说明 Guest 客户机系统,包括cpu(vcpu)、内存、驱动、被KVM置于一种受限制的CPU模式下运行 KVM 运行在内核空间,提供CPU和内存的虚拟化,以及客户机的I/O拦截,Guset的部分I/O被KVM拦截后交给qemu处理 Qemu 纯软件实现的虚拟化模拟器,几乎可以模拟任何硬件设备,我们所熟悉的一台能独立运行操作系统的虚拟机,虚拟机认为是与硬件交互,但实际上是与Qemu模拟出来的硬件交互,然后Qemu将这些指令转译给真正的硬件;正因需要转发所以性能会有一定损耗,所以在生产中,大多数做法都是配合KVM来完成虚拟化的工作,KVM完成复杂及要求较高的设备虚拟化,而Qemu完成输入输出设备的虚拟化;
安装KVM软件
安装前说明
如何判断CPU是否支持硬件虚拟化
grep -i -E '(vmx|svm|lm)' /proc/cpuinfo- vmx:Intel VT-x- svm:AMD AMD-v
KVM工作栈与相关软件包
软件包功能说明
qemu-kvm(用户空间的工具程序 ) qemu-kvm-tools(qemu-img qemu-kvm 工具包) libvirt-daemon-kvm(守护进程工具) libvirt(virt库) virt-manager(KVM图形化管理工具) libvirt-client
相关命令
#安装kvm软件包:yum -y install qemu-kvm qemu-kvm-tools libvirt-daemon-kvm libvirt libvirt-client#启动守护进程:systemctl enable --now libvirtd.servicesystemctl status libvirtd.service#安装VNC:yum -y install tigervnc tigervnc-serversystemctl enable --now vncserver@\:1.service
安装流程
#KVM-虚拟机安装
创建流程:安装kvm相关软件包,与VNC连接包--->创建磁盘映像文件--->创建模板虚拟机--->根据虚拟机模板创建虚拟机配置文件(.xml)--->复制默认网络模板创建网络文件--->修改虚拟机配置文件,并生成虚拟机--->搭建kimich管理平台网络配置方案:1.创建nat网络--->手动配置iptables规则;2.创建桥接网络
RPM包方式安装
#环境安装:
yum -y install qemu-kvm qemu-kvm-tools libvirt-daemon-kvm libvirt libvirt-client libguestfs libguestfs-tools virt-install
#创建磁盘映像:
qemu-img create -f 磁盘属性(raw|qcow2|qcow ) 磁盘路径/磁盘映像文件 size大小;
#创建虚拟磁盘镜像文件:(ISO创建)
virt-install --virt-type kvm --name ${Vhost_name} --ram 1024 --vcpus 2 --cdrom=${Cdrom} --disk path=/var/lib/libvirt/images/${Vhost_name}.img --network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole
#创建桥接网络(与外互通的网络/nmcli):
rpm -q bridge-utils || yum -y install bridge-utils
nmcli con add type bridge con-name br0 ifname br0
nmcli con modify br0 ipv4.addresses $Nat_ip/24 ipv4.method manual gw4 $Gw ipv4.dns 114.114.114.114
nmcli con up br0
nmcli con add type bridge-slave con-name br0-port ifname $Nat_Prot master br0
nmcli con up br0-port
#创建Nat网络(与外互通的网络/brctl):
brctl addbr mybr0
brctl stp mybr0 on
brctl show mybr0
安装脚本
KVM管理命令详解
virsh命令
域管理:Domiain Management(虚拟机实例管理)子命令说明
子命令名称 功能说明 attach-device 从一个XML文件附加装置 attach-disk 附加磁盘设备 attach-interface 获得网络界面 autostart 自动开始一个域 blkdeviotune 设定或者查询块设备 I/O 调节参数。 blkiotune 获取或者数值 blkio 参数 blockcommit 启动块提交操作。 blockcopy 启动块复制操作。 blockjob 管理活跃块操作 blockpull 使用其后端映像填充磁盘。 blockresize 创新定义域块设备大小 change-media 更改 CD 介质或者软盘驱动器 console 连接到客户会话 cpu-stats 显示域 cpu 统计数据 create 从一个 XML 文件创建一个域 define 从一个 XML 文件定义(但不开始)一个域 desc 显示或者设定域描述或者标题 destroy 销毁(停止)域 detach-device 从一个 XML 文件分离设备 detach-device-alias detach device from an alias detach-disk 分离磁盘设备 detach-interface 分离网络界面 domdisplay 域显示连接 URI domfsfreeze Freeze domain’s mounted filesystems. domfsthaw Thaw domain’s mounted filesystems. domfsinfo Get information of domain’s mounted filesystems. domfstrim 在域挂载的文件系统中调用 fstrim。 domhostname 输出域主机名 domid 把一个域名或 UUID 转换为域 id domif-setlink 设定虚拟接口的链接状态 domiftune 获取/设定虚拟接口参数 domjobabort 忽略活跃域任务 domjobinfo 域任务信息 domname 将域 id 或 UUID 转换为域名 domrename rename a domain dompmsuspend 使用电源管理功能挂起域 dompmwakeup 从 pmsuspended 状态唤醒域 domuuid 把一个域名或 id 转换为域 UUID domxml-from-native 将原始配置转换为域 XML domxml-to-native 将域 XML 转换为原始配置 dump 把一个域的内核 dump 到一个文件中以方便分析 dumpxml XML 中的域信息 edit 编辑某个域的 XML 配置 event Domain Events inject-nmi 在虚拟机中输入 NMI iothreadinfo view domain IOThreads iothreadpin control domain IOThread affinity iothreadadd add an IOThread to the guest domain iothreaddel delete an IOThread from the guest domain send-key 向虚拟机发送序列号 send-process-signal 向进程发送信号 lxc-enter-namespace LXC 虚拟机进入名称空间 managedsave 管理域状态的保存 managedsave-remove 删除域的管理保存 managedsave-edit edit XML for a domain’s managed save state file managedsave-dumpxml Domain information of managed save state file in XML managedsave-define redefine the XML for a domain’s managed save state file memtune 获取或者数值内存参数 perf Get or set perf event metadata show or set domain’s custom XML metadata migrate 将域迁移到另一个主机中 migrate-setmaxdowntime 设定最大可耐受故障时间 migrate-getmaxdowntime get maximum tolerable downtime migrate-compcache 获取/设定压缩缓存大小 migrate-setspeed 设定迁移带宽的最大值 migrate-getspeed 获取最长迁移带宽 migrate-postcopy Switch running migration from pre-copy to post-copy numatune 获取或者数值 numa 参数 qemu-attach QEMU 附加 qemu-monitor-command QEMU 监控程序命令 qemu-monitor-event QEMU Monitor Events qemu-agent-command QEMU 虚拟机代理命令 reboot 重新启动一个域 reset 重新设定域 restore 从一个存在一个文件中的状态恢复一个域 resume 重新恢复一个域 save 把一个域的状态保存到一个文件 save-image-define 为域的保存状态文件重新定义 XML save-image-dumpxml 在 XML 中保存状态域信息 save-image-edit 为域保存状态文件编辑 XML schedinfo 显示/设置日程安排变量 screenshot 提取当前域控制台快照并保存到文件中 set-lifecycle-action change lifecycle actions set-user-password set the user password inside the domain setmaxmem 改变最大内存限制值 setmem 改变内存的分配 setvcpus 改变虚拟 CPU 的号 shutdown 关闭一个域 start 开始一个(以前定义的)非活跃的域 suspend 挂起一个域 ttyconsole tty 控制台 undefine 取消定义一个域 update-device 从 XML 文件中关系设备 vcpucount 域 vcpu 计数 vcpuinfo 详细的域 vcpu 信息 vcpupin 控制或者查询域 vcpu 亲和性 emulatorpin 控制火车查询域模拟器亲和性 vncdisplay vnc 显示 guestvcpus query or modify state of vcpu in the guest (via agent) setvcpu attach/detach vcpu or groups of threads domblkthreshold set the threshold for block-threshold event for a given block device or it’s backing chain element
监控管理: Domain Monitoring(管理监控虚拟机资源使用情况)
子命令名称 功能说明 domblkerror 在块设备中显示错误 domblkinfo 域块设备大小信息 domblklist 列出所有域块 domblkstat 获得域设备块状态 domcontrol 域控制接口状态 domif-getlink 获取虚拟接口链接状态 domifaddr Get network interfaces’ addresses for a running domain domiflist 列出所有域虚拟接口 domifstat 获得域网络接口状态 dominfo 域信息 dommemstat 获取域的内存统计 domstate 域状态 domstats get statistics about one or multiple domains domtime domain time list 列出域
宿主机管理: Host and Hypervisor(管理宿主机相关状态信息)
子命令名称 功能说明 allocpages Manipulate pages pool size capabilities 性能 =cpu-baseline 计算基线 CPU cpu-compare 使用 XML 文件中描述的 CPU 与主机 CPU 进行对比 cpu-models CPU models domcapabilities domain capabilities freecell NUMA可用内存 freepages NUMA free pages hostname 打印管理程序主机名 hypervisor-cpu-baseline compute baseline CPU usable by a specific hypervisor hypervisor-cpu-compare compare a CPU with the CPU created by a hypervisor on the host maxvcpus 连接 vcpu 最大值 node-memory-tune 获取或者设定节点内存参数 nodecpumap 节点 cpu 映射 nodecpustats 输出节点的 cpu 状统计数据。 nodeinfo 节点信息 nodememstats 输出节点的内存状统计数据。 nodesuspend 在给定时间段挂起主机节点 sysinfo 输出 hypervisor sysinfo uri 打印管理程序典型的URI version 显示版本
网络接口管理: Interface(管理网络接口相关信息)
子命令名称 功能说明 iface-begin 生成当前接口设置快照,可在今后用于提交 (iface-commit) 或者恢复 (iface-rollback) iface-bridge 生成桥接设备并为其附加一个现有网络设备 iface-commit 提交 iface-begin 后的更改并释放恢复点 iface-define define an inactive persistent physical host interface or modify an existing persistent one from an XML file iface-destroy 删除物理主机接口(启用它请执行 “if-down”) iface-dumpxml XML 中的接口信息 iface-edit 为物理主机界面编辑 XML 配置 iface-list 物理主机接口列表 iface-mac 将接口名称转换为接口 MAC 地址 iface-name 将接口 MAC 地址转换为接口名称 iface-rollback 恢复到之前保存的使用 iface-begin 生成的更改 iface-start 启动物理主机接口(启用它请执行 “if-up”) iface-unbridge 分离其辅助设备后取消定义桥接设备 iface-undefine 取消定义物理主机接口(从配置中删除)
网络规则管理: Network Filter (管理iptables规则)
子命令名称 功能说明 nwfilter-define 使用 XML 文件定义或者更新网络过滤器 nwfilter-dumpxml XML 中的网络过滤器信息 nwfilter-edit 为网络过滤器编辑 XML 配置 nwfilter-list 列出网络过滤器 nwfilter-undefine 取消定义网络过滤器 nwfilter-binding-create create a network filter binding from an XML file nwfilter-binding-delete delete a network filter binding nwfilter-binding-dumpxml XML 中的网络过滤器信息 nwfilter-binding-list list network filter bindings
网络管理:Networking(管理虚拟机网络相关信息)
子命令名称 功能说明 net-autostart 自动开始网络 net-create 从一个 XML 文件创建一个网络 net-define define an inactive persistent virtual network or modify an existing persistent one from an XML file net-destroy 销毁(停止)网络 net-dhcp-leases print lease info for a given network net-dumpxml XML 中的网络信息 net-edit 为网络编辑 XML 配置 net-event Network Events net-info 网络信息 net-list 列出网络 net-name 把一个网络UUID 转换为网络名 net-start 开始一个(以前定义的)不活跃的网络 net-undefine undefine a persistent network net-update 更新现有网络配置的部分 net-uuid 把一个网络名转换为网络UUID
节点设备管理:Node Device(管理节点上的设备信息管理)
子命令名称 功能说明 nodedev-create 根据节点中的 XML 文件定义生成设备 nodedev-destroy 销毁(停止)节点中的设备 nodedev-detach 将节点设备与其设备驱动程序分离 nodedev-dumpxml XML 中的节点设备详情 nodedev-list 这台主机中中的枚举设备 nodedev-reattach 重新将节点设备附加到他的设备驱动程序中 nodedev-reset 重置节点设备 nodedev-event Node Device Events
密钥管理:Secret(管理连接虚拟机的认证密钥信息)
子命令名称 功能说明 secret-define 定义或者修改 XML 中的 secret secret-dumpxml XML 中的 secret 属性 secret-event Secret Events secret-get-value secret 值输出 secret-list 列出 secret secret-set-value 设定 secret 值 secret-undefine 取消定义 secret
快照管理: Snapshot(虚拟机快照信息管理)
子命令名称 功能说明 snapshot-create 使用 XML 生成快照 snapshot-create-as 使用一组参数生成快照 snapshot-current 获取或者设定当前快照 snapshot-delete 删除域快照 snapshot-dumpxml 为域快照转储 XML snapshot-edit 编辑快照 XML snapshot-info 快照信息 snapshot-list 为域列出快照 snapshot-parent 获取快照的上级快照名称 snapshot-revert 将域转换为快照
存储池管理: Storage Pool(管理存储池相关信息)
子命令名称 功能说明 find-storage-pool-sources-as 找到潜在存储池源 find-storage-pool-sources 发现潜在存储池源 pool-autostart 自动启动某个池 pool-build 建立池 pool-create-as 从一组变量中创建一个池 pool-create 从一个 XML 文件中创建一个池 pool-define-as 在一组变量中定义池 pool-define define an inactive persistent storage pool or modify an existing persistent one from an XML file pool-delete 删除池 pool-destroy 销毁(删除)池 pool-dumpxml XML 中的池信息 pool-edit 为存储池编辑 XML 配置 pool-info 存储池信息 pool-list 列出池 pool-name 将池 UUID 转换为池名称 pool-refresh 刷新池 pool-start 启动一个(以前定义的)非活跃的池 pool-undefine 取消定义一个不活跃的池 pool-uuid 把一个池名称转换为池 UUID pool-event Storage Pool Events
存储卷管理: Storage Volume(管理存储卷相关信息)
子命令名称 功能说明 vol-clone 克隆卷。 vol-create-as 从一组变量中创建卷 vol-create 从一个 XML 文件创建一个卷 vol-create-from 生成卷,使用另一个卷作为输入。 vol-delete 删除卷 vol-download 将卷内容下载到文件中 vol-dumpxml XML 中的卷信息 vol-info 存储卷信息 vol-key 为给定密钥或者路径返回卷密钥 vol-list 列出卷 vol-name 为给定密钥或者路径返回卷名 vol-path 为给定密钥或者路径返回卷路径 vol-pool 为给定密钥或者路径返回存储池 vol-resize 创新定义卷大小 vol-upload 将文件内容上传到卷中 vol-wipe 擦除卷
Virsh本身的交互命令:Virsh itself
子命令名称 功能说明 cd 更改当前目录 echo echo 参数 exit 退出这个非交互式终端 help 打印帮助 pwd 输出当前目录 quit 退出这个非交互式终端 connect 连接(重新连接)到 hypervisor
virsh命令-常用命令
virsh-list
参数名称 功能 使用方法 –inactive 列出不活跃的域 virsh list --inactive –all 不活跃和活跃的域列表 virsh list --all –transient 列出临时域 virsh list --transient –persistent 列出持久域 virsh list --persistent –with-snapshot 列出现有快照的域 virsh list --with-snapshot –without-snapshot 列出没有快照的域 virsh list --without-snapshot –state-running 运行状态的域列表 virsh list --state-running –state-paused 列出暂停状态的域 virsh list --state-paused –state-shutoff 列出关闭状态的域 virsh list --state-shutoff –state-other 列出其他状态的域 virsh list --state-other –autostart 列出启用 autostart 的域 virsh list --autostart –no-autostart 列出禁用 autostart 的域 virsh list --no-autostart –with-managed-save 列出有管理的保存状态的域 virsh list --with-managed-save –without-managed-save 列出没有管理的保存状态的域 virsh list --without-managed-save –uuid 只列出 uuid virsh list --uuid –name 只列出域名 virsh list --name –table 列出表格(默认) virsh list --table –managed-save 标记有管理的保存状态的域 virsh list --managed-save –title show domain title virsh list --title
virsh dumpxml
参数名称 功能 使用方法 –inactive 显示不活跃定义的 XML virsh dumpxml filename.xml–inactive –security-info 包括 XML 转储中与安全性相关的信息 virsh dumpxml filename.xml --security-info –update-cpu 根据主机 CPU 更新虚拟机 CPU virsh dumpxml filename.xml --update-cpu –migratable 为迁移提供 XML 可用性 virsh dumpxml filename.xml --migratable –domain 查看domin的xml内容 virsh dumpxml filename.xml --domain
virsh create:(创建虚拟机)
参数名称 功能 使用方法 [–file] 文件包括一个 XML 域描述 virsh create filename.xml –console 创建后附加到控制台 virsh create filename.xml --console –paused 生成后让虚拟机保持暂停状态 virsh create filename.xml --paused –autodestroy virsh 断开连接时自动销毁虚拟机 virsh create filename.xml --autodestroy virsh –pass-fds 向虚拟机传递文件描述符 N、M… virsh create filename.xml --pass-fds –validate validate the XML against the schema virsh create filename.xml --validate
virsh define
参数名称 功能 使用方法 [–file] 文件包括一个 XML 域描述 virsh define filename.xml –validate validate the XML against the schema virsh define filename.xml --validate
virsh start:(启动虚拟机)
参数名称 功能 [–domain] 非活跃域的名称 –console 创建后附加到控制台 –paused 生成后让虚拟机保持暂停状态 –autodestroy virsh 断开连接时自动销毁虚拟机 –bypass-cache 载入时避免文件系统缓存 –force-boot 采用忽略所有管理保存的方式强制刷新引导 –pass-fds 向虚拟机传递文件描述符 N、M…
|
| --validate | validate the XML against the schema | virsh define filename.xml --validate |
virsh start:(启动虚拟机)
参数名称 功能 [–domain] 非活跃域的名称 –console 创建后附加到控制台 –paused 生成后让虚拟机保持暂停状态 –autodestroy virsh 断开连接时自动销毁虚拟机 –bypass-cache 载入时避免文件系统缓存 –force-boot 采用忽略所有管理保存的方式强制刷新引导 –pass-fds 向虚拟机传递文件描述符 N、M…