了解虚拟化软件及架构

了解虚拟化软件及架构

Administrator 1380 2020-04-26
  1. 虚拟化介绍
  2. KVM介绍及安装

虚拟化介绍

  • VMware Workstation就属于虚拟化,虚拟化就是将一台物理计算机虚拟成多台逻辑计算机,每个逻辑计算机里可以运行不同的操作系统,互相不影响,这样就可以充分利用硬件资源;

  • 悉尼话技术分为全虚拟化和半虚拟化

  • 早期的CPU硬件不支持虚拟化,虚拟机上的操作系统(guest os)想要使用cpu资源,需要通过VMM(Hypervisor)来翻译指令,这个过程比较耗费资源,这种虚拟化技术叫做全虚拟化(VMware Workstation);

  • 半虚拟化技术通过修改guest os内核,让guest os可以直接使用CPU资源,而不需要翻译指令,从而节省资源,但修改内核比较鸡肋(XEN);

  • 后续CPU厂商直接支持虚拟化,不需要通过VMM翻译指令,无所谓半虚拟化和全虚拟化;

常见虚拟化软件

  • 常见的虚拟化软件有VMware系列,包括VMware workstation、VMware vsphere(VMware esxi)、VMware Fusion(Mac);

  • Xen,开源,半虚拟化软件,同时还有基于Xen的由Ctirx开发的商业软件XenServer;

  • KVM,基于linux内核模块的开源虚拟化软件;

  • Hyper-V,微软开发的虚拟化软件;

  • Openvz开源的基于linux虚拟机软件,虚拟机和宿主机共用一个内核;

  • VirtualBox,由Sun公司开发的开源虚拟化软件。

虚拟化架构

  • 虚拟化架构主要分为以下两种:

    虚拟化架构

  • Type-I就是VMware vsphere和ProxmoxVE的架构,直接在硬件上安装虚拟化软件,在虚拟化软件中创建虚拟机;

  • 而第二种则是常用的VMware Workstation的架构;

KVM

KVM介绍

  • KVM是以色列公司Qumranet开发的,该公司在2008年9月被RedHat公司收购;

  • KVM是Linux内核的一个模块,它将Linux内核变成了一个Hypervisor,同时KVM也是完全开源的,RedHat基于KVM的虚拟化解决方案叫做RHEV;

  • KVM在Linux系统中以进程的形式出现,由标准的Linux调度程序进行调度,这使得KVM能够使用Linux内核已有的功能;

  • 只有一个KVM内核模块还不能实现虚拟化的全部功能,就比如操作系统只有内核还不能成为一个完整的操作系统一样;

  • QEMU是一个开源的虚拟化软件,可以虚拟化所有的硬件,性能不强,而KVM基于QEMU开发了一个能够运行在用户空间的工具QEMU-KVM;

  • 磁盘、网络设备等硬件都通过QEMU-KVM这个工具模拟出来的,KVM和QEMU-KVM通信时用过/dev/kvm实现的;

  • 而libvirt是用来管理KVM虚拟机的API,其命令为virsh。

  • KVM架构如下:

    KVM架构

