HOST准备

  • 宿主机centos 7安装:

    • 物理机安装:BIOS开启虚拟化支持,详情查询机器的CPU和主板BIOS操作方式。然后在物理机安装centOS7。

    • 也可以使用嵌套虚拟化(nested virtualization):在虚拟机中安装centOS 7作为宿主机。此时需要使用的第一层虚拟化软件支持虚拟化嵌套,本文后续测试是在mac OS X 安装VMware Fusion Pro进行的,要在VMware Fusion Pro中的虚拟机中使用kvm,需要在虚拟机配置中的cpu内存配置中开启虚拟化支持。

      image-20200428093255034

    • 可以选择将图形界面一起安装,方便后面用GUI管理虚拟机。

    • 后续操作,命令行均以root身份进行;图形操作普通用户登录进行。

  • 确认虚拟化支持:cat /proc/cpuinfo | egrep 'vmx|svm',有返回说明已经支持虚拟化。

  • 关闭selinux:在/etc/sysconfig/selinux中设置SELinux=disabled

  • 关闭防火墙:systemctl stop firewalld.service禁止防火墙自启动: systemctl disable firewalld.service

宿主机安装KVM

  1. 确认宿主机正常连接外网,yum可以正常使用

  2. 安装核心组件

    yum -y install qemu-kvm libvirt virt-install
    reboot
  3. 验证安装情况

    lsmod | grep kvm
    # 应看到类似下面的结果,说明已经加载了kvm相关模块
    #kvm_intel             162153  0
    #kvm                   525259  1 kvm_intel
  4. 启动并设置开启自启

    systemctl start libvirtd
    systemctl enable libvirtd
    systemctl status libvirtd

网络配置

NAT方式

  • 默认kvm在宿主机上已经自动配置了NAT网络,guest可以比较轻松地启用NAT获取IP、DNS、网关等,正常访问外网。

  • 在宿主机上列出网络virsh net-list,确认default网络已经正常启动

    image-20200424105030552

  • 在虚拟机中编辑/etc/sysconfig/network-scripts/ifcfg-eth0,将onboot修改为yes,重启后虚拟机即可正常使用NAT访问网络。

  • NAT网络中外部无法直接访问虚拟机,如果虚拟机作为服务器端使用,则应该使用下面的桥接方式联网。

桥接方式

  • 配置桥接有两种方式:使用brctl命令或直接编辑interface文件,本文将直接编辑interface文件。

  • 由于有冲突,需要关闭并彻底禁用network manager:systemctl stop NetworkManager禁用自启动systemctl disable NetworkManager

  • 新建桥接网络接口/etc/sysconfig/network-scripts/ifcfg-br0,默认使用dhcp自动获取ip,宿主机如果需要静态ip,将第7行注释,后面取消注释即可。

    # 注意Bridge首字母必须大写
    TYPE=Bridge
    NAME=br0
    DEVICE=br0
    ONBOOT=yes
    
    # 使用dhcp自动获取ip
    BOOTPROTO=dhcp
    
    # 或者设置静态ip
    #BOOTPROTO=static
    #IPADDR=172.16.189.11 #静态IP
    #GATEWAY=172.16.189.2 #默认网关
    #NETMASK=255.255.255.0 #子网掩码
    #DNS1=172.16.189.2 #DNS 配置
  • 修改默认网络接口/etc/sysconfig/network-scripts/ens33(ens33命名根据硬件不同可能改变),增加将其桥接到br0的配置。

    # 以下是安装完centos后默认的网络配置
    TYPE=Ethernet
    PROXY_METHOD=none
    BROWSER_ONLY=no
    BOOTPROTO=dhcp
    DEFROUTE=yes
    IPV4_FAILURE_FATAL=no
    IPV6INIT=yes
    IPV6_AUTOCONF=yes
    IPV6_DEFROUTE=yes
    IPV6_FAILURE_FATAL=no
    IPV6_ADDR_GEN_MODE=stable-privacy
    NAME=ens33
    UUID=8b0d0674-d09f-4070-a9b2-6be2e4676d7a
    DEVICE=ens33
    ONBOOT=yes
    IPV6_PRIVACY=no
    
    # 上面无需修改,增加下面这行即可
    BRIDGE=br0
  • 重启网络服务service network restart或者直接重启机器reboot,然后用ifconfig验证br0成功获取正确的ip地址,且网络访问正常
    image-20200428135442668

