kvm介绍内核虚拟化技术从基础到入门到高级

KVM备课笔记

内核级虚拟化技术(Kernel-based Virtua Machine)
1.云计算概念
2.虚拟化与虚拟机
3.硬件虚拟化与软件虚拟化
4.KVM虚拟化
5.KVM(CPU虚拟化)+Qemu(IO设备虚拟化)+Libvirt(提供管理控制台)虚拟化及虚拟机管理
重量级虚拟化,轻量级虚拟化(docker容器计算 )
VMM将物理硬件整合

宿主机(host):跑VMM的机器
客户机(guest):在VMM之上虚拟化出来的机器
VMWare:命令行支持较好
Sun VirtualBos:图形化界面支持

硬件虚拟化:插虚拟化卡进行虚拟化,在虚拟化卡上进行配置,迁移性弱
软件虚拟化:首先有一套操作系统,在操作系统上安装虚拟化软件系统,每个CPU对应宿主机上的一个进程,核数对应进程中的线程,跨平台性能好
软件虚拟化分为平台虚拟化与软件虚拟化
平台虚拟化通过容器运作上层的操作系统,上层的操作系统可以调用底层的库,不需要再安装
软件虚拟化对于底层库的调用必须通过虚拟化软件来转发
全虚拟化与半虚拟化

传统虚拟化结构

KVM优势一:内存页共享
内存分为内核态和用户态。内核占三分之一,一般的虚拟化技术进程存在于用户态,所以最多只能操作用户空间加少量的内核空间,而KVM的进程存在于内核态,可以操作所有的内存,KVM属于linux内核的一个分支,集成在linux中。
内存是分页的,以页面为基本单位
KVM优势二:可以直接操作外围设备,运行到用户空间的进程只能通过转化去操作

KVM支持检测及模块安装
CPU检测
sudo kvm-ok(使用此命令需安装cpu-checker)
egrep -c ‘(xvm|svm)’ /proc/cpuinfo 从文件中搜索是否有vmx或者svm指令
grep vmx /proc/cpuinfo
注意:如果是用 VM 下 Ubuntu 虚拟机环境学习 KVM,执行该命令为 0 时。那么需要开启虚拟化引擎

所谓的模块实际上是linux操作系统中的主键,绝大多数程序的驱动都是以模块的形式构建的

lsmod | grep kvm   查看模块

安装KVM:sudo apt install kvm

qemu:Qemu 是纯软件实现的虚拟化模拟器,几乎可以模拟任何硬件设备。 但是正因为 Qemu 是纯软件实现的,所以其性能非常低。 因此在生产环境中,大多数的做法都是配合 KVM 来完成虚拟化工作。 因为 KVM 是内核级虚拟化技术,主要负责复杂的 CPU 和内存虚拟化; 而 Qemu 则负责 I/O 设备虚拟化,两者合作各自发挥自身的优势,相得益彰

安装qemu:sudo apt install qemu-utils

创建目录:sudo mkdir -p vmdk/vmfs
创建虚拟磁盘:sudo qemu-img create -f qcow2 server1.qcow2 40G
-f指定虚拟磁盘的格式
磁盘格式:qcow2:可动态伸缩,不可以扩容
raw:分配实际的空间,可以扩容

转换虚拟磁盘的格式:sudo qemu-img convert -f {type1} {VM_FILE1} -O {type2} {VM_FILE2}
调整虚拟磁盘大小:sudo qemu-img resize -q {VM_FILE1} {NEW_SIZE}
注意:对于以上两条命令要慎用,特别是在虚拟磁盘中有数据的时候,会造成数据损坏或丢失

查看虚拟磁盘的信息:sudo qemu-img info server1.qcow2

安装Libvirtd:sudo apt install virtinst 可以远程管理
sudo vi /etc/libvirt/libvirtd.conf
listen_tls = 0 libvirt服务启动时信息传递的方式是否加密,不加密
listen_tcp = 1 远程管理方式为tcp协议
tcp_port = “16509” 默认端口
auth_tcp = “none” 授权
mdns_adv = 0 是否支持在网卡上做DNS解析

sudo vi /etc/default/libvirt-bin
	libvirtd_opts = "-d -l"	libvirt进程启动的选项

sudo vi /etc/libvirt/qemu.conf
	vnc_listen = "0.0.0.0"	支持远程的vnc桌面,监听ip地址

