KVM

KVM

目前虚拟化产品

  • 仿真虚拟化(性能最低): VMware, Virtual Box, QEMU(能够模拟整台计算机, 效率很低)
  • 半虚拟化(性能中): Xen(需要修改内核, 在rhel6中使用rpm -ivh kernel-xen-xxx.rpm安装一个新的内核, 注意: Xen只支持和物理机系统一样的操作系统, 因为他是半虚拟化的)
  • 全虚拟化(硬件虚拟化, 性能最高): KVM(Kernel-based Virtual Machine, 它摆脱了Xen不能运行Windows的缺点, KVM可以运行Windows, 要想使用KVM, CPU需要支持Intel VT 或者 AMD V技术), docker

查看是否只是KVM

  • cat /proc/cpuinfo | grep vmx
  • cat /proc/cpuinfo | grep svm

KVM提出的新模式

  • 在传统的Linux操作系统上有用户模式与内核模式, 在KVM中增加了第三种模式: 客户模式(有自己的内核和用户模式)

安装KVM

  • yum install -y qemu-kvm libvirt libguestfs-tools virt-install virt-manager libvirt-python tigervnc virt-viewer

1. qemu-kvm: kvm主程序, KVM虚拟化模块
2. virt-manager: KVM图形管理工具
3. libvirt: 虚拟化服务
4. libguestfs-tools: 虚拟机的系统管理工具
5. virt-install: 安装虚拟机的使用工具
6. libvirt-python: Python调用libvirt虚拟化服务的API接口库文件
7. tigervnc: VNC远程桌面客户端
8. virt-viewer: KVM启动图形界面需要
  • systemctl start libvirtd # 启动服务
  • ls mod | grep kvm # 查看是否加载了KVM模块
  • virt-manager # 运行KVM管理器

配置桥接

  • 配置KVM网络桥接br0, br0就相当于一个二层交换机, 我们需要将eth0物理网卡添加到br0上, 所有计算机的虚拟网卡都在br0上, br0上又有eth0物理网卡, 就可以通过eth0联网了

    • yum install bridge-utils -y
    • cd /etc/sysconfig/network-scripts
    • cp ifconfig-ens33 ifconfig-ens33.bak
    • 编辑ifconfig-ens33
      • 去掉与IPV4有关的条目: IPADDR, NETMASK, GATEWAY, DNS, 为什么? -> 因为创建了br0设备, 计算机就是通过br0通信的, 需要将ens33上的IPV4地址放到br0上, 接下来只要在ens33中告诉计算机ens33的被添加到br0上即可
      • 添加BRIDGE="br0"告诉计算机(bridge-utils工具)ens33被添加到了br0上, IPV4的地址到br0上找即可
    • 创建ifconfig-br0
    
    DEVICE="br0"
    NM_CONTROLLED="yes"
    ONBOOT="yes"
    TYPE="Bridge"
    BOOTPROTO=none
    IPADDR=ens33的ip
    NETMASK=ens33的掩码
    GATEWAY=ens33的网关
    DNS1=ens33指定的DNS
    
    • 重启网络服务: service network restart, 不要使用systemctl restart network, 可能会有问题, 以后凡是与network有关的使用service
    • ifconfig查看是否新添加了br0接口, 发现ens33的ip跑到了br0接口上, br0与ens33的mac地址是一样的, 因为br0底层还是走ens33物理网卡

KVM文件

  1. KVM会把创建的虚拟机安装到/var/lib/libvirt/images目录下
  2. 配置文件在/etc/libvirt/qemu

工具

  • virsh

    • list: 查看当前启动了几个虚拟机
    • start: 启动虚拟机
    • shutdown: 关闭虚拟机?
      • CentOS6上shutdown无效解决方案
        • 在安装好的KVM的Linux虚拟机中安装并启动acpid服务, virsh shutdown命令发送acpi指令来控制虚拟机的电源, 而KVM虚拟机最小化安装的CentOS6默认是没有安装acpi服务的, CentOS7的最小化安装是有的
        • 在KVM虚拟机中的CentOS6中配置acpid的yum源, yum install acpid -y
    • autostart: 开机自启动
    • autostart --disable: 取消开机自动启动
    • suspend KVMName: 挂起一个虚拟机
    • resume KVMName: 恢复一个挂起的虚拟机
    • snapshot-create-as KVM虚拟机名 快照名:
      • 在开机的状态下创建快照会慢很多, 因为需要把内存中的内容写到磁盘中, 记录虚拟机当前的状态; 而关机状态下创建快照没有这个过程, 会很快
    • snapshot-list KVM虚拟名: 列出KVM虚拟机有什么快照
    • snapshot-current KVM虚拟机: 查看当前快照
    • snapshot-revert KVMName snapshotName: 恢复快照
    • domstate KVMName: 虚拟机状态
    • snapshot-delete KVMName snapshotName: 删除
  • virt-clone -> KVM虚拟机克隆

    • -n: new

    • -o: old

    • -f: path

    • virt-clone -o oldFileName -n newFileName -f newFileNamePath

    • 注意:

      • 克隆出来的虚拟机的mac地址与被克隆的是不同的, 但是里面的OS的mac地址两者是一样的, 这就导致了克隆出来的虚拟机上的mac地址与os的mac不一致, 在克隆之后需要修改os中的mac地址; 但是在CentOS7下不需要

虚拟机镜像

  • raw格式: 可以很容易从raw转为其他格式, raw在格式转换时作为中间格式, raw就是dd命令产生的
  • qcow2格式: 支持快照, 支持zlib磁盘压缩, 支持AES加密, 支持创建image镜像
  • vmdk格式: VMware使用的
  • qemu-img info filepath # 查看文件格式

虚拟机镜像格式的装换

  • qemu-img convert -f [pat] -O [pat] path1 path2

    • -f: 源文件格式
    • -O: 目标文件格式
    • path1是源文件, path2是目标文件
    • qcow2与vmdk可以直接装换
  • 修改虚拟机配置文件

    • virsh edit KVMName, 不要使用vim直接编辑/var/lib/libvirt/qemu目录下的配置文件, 如果使用vim修改了, 还需要重启服务

字符安装虚拟机

  • virt-install

    • -n NAME
    • -r RAM
    • --vcpus=VCPUS
    • --disk path=, size=几个G
    • -c CDROM
    • --network bridge=br0
    • --graphics vnc
    • --location=yum源, 可选
    • -x "ks=url", 执行ks.cfg文件, 与--location配置无人值守安装
  • 使用virt-viewer或者vncviwer 127.0.0.1连接

posted @ 2019-01-31 20:04  gogogo11  阅读(353)  评论(0)    收藏  举报