KVM虚拟技术概述(一)

文章内容仅供参考

kvm简介

KVM是RedHat的一项虚拟化技术

一个KVM虚拟化平台由三个部分组成

kvm:是linux内核的模块,它需要CPU的支持,采用硬件辅助虚拟化技术 Intel-VT,AMD-V,内存的相关如Intel的 EPT 和 AMD 的 RVI 技术,主要是提供底层命令支持

qemu:一个虚拟化的仿真工具,通过 ioctl 不内核kvm 交互完成对硬件的虚拟化支持,主要提供虚拟硬件的仿真支持

libvirt:是一个对虚拟化管理的接口和工具,提供用户端程序 virsh ,virt-install, virt-manager, virt-view 不用户交互,因为一条完整的启动虚拟机的命令是非常非常非常长的,要在命令中指定所有的虚拟机配置,简直就是反人类,所有我们都是通过和libvirt交互来控制虚拟机

 

一个虚拟机由两个部分组成

一个XML配置文件,路径在/etc/libvirt/qemu/

一个磁盘镜像文件,路径在/var/lib/libvirt/images/

 

KVM安装

依赖包:

qemu-kvm                  //为KVM提供底层仿真支持,KVM已经集成在内核中,不需要再安装 

libvirt-daemon           //libvirtd的守护进程,用来管理虚拟机

libvirt-client                //客户端软件,提供客户端管理命令,eg:virsh,virt-manager

libvirt-daemon-driver-qemu            //libvirtd连接qemu时的驱动,libvirtd不单单可以连接qemu也可以连接VMware和virtualBOX

可选安装:

virt-install     //系统安装工具

virt-manager      //图形管理软件

virt-v2v     //虚拟机迁移工具,可以将从一个虚拟平台迁移到另外一个虚拟平台

virt-p2v     //实现将物理机往虚拟机中迁移

yum -y install qemu-kvm libvirt-client libvirt-daemon libvirt-daemon-driver-qemu
systemctl satart libvirtd

KVM管理命令

• 查看KVM节点(服务器)信息

– virsh nodeinfo     //真机信息

• 列出虚拟机

– virsh list [--all]

• 列出虚拟网络

– virsh net-list [--all] //虚拟交换机(网桥)

• 查看指定虚拟机的信息

– virsh dominfo 虚拟机名称

• 运行|重启|关闭指定的虚拟机

– virsh start|reboot|shutdown 虚拟机名称

• 强制关闭指定的虚拟机

– virsh destroy 虚拟机名称

• 将指定的虚拟机设为开机自动运行

– virsh autostart [--disable] 虚拟机名称

• 连接指定虚拟机

– virsh console 虚拟机名称     //通过这个命令连接到虚拟机是连接的虚拟机的串口,相当于直接连接的虚拟机的屏幕,能够进行任何操作,包括修改网卡,甚至进入修复模式,断开连接只能用“ctrl+] ”  

 

创建镜像

镜像文件使用的比较多的时RAW和QCOW2这两种格式,QCOW2是kvm默认的格式,除了在I/O速度上比不上RAW,其他方面都完爆RAW,它主要是使用了COW技术,能够非常快速的拷贝文件

cow:copy on write,写时复制;

client 访问 前端盘,当前端盘有client需要的数据的时候,前端盘直接将数据返回给client;当前端盘没有对应数据的时候,前端盘就访问后端盘,copy一份数据到前端盘,然后再返回给client。client对数据的修改保存在前端盘上,后端盘的数据是readonly的

创建新的镜像盘文件

qemu-img create -f 格式 磁盘路径 大小 // -f :指定文件格式,创建的文件存放在当前路径

 qemu-img create -f qcow2 disk.img 50G

qemu-img 常用的命令有

– create 创建一个磁盘

– convert 转换磁盘格式

– info 查看磁盘信息

– snapshot 管理磁盘快照

qemu-img命令可以通过添加-b选项来使用后端镜像盘

qemu-img create -b disk.img -f qcow2 disk1.img 20G

其中disk.img是后端盘,disk1.img是前端盘,前端盘的大小一定要大于等于后端盘

后端盘可以通过virt-manage图形管理工具创建一台虚拟机以后,在虚拟机上安装

 

