KVM部署

KVM概述

• 以色列qumranet公司研发,后被RedHad公司收购
(1)kvm只支持x86平台
(2)依赖于 HVM,inter VT AMD-v

• KVM是(Kernel-based Virtual Machine)的简称,是一个开源的系统虚拟化模块,自Linux 2.6.20之后集成在Linux的各个主要发行版本中。它使用Linux自身的调度器进行管理,所以相对于Xen,其核心源码很少。

• KVM的虚拟化需要硬件支持(如Intel VT技术或者AMD V技术)。是基于硬件的完全虚拟化。而Xen早期则是基于软件模拟的Para-Virtualization,新版本则是基于硬件支持的完全虚拟化。但Xen本身有自己的进程调度器,存储管理模块等,所以代码较为庞大。广为流传的商业系统虚拟化软件VMware ESX系列是基于软件模拟的Full-Virtualization。

KVM工作原理

KVM 是基于虚拟化扩展(Intel VT 或者 AMD-V)的 X86 硬件的开源的 Linux 原生的全虚拟化解决方案。KVM 中,虚拟机被实现为常规的 Linux 进程,由标准 Linux 调度程序进行调度;虚机的每个虚拟 CPU 被实现为一个常规的 Linux 进程。这使得 KMV 能够使用 Linux 内核的已有功能。
但是,KVM 本身不执行任何硬件模拟,需要客户空间程序通过 /dev/kvm 接口设置一个客户机虚拟服务器的地址空间,向它提供模拟的 I/O,并将它的视频显示映射回宿主的显示屏。目前这个应用程序是 QEMU。

KVM整体结构

从GUI到Linux内核,包括以下五个组件:
1、virt-manager: 一个用来管理VM的GUI/CUI用户接口,它使用libvirt api 调用VM的各种功能。
2、libvirt:API库,作为较通用的服务器虚拟化软件,它支持Xen,VMware ESXi/GSX,当然,还有QEMU/KVM。
3、QEMU:一个和KVM内核模块交互的模拟器,处理多种客户机系统请求如I/O,一个QEMU进程对应一个客户机系统。
4、KVM内核模块: 从狭义上来说,KVM是一个Linux内核模块,主要负责vCPU的创建,虚拟内存的分配,vCPU寄存器的读写以及vCPU的运行。
5、Bridge-utils - Bridge-utils是一个Linux桥接工具集合,用于创建和配置网络桥接设备。在KVM中使用网络桥接可以实现更高效的网络通信。

KVM部署

镜像下载地址: Download

#设置主机名
[root@localhost yum.repos.d]# hostnamectl set-hostname kvmhost

#查看所有的包组包括隐藏的
[root@kvmhost yum.repos.d]# yum grouplist hidden
Loaded plugins: fastestmirror
There is no installed groups file.
Maybe run: yum groups mark convert (see man yum)
Loading mirror speeds from cached hostfile
Available Environment Groups:
   Minimal Install
   Compute Node
   Infrastructure Server
   File and Print Server
   Basic Web Server
   Virtualization Host
   Server with GUI
   GNOME Desktop
   KDE Plasma Workspaces
   Development and Creative Workstation
Available Groups:
   Additional Development
   Anaconda Tools
   Backup Client
   Backup Server
   Base
   CentOS Linux Client product core
   CentOS Linux ComputeNode product core
   CentOS Linux Server product core
   CentOS Linux Workstation product core
   Common NetworkManager submodules
   Compatibility Libraries
   Conflicts (Client)
   Conflicts (ComputeNode)
   Conflicts (Server)
   Conflicts (Workstation)
   Console Internet Tools
   Core
   DNS Name Server
   Debugging Tools
   Desktop Debugging and Performance Tools
   Development Tools
   Dial-up Networking Support
   Directory Client
   Directory Server
   E-mail Server
   Emacs
   FTP Server
   File and Storage Server
   Fonts
   GNOME
   GNOME Applications
   Graphical Administration Tools
   Graphics Creation Tools
   Guest Agents
   Guest Desktop Agents
   Hardware Monitoring Utilities
   High Availability
   Hyper-v platform specific packages
   Identity Management Server
   Infiniband Support
   Input Methods
   Internet Applications
   Internet Browser
   Java Platform
   KDE
   KDE Applications
   KDE Multimedia Support
   KVM platform specific packages
   Large Systems Performance
   Legacy UNIX Compatibility
   Legacy X Window System Compatibility
   Load Balancer
   Mainframe Access
   MariaDB Database Client
   MariaDB Database Server
   Multimedia
   Network File System Client
   Network Infrastructure Server
   Networking Tools
   Office Suite and Productivity
   PHP Support
   Performance Tools
   Perl Support
   Perl for Web
   Platform Development
   PostgreSQL Database Client
   PostgreSQL Database Server
   Print Server
   Printing Client
   Python
   Remote Desktop Clients
   Remote Management for Linux
   Resilient Storage
   Ruby Support
   Scientific Support
   Security Tools
   Smart Card Support
   System Administration Tools
   System Management
   Technical Writing
   VMware platform specific packages
   Virtualization Client
   Virtualization Hypervisor
   Virtualization Platform
   Virtualization Tools
   Web Server
   Web Servlet Engine
   X Window System
