zoukankan      html  css  js  c++  java
  • KVM

    什么是KVM

    KVM是英文Kernel-based Virtual Machine的简称,是基于硬件辅助的开源虚拟化解决方法,其优点如下:

    • 开源免费
    • 架构简单
    • 性能卓越
    • 社区活跃

    KVM架构

    基本上又两大方便组成,KVM模块以及QENMU-KVM

    模块:kvm.ko,kvm_intel.ko, kvm_amd.ko

    qemu-kvm:通过修改qemu代码而得出的专门为管理和创建虚拟机的工具

    /dev/kvm:linux系统下kvm提供驱动接口

     

    硬件支持

    我这里用的是虚拟机,为了使cpu支持虚拟化勾选了"虚拟化Intel VT-x/EPT或AMD-V/RVI(V)"

    生产环境中我们使用的是真实物理服务器,一般是默认开启的,如果没有开启,则需要在BIOS中开启

    系统环境

    CentOS 7.2.1511

    生产环境当中,一般配置虚拟机和宿主机的网络为桥接模式

    我宿主机的物理网卡名称为eno33554984(VMnet1)可以看到我们上面还有一个NAT,那是我们专门用来上网的,真实服务器一张网卡就够了

    我们需要创建一个共享的桥接网络设备

    # vim /etc/sysconfig/network-scripts/ifcfg-eno33554984
    TYPE=Ethernet
    BOOTPROTO=none
    DEFROUTE=yes
    PEERDNS=yes
    PEERROUTES=yes
    NAME=eno33554984
    DEVICE=eno33554984
    ONBOOT=yes
    BRIDGE=br0
    
    # vim /etc/sysconfig/network-scripts/ifcfg-br0
    DEVICE=br0
    ONBOOT=yes
    TYPE=Bridge
    BOOTPROTO=static
    IPADDR=192.168.88.1
    PREFIX=24
    GATEWAY=192.168.88.254
    DNS1=114.114.114.114
    

    SSH连接192.168.88.1进入系统

    检查cpu是否支持虚拟机化,Intel支持的会带有vmx标志,AMD支持会带有svm标志

    # grep -E '(vmx|svm)' /proc/cpuinfo
    

    安装组件

    # yum install -y qemu-kvm qemu-kvm-tools virt-manager libvirt virt-install
    

    创建一个10G的硬盘(给虚拟机用)

    准备一个系统镜像

    创建虚拟机

    # mkdir /data/images
    # virt-install          #命令(详细用法  virt-install --help)
    --name CentOS7.1_88.100            #虚拟机名字
    --ram 1024  				   #分配内存大小
    --cdrom=/data/CentOS-7-x86_64-Minimal-1511.iso      #安装镜像
    --disk path=/data/images/CentOS7.1_88.100.img,size=8      #8G的存储文件,虚拟机的硬盘
    --network bridge=br0                                      #桥接到br0
    --graphics vnc,listen=0.0.0.0 --noautoconsole     #开启vnc
    

    查看正在运行的虚拟机

    我们可以发现开启了一个5900端口,我们可以使用VNC来连接这个端口,远程连接到虚拟机

    我们可以看到已经进入到安装界面

    按正常步骤安装,虚拟机只要分一个分区就可以了(阿里云也没有分交换分区,哈哈)

    安装完成后重启

    然而虚拟机并没有重启,只是关闭了

    我们回到宿主机使用virsh list并没有看到在运行的虚拟机

    这里我们可以使用virsh --list all查看所有的虚拟机,可以发现,它处于一个关闭状态

    开启虚拟机

    # virsh start CentOS7.1_88.100                    
    # virsh shutdown CentOS7.1_88.100     这是关闭的命令
    

    这样我们使用VNC就可以连接上去了,查看虚拟机网络

    配置eth0的ip为192.168.88.100

    重启虚拟机的网络服务

    然后我们就可以使用ssh远程192.168.88.100了

    当我创建第二台虚拟机,它的VNC连接端口是5901

    虚拟主机管理

    virsh undefine [主机名字]

    我们创建虚拟机的时候可以配置好cpu、 内存、硬盘的配置(安装前规划是最好的)

    然后,当我们创建好,配置已经无法满足需求了,我们可以编辑xml修改

    virsh edit [主机名字] 修改完配置需要重启虚拟机才能生效

    ---修改cpu---
    需求:最大支持4个cpu,当前为1个
    <vcpu placement='static'>1</vcpu>
    改为
    <vcpu placement='auto' current='1'>4</vcpu>
    重启动虚拟主机
    virsh shutdown [ 主机名字]
    virsh start [主机名字]
    这样我们就可以支持cpu的热添加(centos7才支持),不支持热减少
    当前我们的cpu只有1个,现在我们改为2个
    virsh setvcpus [主机名字] 2 --live
    然后我们可以在虚拟机中查看cpu有没有多出1 个,如果没有,我们需要把它激活生效
    # cat /sys/devices/system/cpu/cpu0/online   #1表示死激活状态
    1
    # cat /sys/devices/system/cpu/cpu0/online
    1
    
    ---修改内存--
    需求:最大支持3G内存,当前为1G内存
    <memory unit='KiB'>1048576</memory>
    <currentMemory unit='KiB'>1048576</currentMemory>
    改为
    <memory unit='KiB'>3048576</memory>
    <currentMemory unit='KiB'>1048576</currentMemory>
    重启虚拟机
    内存支持热添加和减少
    查看当前内存
    virsh qemu-monitor-command [主机名字] --hmp --cmd info balloon
    balloon: actual=1024
    改为800M
    virsh qemu-monitor-command [主机名字] --hmp --cmd balloon 800
    改大为2G
    virsh qemu-monitor-command [主机名字] --hmp --cmd balloon 2048
    

    使用存储池

    存储池是一个本地目录、本地存储设备、网络文件系统或块级联网存储,可以使用libvirt管理它们,并且可在其中创建和存储一个或多个虚拟机镜像。本地存储很简单,但可能不灵活且不支持企业虚拟化的最关键需求:实时迁移

    默认情况下,基于libvirt的命令使用虚拟化主机上的目录/va/lib/libvirt/images作为初始文件系统目录存储池

    使用virsh pool-create-as命令轻松创建一个新的存储池(我预先在88.2配置了nfs服务)

    第一个参数 (NFS-POOL) 指定新存储池的名称
    第二个参数指定所创建的存储池类型
    --source-host 选项的参数指定了通过 NFS 导出存储池目录的主机
    --source-path 选项的参数指定该主机上导出的目录的名称
    --target 选项的参数指定了访问存储池时所使用的本地挂载点

    创建新存储池后,它将virsh pool-list命令的输出中列出

    输出中,注意新存储池标记不会自动启动,表明系统重新启动后它不会自动启动,而且它没有持久化,表明在系统重新启动后绝对不会定义它。存储池仅在它们受其XML描述支持时才能持久化,该XML描述位于目录/etc/libvirt/storage中。XML存储池描述文件名与它们相关联的存储池名称相同,但是扩展名是.xml.

    要为手动定义的存储池创建xml描述文件,可以使用virsh pool-dumpxml命令指定一个池名称,将其XML描述转储为一个最终参数。此命令写入到标准输出,所以需要将它的输出重定向到合适的文件中。例如,以下命令将之前创建的NFS-POOL存储池创建正确的XML描述文件

    即使将存储池持久化后,该池也不会标记为在重新启动虚拟化主机时自动启动。可使用virsh pool-autostart命令后跟一个存储池名称来将存储池设置为自动启动

    将存储池标记为自动启动,意味着存储池将在虚拟化主机重新启动时可用。在技术上,它意味着/etc/libvirt/storage/autostart目录包含该存储池xml描述的一个符号链接

    创建存储池后,可在该池内创建一个或多个虚拟机

    每次都报这种错误

    后来改了下nfs的配置

    然后成功创建了虚拟机

  • 相关阅读:
    Selenium Webdriver元素定位
    配置java环境变量
    maven+eclpse+jmeter+jenkis
    编译原理三大书 龙书 虎书 鲸书
    python 中type和object的关系
    二叉树的题目
    二叉树相关
    综合
    http 介绍
    python 函数星号参数说明
  • 原文地址:https://www.cnblogs.com/sellsa/p/7792065.html
Copyright © 2011-2022 走看看