创建虚拟交换机

创建的虚拟交换机,调用dnsmasq的DHCP,DNS等功能

vim /etc/libvirt/qemu/networks/vbr.xml
<network>			
<name>vbr</name>		    #指定名称,执行virsh net-list	看到的名字
<bridge name="vbr"/>		#指定名称,执行ifconfig看到的名字
<forward mode="nat"/>	    #路由转发模式为nat地址转换,可以上网
<ip address="192.168.1.254" netmask="255.255.255.0">   #虚拟交换机的IP,也是虚拟机的网关地址
<dhcp>
<range start="192.168.1.100" end="192.168.1.200"/>		#指定dhcp分配的地址池
</dhcp>
</ip>		
</network>	

• virsh 管理虚拟网络

– net-list                                                      //查看虚拟网络

– net-define vbr.xml 创建虚拟网络          //让virsh读取vbr.xml配置文件

– net-undefine vbr 删除虚拟网络            //还没停止服务时执行,只是在net-list看不到,完整删除要先 执行net-destroy

– net-start vbr                                             //启动虚拟网络vbr

– net-destroy vbr                                       //停止虚拟网络vbr

– net-edit vbr 修改 vbr 网络的配置         //编辑xml以后需要重启虚拟交换机

– net-autostart vbr                                    //设置 vbr 虚拟网络开机自启动

 

虚拟机配置文件

vim /etc/libvrit/qemu/node1.xml

<!--
WARNING: THIS IS AN AUTO-GENERATED FILE. CHANGES TO IT ARE LIKELY TO BE
OVERWRITTEN AND LOST. Changes to this xml configuration should be made using:
  virsh edit node01
or other application using the libvirt API.
-->

<domain type='kvm'>
  <name>node01</name>        <!--虚拟机的名称--!>
  <uuid>f92bef5c-821a-4d2a-96cb-1d3647f26a04</uuid>    <!--虚拟机的UUID--!>
  <memory unit='KiB'>4100000</memory>                   <!--虚拟机最大能使用内存--!>
  <currentMemory unit='KiB'>4100000</currentMemory>     <!--虚拟机真实内存--!>
  <vcpu placement='static'>1</vcpu>         <!--cpu个数--!>
  <os>
    <type arch='x86_64' machine='pc-i440fx-rhel7.0.0'>hvm</type>
  </os>
  <features>         <!--电源相关信息--!>
    <acpi/>
    <apic/>
  </features>
  <cpu mode='host-model' check='partial'>         <!--cpu模式,不知道怎么改可以删掉--!>
    <model fallback='allow'/>
  </cpu>
  <clock offset='utc'>         <!--时钟信息--!>
    <timer name='rtc' tickpolicy='catchup'/>
    <timer name='pit' tickpolicy='delay'/>
    <timer name='hpet' present='no'/>
  </clock>
  <on_poweroff>destroy</on_poweroff>
  <on_reboot>restart</on_reboot>
  <on_crash>restart</on_crash>
  <pm>             <!--内存和硬盘休眠设置--!>
    <suspend-to-mem enabled='no'/>
    <suspend-to-disk enabled='no'/>
  </pm>
  <devices>         <!--仿真设备设置--!>
    <emulator>/usr/libexec/qemu-kvm</emulator>
    <disk type='file' device='disk'>             <!--配置硬盘--!>
      <driver name='qemu' type='qcow2'/>
      <source file='/var/lib/libvirt/images/rh7_node001.img'/>   <!--指定镜像地址--!>
      <target dev='vda' bus='virtio'/>
      <boot order='1'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/>
    </disk>
    <disk type='file' device='cdrom'>
      <driver name='qemu' type='raw'/>
      <target dev='hda' bus='ide'/>
      <readonly/>
      <address type='drive' controller='0' bus='0' target='0' unit='0'/>
    </disk>
    <controller type='usb' index='0' model='ich9-ehci1'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x7'/>
    </controller>
    <controller type='usb' index='0' model='ich9-uhci1'>
      <master startport='0'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0' multifunction='on'/>
    </controller>
    <controller type='usb' index='0' model='ich9-uhci2'>
      <master startport='2'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x1'/>
    </controller>
    <controller type='usb' index='0' model='ich9-uhci3'>
      <master startport='4'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x2'/>
    </controller>
    <controller type='pci' index='0' model='pci-root'/>
    <controller type='ide' index='0'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/>
    </controller>
    <controller type='virtio-serial' index='0'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/>
    </controller>
    <interface type='network'>         <!--配置网卡信息--!>
      <mac address='52:54:00:6c:82:16'/>
      <source network='private1'/>
      <model type='virtio'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
    </interface>
    <interface type='network'>
      <mac address='52:54:00:48:fc:e6'/>
      <source network='private2'/>
      <model type='virtio'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x09' function='0x0'/>
    </interface>
    <interface type='network'>
      <mac address='52:54:00:ce:53:32'/>
      <source network='public1'/>
      <model type='virtio'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x0a' function='0x0'/>
    </interface>
    <interface type='network'>
      <mac address='52:54:00:a6:fe:c1'/>
      <source network='public2'/>
      <model type='virtio'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x0b' function='0x0'/>
    </interface>
    <serial type='pty'>
      <target port='0'/>
    </serial>
    <console type='pty'>
      <target type='serial' port='0'/>
    </console>
    <input type='tablet' bus='usb'>
      <address type='usb' bus='0' port='1'/>
    </input>
    <input type='mouse' bus='ps2'/>
    <input type='keyboard' bus='ps2'/>
    <graphics type='spice' autoport='yes'>
      <listen type='address'/>
      <image compression='off'/>
    </graphics>
    <sound model='ich6'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
    </sound>
    <video>
      <model type='qxl' ram='65536' vram='65536' vgamem='16384' heads='1' primary='yes'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
    </video>
    <redirdev bus='usb' type='spicevmc'>
      <address type='usb' bus='0' port='2'/>
    </redirdev>
    <redirdev bus='usb' type='spicevmc'>
      <address type='usb' bus='0' port='3'/>
    </redirdev>
    <memballoon model='virtio'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x08' function='0x0'/>
    </memballoon>
  </devices>