安装KVM

  • 在Centos上安装KVM,前提是CPU支持虚拟化;这里我们在VMware中使用Centos7虚拟机来进行实验;

  • 首先打开VMware的Centos虚拟机配置,在处理器配置中,勾选两个虚拟化引擎选项,同时将CPU调整为4核,内存调整为4G,增加一块50G的硬盘,保存后开启虚拟机:

    VM虚拟机配置

  • 进入Centos系统后,关闭iptables或firewalld,关闭selinux,格式化新添加的磁盘,并挂在到/kvm_data:

    [root@centos_1 ~]# parted /dev/sdb
    GNU Parted 3.1
    使用 /dev/sdb
    Welcome to GNU Parted! Type 'help' to view a list of commands.
    (parted) print
    错误: /dev/sdb: unrecognised disk label
    Model: VMware, VMware Virtual S (scsi)
    Disk /dev/sdb: 53.7GB
    Sector size (logical/physical): 512B/512B
    Partition Table: unknown
    Disk Flags:
    (parted) mklabel gpt
    (parted) mkpart primary 1M -1
    (parted) print
    Model: VMware, VMware Virtual S (scsi)
    Disk /dev/sdb: 53.7GB
    Sector size (logical/physical): 512B/512B
    Partition Table: gpt
    Disk Flags:
    
    Number  Start   End     Size    File system  Name     标志
     1      1049kB  53.7GB  53.7GB               primary
    
    (parted) q
    信息: You may need to update /etc/fstab.
    
    [root@centos_1 ~]# mkfs.ext4 /dev/sdb1
    mke2fs 1.42.9 (28-Dec-2013)
    文件系统标签=
    OS type: Linux
    块大小=4096 (log=2)
    分块大小=4096 (log=2)
    Stride=0 blocks, Stripe width=0 blocks
    3276800 inodes, 13106688 blocks
    655334 blocks (5.00%) reserved for the super user
    第一个数据块=0
    Maximum filesystem blocks=2162163712
    400 block groups
    32768 blocks per group, 32768 fragments per group
    8192 inodes per group
    Superblock backups stored on blocks:
            32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
            4096000, 7962624, 11239424
    
    Allocating group tables: 完成
    正在写入inode表: 完成
    Creating journal (32768 blocks): 完成
    Writing superblocks and filesystem accounting information: 完成
    
    [root@centos_1 ~]# mkdir /kvm_data
    [root@centos_1 ~]# mount /dev/sdb1 /kvm_data/
    [root@centos_1 ~]# df -h
    文件系统                 容量  已用  可用 已用% 挂载点
    /dev/mapper/centos-root   18G   14G  4.7G   75% /
    devtmpfs                 1.9G     0  1.9G    0% /dev
    tmpfs                    1.9G     0  1.9G    0% /dev/shm
    tmpfs                    1.9G   12M  1.9G    1% /run
    tmpfs                    1.9G     0  1.9G    0% /sys/fs/cgroup
    /dev/sda1               1014M  142M  873M   14% /boot
    overlay                   18G   14G  4.7G   75% /var/lib/docker/overlay/dd6cabfd1a279a887fbac0340172da32848a4e3bed64110483965523f28b935e/merged
    shm                       64M  1.0M   63M    2% /var/lib/docker/containers/36967617a5e170374d7ff2e72858fccf0df8c996d1ccfa77ed9f5f19f2846c3a/shm
    tmpfs                    378M     0  378M    0% /run/user/0
    /dev/sdb1                 50G   53M   47G    1% /kvm_data
    
    
  • 然后下载或上传centos7的镜像文件到系统中,并检查cpu参数是否支持虚拟化:

    [root@centos_1 ~]# grep -Ei 'vmx|svm' /proc/cpuinfo
    flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 syscall nx mmxext fxsr_opt pdpe1gb rdtscp lm constant_tsc art rep_good nopl tsc_reliable nonstop_tsc extd_apicid eagerfpu pni pclmulqdq ssse3 fma cx16 sse4_1 sse4_2 x2apic movbe popcnt aes xsave avx f16c rdrand hypervisor lahf_lm svm extapic cr8_legacy abm sse4a misalignsse 3dnowprefetch osvw perfctr_core retpoline_amd vmmcall fsgsbase bmi1 avx2 smep bmi2 rdseed adx smap clflushopt sha_ni xsaveopt xsavec clzero ibpb arat npt svm_lock nrip_save vmcb_clean flushbyasid decodeassists overflow_recov succor
    flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 syscall nx mmxext fxsr_opt pdpe1gb rdtscp lm constant_tsc art rep_good nopl tsc_reliable nonstop_tsc extd_apicid eagerfpu pni pclmulqdq ssse3 fma cx16 sse4_1 sse4_2 x2apic movbe popcnt aes xsave avx f16c rdrand hypervisor lahf_lm svm extapic cr8_legacy abm sse4a misalignsse 3dnowprefetch osvw perfctr_core retpoline_amd vmmcall fsgsbase bmi1 avx2 smep bmi2 rdseed adx smap clflushopt sha_ni xsaveopt xsavec clzero ibpb arat npt svm_lock nrip_save vmcb_clean flushbyasid decodeassists overflow_recov succor
    flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 syscall nx mmxext fxsr_opt pdpe1gb rdtscp lm constant_tsc art rep_good nopl tsc_reliable nonstop_tsc extd_apicid eagerfpu pni pclmulqdq ssse3 fma cx16 sse4_1 sse4_2 x2apic movbe popcnt aes xsave avx f16c rdrand hypervisor lahf_lm svm extapic cr8_legacy abm sse4a misalignsse 3dnowprefetch osvw perfctr_core retpoline_amd vmmcall fsgsbase bmi1 avx2 smep bmi2 rdseed adx smap clflushopt sha_ni xsaveopt xsavec clzero ibpb arat npt svm_lock nrip_save vmcb_clean flushbyasid decodeassists overflow_recov succor
    flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 syscall nx mmxext fxsr_opt pdpe1gb rdtscp lm constant_tsc art rep_good nopl tsc_reliable nonstop_tsc extd_apicid eagerfpu pni pclmulqdq ssse3 fma cx16 sse4_1 sse4_2 x2apic movbe popcnt aes xsave avx f16c rdrand hypervisor lahf_lm svm extapic cr8_legacy abm sse4a misalignsse 3dnowprefetch osvw perfctr_core retpoline_amd vmmcall fsgsbase bmi1 avx2 smep bmi2 rdseed adx smap clflushopt sha_ni xsaveopt xsavec clzero ibpb arat npt svm_lock nrip_save vmcb_clean flushbyasid decodeassists overflow_recov succor
    
    
  • 接着安装kvm,执行命令如下:

    yum install -y virt-* libvirt bridge-utils qemu-img