• KVM虚拟平台搭建使用


    一、KVM虚拟化介绍

    KVM 全称 kernel-based virtual machine,由Qumranet公司发起,2008年被RedHat收购。
    KVM实现主要基于Intel-V或者AMD-V提供的虚拟化平台,利用普通的Linux进程运行于虚拟态的指令集,模拟虚拟机监视器和CPU。KVM不提供硬件虚拟化操作,其IO操作等都借助QEMU来完成。

    image_1apkng413147jg181jlq1j3kjhsm.png-16.4kB

    KVM有如下特点:

    • guest作为一个普通进程运行于宿主机
    • guest的CPU(vCPU)作为进程的线程存在,并受到宿主机内核的调度
    • guest继承了宿主机内核的一些属性,比如huge pages(大页表)
    • guest的磁盘IO和网络IO会受到宿主机的设置的影响
    • guest通过宿主机上的虚拟网桥与外部相连

    KVM整体架构

    image_1apknjokv7q91f5cif312h6jpu13.png-122.4kB

    每一个虚拟机(guest)在Host上都被模拟为一个QEMU进程,即emulation进程。
    我们创建一个虚拟机后,用普通的ps 命令就可以查看到。

    ➜  ~ virsh list --all
     Id    Name                           State
    ----------------------------------------------------
     1     kvm-01                         running
    
    ➜  ~ ps aux | grep qemu
    libvirt+ 20308 15.1  7.5 5023928 595884 ?      Sl   17:29   0:10 /usr/bin/qemu-system-x86_64 -name kvm-01 -S -machine pc-i440fx-wily,accel=kvm,usb=off -m 2048 -realtime mlock=off -smp 2 qemu ....

    可以看到,此虚拟机就是一个普通的Linux进程,他有自己的pid。并且有四个线程,线程数量不是固定的,但是至少会有三个(vCPU,IO,Signal)。其中有两个是vCPU线程,有一个IO线程还有一个信号处理线程。

    ➜  ~ pstree -p 20308
    qemu-system-x86(20308)-+-{qemu-system-x86}(20353)
                           |-{qemu-system-x86}(20408)
                           |-{qemu-system-x86}(20409)
                           |-{qemu-system-x86}(20412)
                           

    虚拟CPU

    guest的所有用户级别(user)的指令集,都会直接由宿主机线程执行,此线程会调用KVM的ioctl方式提供的接口加载guest的指令并在特殊的CPU模式下运行,不需要经过CPU指令集的软件模拟转换,大大的减少了虚拟化成本,这也是KVM优于其他虚拟化方式的点之一。

    KVM向外提供了一个虚拟设备/dev/kvm,通过ioctl(IO设备带外管理接口)来对KVM进行操作,包括虚拟机的初始化,分配内存,指令加载等等。

    虚拟IO设备

    guest作为一个进程存在,当然他的内核的所有驱动等都存在,只是硬件被QEMU所模拟(后面介绍virtio的时候特殊)。guest的所有硬件操作都会有QEMU来接管,QEMU负责与真实的宿主机硬件打交道。

    虚拟内存

    guest的内存在host上由emulator提供,对emulator来说,guest访问的内存就是他的虚拟地址空间,guest上需要经过一次虚拟地址到物理地址的转换,转换到guest的物理地址其实也就是emulator的虚拟地址,emulator再次经过一次转换,转换为host的物理地址。后面会有介绍各种虚拟化的优化手段,这里只是做一个overview。

    二、KVM安装

    1.安装centos7服务器

    点击完成,后开始安装

    2.虚机开启虚拟化引擎配置

    3.开启网卡ONBOOT,并重启网卡

    4.查看CPU是否支持虚拟化

    grep -E --color=auto "(vmx|svm)" /proc/cpuinfo

    5.安装KVM

    virtualization             #提供虚拟机的环境,主要包含qemu-kvm

    virtualization-client      #管理和安装虚拟机实例的客户端,主要有python-virtinst,virt-manager,virt-viewer

    virtualization-platform    #提供访问和控制虚拟客户端的接口,主要有libvirt,libvirt-client

    virtualization-tools       #管理离线虚拟机镜像的工具,主要有libguestfs

    gnome-desktop         #安装图形管理界面

    yum -y group install gnome-desktop virtualization-tools virtualization-platform virtualization-client virtualization      #yum安装包组

    6.KVM远程管理

    [root@localhost ~]# which virsh      #查看虚拟机管理命令
    /usr/bin/virsh
    [root@localhost ~]# virsh list --all    #查看所有虚拟机
     Id    名称                         状态
    ----------------------------------------------------

    7.使用qemu-kvm管理虚拟机

    参数简介

    CPU、Memory、SMP、NUMA

    -cpu cpu     #select CPU (-cpu ? for list)
    -smp n[,maxcpus=cpus][,cores=cores][,threads=threads][,sockets=sockets]
    -m megs      #set vRAM size to megs MB [default=128]
    -numa node[,mem=size][,cpus=cpu][,nodeid=node]

    Storage Device

    -drive option[,option[,option[,...]]]    #定义一个存储设备
    子选项介绍:
     id=name                         #定义硬盘设备名称
     file=/path/to/somefile                #硬件映像文件路径
     if=interface_type                  #指定硬盘设备所连接的接口类型(控制器类型), 如ide, scsi, virio等
     index=i                         #设定同一种控制器类型中不同设备的索引号
     media=disk|cdrom                   #定义介质类型为硬盘(disk)还是光盘(cdrom)
     snapshot=on|off                    #指定当前硬盘设备是否支持快照功能
     cache=writethrough|writeback|none|unsafe    #定义如何使用物理机缓存来访问块数据
     format=format                    #指定映像文件的格式, 具体格式可参见qemu-img命令

    Display options  #显示选项用于定义虚拟机启动后的显示接口相关类型及属性等

    -nographic                     #默认情况下, qemu使用SDL来显示VGA输出; 而此选项用于禁止图形接口, 此时, qemu类似一个简单的命令行程序, 其仿真串口被将被重定向到控制台
    -curses                        #禁止图形接口, 并使用curses/ncurses作为交互接口
    -alt-grab                      #使用Ctrl+Alt+shift组合键释放鼠标
    -ctrl-grab                     #使用右Ctrl键释放鼠标
    -sdl                          #启用SDL
    -spice option[,option[,...]]           #启用spice远程桌面协议, 具体请参照qemu-kvm帮助手册
    -vga [std|cirrus|vmware|qxl|xenfb|none]     #指定要仿真的VGA接口类型
    -vnc display                  #默认情况下, qemu使用SDL显示VGA输出; 使用该选项, 可以让qemu监听在VNC上, 并将VGA输出重定向至VNC会话; 使用此选项, 必须使用-k选项指定键盘布局类型

    Network options  #简单介绍几种,更多可参考官方手册

    NIC
    -net nic[,vlan=n][,macaddr=mac][,model=type][,name=str][,addr=str][,vectors=v]
    # 创建一个新的网卡设备并连接至vlan n中;
    # pc架构上默认的nic为e1000, macaddr用于为其指定MAC地址
    # 使用"qemu-kvm -net nic,model=?"来获取当前平台支持的类型
    # name用于指定一个在监控时显示的网卡设备名称
    
    
    TAP
    -net tap[,vlan=n][,name=name][,fd=h][,ifname=name][,script=file][downscript=dfile]
    #通过物理机的tap网络接口连接至vlan n中, 
    #使用script=file指定脚本(默认为/etc/qemu-ifup)来配置当前网络接口
    #使用downscript=dfile指定脚本(默认为/etc/qemu-ifdown)来撤销接口配置
    #使用script=no和downscript=no可分别用来禁止执行脚本
    
    
    USER
    -net user[,option][,option][,...]    #在用户模式配置网络栈, 其不依赖于管理权限
    子选项介绍:
     vlan=n                   #连接之vlan n, 默认n=0
     name=str                  #指定接口的显示名称, 常用于监控模式中
     net=addr[/mask]               #设定GuestOS可见的IP网络, 默认为192.168.1.0/24
     host=addr                  #指定GuestOS中看到的Host的IP地址, 默认为指定网络中的第二个, 即x.x.x.x
     dhcpstart=addr              #指定DHCP服务器地址池中16个地址的起始IP, 默认为第16个至第31个, 即x.x.x.x ~ x.x.x.x
     dns=addr                   #指定GuestOS可见的dns服务器地址, 默认为GuestOS网络中第三个地址, 即x.x.x.x

    7.1 安装qemu-kvm

    yum -y install qemu-kvm

    7.2 查看文件位置

    rpm -ql qemu-kvm | grep qemu-kvm | head -2

    7.3 创建软连接到/usr/bin目录下

    ln -s /usr/libexec/qemu-kvm /usr/bin

     7.4 安装centos6.10虚机

    qemu-kvm -m 128 -smp 1 -name "test" -hda /kvm/images/CentOS-6.10.iso            #内存128M  CPU 1块 

    若此步报错,应该是主机未开启虚拟化,在bios中配置虚拟化即可

    7.5 安装VNC客户端

    yum -y install tigervnc

    7.6 切换图形管理界面连接VNC

    startx &
    #打开终端命令台
    vncviewer :5900

    8.virt-install创建虚拟机并安装

    8.1 创建磁盘

    qemu-img create -f qcow2 /kvm/images/CentOS-6.10.qcow2 5G   #建一个格式为qcow2的磁盘

    8.2 安装系统

    virt-install 
    --name=centos6 
    --disk path=/kvm/images/CentOS-6.10.qcow2 
    --vcpus=1 --ram=1024 
    --cdrom=/kvm/images/CentOS-6.10.iso 
    --network network=default 
    --graphics vnc,listen=0.0.0.0 
    --os-type=linux 
    --os-variant=rhel6

    切换至图形界面可看到如下图

  • 相关阅读:
    js字符串函数
    js流程语句
    js数组
    js变量
    js运算符
    Time.deltaTime和Time.realtimeSinceStartup
    Prefabs实例化 ResourceMgr
    SLua
    判断物体是否在摄像机内
    [Unity3D]引擎崩溃、异常、警告、BUG与提示总结及解决方法
  • 原文地址:https://www.cnblogs.com/Huang-Niu/p/11376968.html
Copyright © 2020-2023  润新知