</domain>

• xml 配置文件

– 保存 node 虚拟机配置文件

virsh dumpxml node >demo.xml

– 清除模板配置

virsh undefine node

– xml模板

– <!-- 是注释的开始

– --> 是注释的结尾

– xml 标签必须成对出现

– <keyword> ... ... </keyword>

 

 

 

 

 

 


 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
KVM(Kernel-based Virtual Machine)是一种开源的虚拟化技术,它是在Linux内核之上构建的虚拟化基础设施,可以将一台物理服务器分割成多个虚拟机。以下是KVM虚拟化技术的安装部署步骤: 1. 安装KVM软件包和相关工具 首先,需要安装KVM软件包和相关工具,可以使用以下命令在CentOS上安装: ``` yum install -y qemu-kvm libvirt virt-install bridge-utils ``` 2. 配置网络桥接 在使用KVM创建虚拟机时,需要使用桥接方式将虚拟机连接到物理网络中。可以使用以下命令创建一个名为“br0”的网桥: ``` nmcli connection add type bridge autoconnect yes con-name br0 ifname br0 nmcli connection modify br0 ipv4.addresses 192.168.1.100/24 ipv4.gateway 192.168.1.1 ipv4.method manual nmcli connection modify br0 ipv4.dns "8.8.8.8, 8.8.4.4" nmcli connection modify br0 bridge.stp no systemctl restart network ``` 3. 启动libvirtd服务 KVM使用libvirt管理虚拟化资源,因此需要启动libvirtd服务。可以使用以下命令启动服务: ``` systemctl start libvirtd systemctl enable libvirtd ``` 4. 创建虚拟机 安装和配置完KVM后,可以使用virt-install命令创建虚拟机,例如: ``` virt-install --name testvm --ram 2048 --vcpus=2 --disk path=/var/lib/libvirt/images/testvm.img,size=20 --network bridge=br0,model=virtio --graphics vnc --console pty,target_type=serial ``` 这将创建一个名为“testvm”的虚拟机,分配2个CPU和2GB的内存,使用20GB的磁盘空间,并连接到名为“br0”的网络桥。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值