KVM虚拟机新建&安装操作系统

  • 参考其他文档建议修改语言设置为英文,避免安装过程报错:修改/etc/locale.confLANG="en_US.UTF-8"

  • 准备镜像文件和虚拟磁盘目录

    • guest同样安装centos7,将iso镜像放到/home/CentOS-7-x86_64-DVD-1908.iso,设置权限644和归属qemu:qemu
    • 创建/home/vms目录用于存放虚拟机的虚拟磁盘
  • 命令行下开始安装

    # location即为iso文件的路径,disk的path即为虚拟机磁盘的路径
    virt-install \
    --name=centos1 \
    --vcpus=2 \
    --memory=1024 \
    --location=/home/vms/CentOS-7-x86_64-DVD-2003.iso \
    --disk path=/home/vms/centos1.qcow2,size=8,format=qcow2 \
    --graphics none \
    --extra-args='console=ttyS0' \
    --force
    
    # 注意:常见错误为iso文件、磁盘文件的权限问题,如有相关报错,调整目录位置或放宽权限即可解决。
  • 安装配置

    像正常安装操作系统一样,接下来会进入如下界面,需要对安装细节进行手工配置,根据提示配置即可。感叹号标记的需要手工配置的。

    Installation
    
     1) [x] Language settings                 2) [!] Timezone settings
            (English (United States))                (Timezone is not set.)
     3) [!] Installation source               4) [!] Software selection
            (Processing...)                          (Processing...)
     5) [!] Installation Destination          6) [x] Kdump
            (No disks selected)                      (Kdump is enabled)
     7) [ ] Network configuration             8) [!] Root password
            (Not connected)                          (Password is not set.)
     9) [!] User creation
            (No user will be created)
      Please make your choice from above ['q' to quit | 'b' to begin installation |
      'r' to refresh]:
  • 完成安装,会启动并进入guest操作系统,下面是熟悉的centos登陆界面。

    image-20200424004351644

  • 在宿主机virsh list列出刚安装的虚拟机

    image-20200424004519046

  • 可以在宿主机使用virsh命令对虚拟机进行各种管理操作,比如以下命令

    virsh list --all           # 查看所有运行和没有运行的虚拟机
    virsh list                 # 查看在运行的虚拟机
    virsh dumpxml vm-name      # 查看kvm虚拟机配置文件
    virsh start vm-name        # 启动kvm虚拟机
    virsh shutdown vm-name     # 正常关机
    
    virsh destroy vm-name      # 非正常关机,强制关闭虚拟机(相当于物理机直接拔掉电源)
    virsh undefine vm-name     # 删除vm的配置文件
    
    ls /etc/libvirt/qemu
    # 查看删除结果,Centos-6.6的配置文件被删除,但磁盘文件不会被删除
    
    virsh define file-name.xml # 根据配置文件定义虚拟机
    virsh suspend vm-name      # 挂起,终止
    virsh resumed vm-name      # 恢复被挂起的虚拟机
    virsh autostart vm-name    # 开机自启动vm
    virsh console <虚拟机名称>   # 连接虚拟机

导出磁盘镜像

  • 如果磁盘使用较少,操作历史不多,可以直接使用该命令压缩导出磁盘

    # 使用该方法可以压缩磁盘体积
    qemu-img convert -c -O qcow2 old.qcow2 new.qcow2
  • 如果磁盘使用时间较长,操作历史较多,可以先用下面的方法对磁盘延迟置零的部分手工置零。然后再用上面的命令导出,可减小导出的体积

    #创建一个全0的大文件,占满所有的剩余磁盘空间,需要很久时间
    dd if=/dev/zero of=/null.dat   
    #删除这个文件
    rm -f /null.dat

导入外部虚拟机

实验逻辑:基于已有的centos1虚拟机,复制其qcow2磁盘和虚拟机配置文件,对虚拟机配置稍作修改后模拟为新的虚拟机centos2导入。

  1. 准备磁盘文件和虚拟机配置文件

    cp centos1.qcow2 centos2.qcow2
    # 将centos1的虚拟机配置导出为xml文件作为模板
    virsh dumpxml centos1 > 2.xml
  2. 修改2.xml避免和centos1重复,主要修改名称,UUID,磁盘路径和网卡MAC地址。其中 UUID 在 Linux 下可以使用 uuidgen 命令生成。

    名称及uuid:

    image-20200424111719839

    磁盘路径:

    image-20200424111808034

    网卡MAC地址

    image-20200424111854818

  3. 导入虚拟机virsh define 2.xml

  4. 查看&启动

    image-20200424112013081

    image-20200424112051823

图形化管理

  • 安装组件yum install -y virt-manager

  • 启动组件:在桌面端登陆后可以看到虚拟系统管理器,启动即可进行各种可视化操作。或者在终端运行virt-manager亦可。

  • 图形化管理方式和常用的vmware等桌面端软件类似,除基本的启动停止,虚拟机配置外,也支持克隆、导入、快照等功能。

参考

文章目录