Done
[root@kvmhost yum.repos.d]#

#安装kvm包组
[root@kvmhost ~]# yum groupinstall Virtualization*

#启动libvirtd服务
[root@kvmhost ~]# systemctl start libvirtd.service

#会自动创建一个nat网络模式 虚拟网卡virbr0
[root@kvmhost ~]# ifconfig 
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.164.88  netmask 255.255.255.0  broadcast 192.168.164.255
        inet6 fe80::d3bf:bc91:e8af:f72  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:6d:ca:0e  txqueuelen 1000  (Ethernet)
        RX packets 7812  bytes 535792 (523.2 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 10865  bytes 7534518 (7.1 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 432  bytes 34156 (33.3 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 432  bytes 34156 (33.3 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

virbr0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500         kvm nat网络模式
        inet 192.168.122.1  netmask 255.255.255.0  broadcast 192.168.122.255
        ether 52:54:00:48:2a:8b  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@kvmhost ~]# 

KVM创建仅主机网络模式

# kvm管理器
[root@kvmhost ~]# virt-manager  

#多一个虚拟网卡 仅主机模式
[root@kvmhost ~]# ifconfig 
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.164.88  netmask 255.255.255.0  broadcast 192.168.164.255
        inet6 fe80::d3bf:bc91:e8af:f72  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:6d:ca:0e  txqueuelen 1000  (Ethernet)
        RX packets 3668044  bytes 4966430408 (4.6 GiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 671088  bytes 1247012644 (1.1 GiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 97135  bytes 700480172 (668.0 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 97135  bytes 700480172 (668.0 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

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:48:2a:8b  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

virbr1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500  仅主机网络
        inet 192.168.100.1  netmask 255.255.255.0  broadcast 192.168.100.255
        ether 52:54:00:99:61:35  txqueuelen 1000  (Ethernet)
        RX packets 79  bytes 6122 (5.9 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 73  bytes 6566 (6.4 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

vnet0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet6 fe80::fc54:ff:fe60:7689  prefixlen 64  scopeid 0x20<link>
        ether fe:54:00:60:76:89  txqueuelen 1000  (Ethernet)
        RX packets 79  bytes 7228 (7.0 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 245  bytes 15750 (15.3 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

[root@kvmhost ~]# 

KVM虚拟机创建(仅主机网络模式)

KVM创建桥接网络模式

#关闭NetworkManager
[root@kvmhost ~]# systemctl stop NetworkManager
[root@kvmhost ~]# systemctl disable NetworkManager

#配置桥接网卡
[root@kvmhost ~]# cd /etc/sysconfig/network-scripts/
[root@kvmhost network-scripts]# cp -a ifcfg-ens33  ifcfg-br0
[root@kvmhost network-scripts]# vim ifcfg-br0 
TYPE=Bridge
BOOTPROTO=none
NAME=br0
DEVICE=br0
ONBOOT=yes
IPADDR=192.168.164.88
NETMASK=255.255.255.0
GATEWAY=192.168.164.2
DNS1=8.8.8.8
DNS2=114.114.114.114
DELAY=0
[root@kvmhost network-scripts]# vim ifcfg-ens33 
TYPE=Ethernet
#BOOTPROTO=none
NAME=ens33
DEVICE=ens33
ONBOOT=yes
BRIDGE=br0
[root@kvmhost network-scripts]# systemctl restart network
[root@kvmhost network-scripts]# ifconfig 
br0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500  #桥接网卡
        inet 192.168.164.88  netmask 255.255.255.0  broadcast 192.168.164.255
        inet6 fe80::20c:29ff:fe6d:ca0e  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:6d:ca:0e  txqueuelen 1000  (Ethernet)
        RX packets 15  bytes 900 (900.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 22  bytes 1688 (1.6 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet6 fe80::20c:29ff:fe6d:ca0e  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:6d:ca:0e  txqueuelen 1000  (Ethernet)
        RX packets 1472  bytes 113322 (110.6 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 889  bytes 124813 (121.8 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        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

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:48:2a:8b  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

virbr1: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        inet 192.168.100.1  netmask 255.255.255.0  broadcast 192.168.100.255
        ether 52:54:00:99:61:35  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

KVM虚拟机创建(桥接网络模式)

创建虚拟机步骤和上面类似

网络模式选择桥接模式

IP地址自动获取 跟宿主机的IP在同一个网段

#查看虚拟机配置
[root@kvmhost ~]# cd /etc/libvirt/qemu/
[root@kvmhost qemu]# ls
networks  vm1.xml  vm2.xml
[root@kvmhost qemu]# cat vm2.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 vm2
or other application using the libvirt API.
-->

<domain type='kvm'>
  <name>vm2</name>
  <uuid>8d3dcb45-fa50-4bc5-9429-7d72f8eb9022</uuid>
  <memory unit='KiB'>1048576</memory>
  <currentMemory unit='KiB'>1048576</currentMemory>
  <vcpu placement='static'>1</vcpu>
  <os>
    <type arch='x86_64' machine='pc-i440fx-rhel7.0.0'>hvm</type>
    <boot dev='hd'/>
  </os>
  <features>
    <acpi/>
    <apic/>
  </features>
  <cpu mode='custom' match='exact' check='partial'>
    <model fallback='allow'>Broadwell-noTSX-IBRS</model>
    <feature policy='require' name='md-clear'/>
    <feature policy='require' name='spec-ctrl'/>
    <feature policy='require' name='ssbd'/>
  </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>destroy</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/vm2.qcow2'/>
      <target dev='hda' bus='ide'/>
      <address type='drive' controller='0' bus='0' target='0' unit='0'/>
    </disk>
    <disk type='file' device='cdrom'>
      <driver name='qemu' type='raw'/>
      <target dev='hdb' bus='ide'/>
      <readonly/>
      <address type='drive' controller='0' bus='0' target='0' unit='1'/>
    </disk>
    <controller type='usb' index='0' model='ich9-ehci1'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x7'/>
    </controller>
    <controller type='usb' index='0' model='ich9-uhci1'>
      <master startport='0'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0' multifunction='on'/>
    </controller>
    <controller type='usb' index='0' model='ich9-uhci2'>
      <master startport='2'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x1'/>
    </controller>
    <controller type='usb' index='0' model='ich9-uhci3'>
      <master startport='4'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x05' 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='0x06' function='0x0'/>
    </controller>
    <interface type='bridge'>
      <mac address='52:54:00:07:76:f1'/>
      <source bridge='br0'/>
      <model type='rtl8139'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
    </interface>
    <serial type='pty'>
      <target type='isa-serial' port='0'>
        <model name='isa-serial'/>
      </target>
    </serial>
    <console type='pty'>
      <target type='serial' port='0'/>
    </console>
    <channel type='spicevmc'>
      <target type='virtio' name='com.redhat.spice.0'/>
      <address type='virtio-serial' controller='0' bus='0' port='1'/>
    </channel>
    <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='1'/>
    </redirdev>
    <redirdev bus='usb' type='spicevmc'>
      <address type='usb' bus='0' port='2'/>
    </redirdev>
    <memballoon model='virtio'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/>
    </memballoon>
  </devices>
</domain>
[root@kvmhost qemu]# 

KVM命令行安装虚拟机

命令行手动安装虚拟机

#virt-install安装虚拟机
virt-install --name vm3 \
--memory 1024 \
--vcpus=2 \
--location=/iso/CentOS-7-x86_64-DVD-2207-02.iso \
--disk path=/var/lib/libvirt/images/vm3.qcow2,size=10,format=qcow2 \
--network bridge=br0

命令行自动配置安装虚拟机

#安装配置工具
[root@kvmhost ~]# yum list all  | grep kickstart
pykickstart.noarch                      1.99.66.22-1.el7               base     
system-config-kickstart.noarch          2.9.7-1.el7                    base     
 
[root@kvmhost ~]# yum -y install system-config-kickstart


#查看安装包清单中的bin命令
[root@kvmhost ~]# rpm -ql system-config-kickstart | grep bin
/usr/bin/system-config-kickstart
[root@kvmhost ~]# 

#生成ks自动配置文件
[root@kvmhost ~]# system-config-kickstart

[root@kvmhost ~]# cd /iso/
[root@kvmhost iso]# ls
CentOS-7-x86_64-DVD-2207-02.iso  ks.cfg


#自动配置文件安装
virt-install --name vm4 \
--memory 1024 \
--vcpus=2 \
--location=/iso/CentOS-7-x86_64-DVD-2207-02.iso \
--disk path=/var/lib/libvirt/images/vm4.qcow2,size=10,format=qcow2 \
--network bridge=br0 \
-x ks=/iso/ks.cfg

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值