注意:该软件安装完成后会为我们创建一个虚拟网卡,叫vibr0
如果你需要创建其他虚拟网卡可以使用以下命令:
virsh iface-bridge eth0 virbr1 eth0是宿主机网卡,vibr1是虚拟网卡的名字
一个物理网卡上面可以建多个虚拟网卡

重启libvirt服务
	sudo service libvirt-bin restart		

sudo apt install libvirt-bin

创建虚拟机
sudo virt-install
–connect qemu:///system 操作系统安装到哪台宿主机
–name=server1 新建的虚拟机的名字
–ram 1024 新建虚拟机的内存大小,单位M
–vcpus=2 几核
–disk path=/VM/server1.qcow2,format=qcow2,size=40,bus=virtio 虚拟磁盘文件
–cdrom /package/ubuntu-16.04.1-server-amd64.iso 安装盘的文件
–vnc 支持远程桌面查看
–os-type linux 安装的虚拟机操作系统
–accelerate 使用加数计数
–hvm 虚拟化技术:半虚拟化
–network bridge=virbr0,model=virtio 网卡
–noautoconsole 不要自动启动管理界面

建脚本文件:sudo vi i.sh
virt-install
–connect qemu:///system
–name=server \

授权:sudo chmod +x i.sh
运行:sudo ./i.sh

virsh 进入virsh
list --all 当前运行的虚拟机的列表

vnc-view ip:0 默认端口为5900,省略590,0表示第一个虚拟机

宿主机的内存加入4G,完全可以有三个2G的客户机,因为内存页共享的原因

第二种方式,修改配置文件
server1.xml -> server2.xml
1:name,修改虚拟机名字
2:uuid,修改唯一标识,随便改其中的值,但是要注意是16进制
3:mac address,修改mac地址,同上,随便改
4:source file,修改镜像文件即磁盘路径,绝对路径

第三种方式,克隆
virt-clone -o server1 -n server3 -f /home/yfl/VM/vmdk/vmfs/server3.qcow2

virsh edit server1 可以直接查找到xml配置文件进行修改

虚拟机管理
启动虚拟机
virsh start VM
关闭虚拟机
virsh shutdown VM
强制关闭虚拟机
virsh destroy VM
删除虚拟机
virsh undefine VM
查看虚拟机
virsh list --all
迁移虚拟机
virsh migrate --live VM qemu+tcp://ip/system --unsafe (迁移虚拟机的磁盘路径名要和被迁移的虚拟机的相同)

虚拟机域管理 Briup Training
查询虚拟机domain连接信息
virsh domdisplay VM
查询虚拟机磁盘信息
virsh domblklist VM
查询虚拟机网卡
virsh domiflist VM

arp -a 反向地址解析,可以查到连接过本虚拟机的mac地址及ip等

虚拟磁盘管理 Briup Training
添加虚拟磁盘
virsh attach-disk –domain {VM} –source {XXX.qcow2} --target {vdX} --persistent --subdriver=qcow2
删除虚拟磁盘
virsh detach-disk –domain {VM} –target {vdX} –persistent

vCPU的概念
qemu/kvm为客户机提供一整套的硬件系统环境,在客户机看来其所拥有的cpu即是vcpu(virtual CPU),在KVM环境中,每一个客户机都是一个标准的linux进程,而每一个vcpu在宿主机中是qemu进程的一个线程

在普通的linux系统中,进程一般有两种执行模式,内核模式和 用户模式,KVM环境中,增加了第三种模式:客户模式
用户模式:主要处理IO的模拟和管理,由qemu的代码实现
内核模式:主要处理特别需要高性能和安全相关的指令,如处理客户模式到内核模式的转换,处理客户模式下的IO指令或其他特权指令引起的退出(VM-Exit),处理影子内存管理(shadow MMU)
客户模式:主要执行Guest中的大部分指令,IO和一些特权指令除外(他们会引起VM-Exit,被hypervisor截获并模拟)

CPU的过载使用
KVM允许客户机过载使用物理资源,即允许为客户机分配的CPU和内存数量多于物理上实际存在的资源,qemu会启动更多的线程来为客户机提供服务,这些线程也是被linux内核调度运行在物理cpu硬件上
关于CPU的过载使用,最不推荐的做法是让某一个客户机的vcpu的数量超过物理系统上存在的cpu数量,比如,在4个逻辑cpu的宿主机中,同时运行一个或多个客户机,其中每个客户机的vcpu数量多于4个,此时会带来明显的性能下降,性能反而不如给每个客户机分配2个(或4个)vcpu的情况。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值