虚拟化简单讲就是将一台物理计算机虚拟成多台逻辑计算机,每个逻辑虚拟机里面可以运行不同的操作系统,相互不受影响,但都是占用物理计算机的实体资源,比说内存、网络、存储等。最常见的虚拟化软件就是VMware,在windos上广泛运用。
在虚拟化不像今天成熟之前,虚拟化分为全虚拟化和半虚拟化。
全虚拟化需要经过一个指令翻译叫做VMM(虚拟机管理程序)。因为代码运行都有几个级别,系统内核为最高ring0,应用程序为最低ring3。虚拟化里面的系统执行的本来应该是ring0,但是它对真实的系统来说只是一个应用软件,执行的应该是ring3级别,所以就需要vmm来当翻译。这之前其实非常复杂,对性能有非常大的消耗,所以演变出来了半虚拟化。
半虚拟化就是让虚拟机知道自己是在虚拟机上跑的,工作在非ring0状态,它在物理机上执行的一些特权指令会修改成其他方式,但是这种技术需要修改内核。windows内核是私有的,修改不了,所以也可以说半虚拟化只支持linux。
再后来,cpu厂商入场,开始从根源cpu上支持虚拟化,这样指令不需要翻译也不需要修改内核。可以说现在主流都是建立在硬件上的全虚拟化,包括VM。
VMware系列:VMware workstation、VMware vsphere(适用于多台物理机集群)、VMware Fusion(mac)
Xen:开源的,半虚拟化
KVM:开源的基于linux内核的
Hyper-V:商业,属于微软
Openvz:开源的,基于linux,虚拟机和宿主机公用一个内核,轻量化。
VirtualBox:开源的,和VM类似,Sun公司开发。
KVM已经被redhat收购,变成了一个内核的块。它在linux系统里面以进程的形式出现,由标注的linux调度程序进行调度,这使得KVM能够使用内核的以有功能。KVM负责内核代码执行,用户代码则还需要QEMU-KVM软件,QEMU-KVM是一个纯软件,可以虚拟所有的硬件,磁盘、网络等设备都是QEMU-KVM模拟出来的。KVM和QEMU-KVM通信是通过/dev/kvm实现。libvirt是涌来管理KVM虚拟机的API,其命令为virsh。
我们先在windows上用VM虚拟化一个centos7,然后在虚拟机上用kvm虚拟化。
当然如果你有服务器可以只要配置足够,就可以直接在linux上用KVM虚拟化。
配置好之后开机。
先检查内存、查看cpu核数、检查是否支持虚拟化:
free -h
cat /proc/cpuinfo
grep -Ei 'vmx|svm' /proc/cpuinfo //如果有相应信息输出,则表示可以
查看防火墙,selinux,清空关闭掉:
iptables -F
getenforce
查看新增加磁盘名称,格式化:
ls /dev/sd*
可以不用分区直接格式化新磁盘:
mkfs.ext4 /dev/sdb
#查看有没有成功
blkid /dev/sdb
挂载新磁盘并开启启动:
mkdir /kvm_data
mount /dev/sdb /kvm_data/
vim /etc/fstab
#添加
/dev/sdb /kvm_data ext4 defaults 0 0
#查看新磁盘
df -h
安装kvm:
yum install -y virt-* libvirt bridge-utils qemu-img
配置桥接网络:
cd /etc/sysconfig/network-scripts/
cp ifcfg-ens33 ifcfg-br0
vim ifcfg-br0
#让虚拟机能够用到这个桥接地址,和br0建立连接,这样就可以直接使用你宿主机所在的网络
#删除原来的配置,添加下面的
TYPE=Bridge
BOOTPROTO=none
NAME=br0
DEVICE=br0
ONBOOT=yes
IPADDR=192.168.247.170
NETMASK=255.255.255.0
GATEWAY=192.168.247.2
DNS1=192.168.247.2
DNS2=8.8.8.8
#修改原来物理网卡的配置
vim ifcfg-ens33
#修改成
TYPE=Ethernet
BOOTPROTO=none
NAME=ens33
DEVICE=ens33
ONBOOT=yes
BRIDGE=br0
#重启network
systemctl restart network
#ifconfig查看是否有br0虚拟网卡
启动libvirt:
systemctl start libvirtd
#查看是否有libvirt进程
ps aux|grep libbir
查看桥接网络:
brctl show
bridge name bridge id STP enabled interfaces
br0 8000.000c2954a8f7 no ens33
virbr0 8000.525400890122 yes virbr0-nic
安装centos7,首先得有一个centos7的镜像,然后弄到虚拟机里面,用KVM安装,我windows上有,所以使用xshell自带的文件传输传到虚拟机里。
ls -l CentOS-7-x86_64-DVD-1810.iso
-rw-r--r-- 1 root root 4588568576 2月 9 11:22 CentOS-7-x86_64-DVD-1810.iso
#先虚拟出一个10G的磁盘
qemu-img create -f raw /kvm_data/ligenlinux.img 10G
#把源码移到/tmp下,没有权限读取root目录
mv /CentOS-7-x86_64-DVD-1810.iso /tmp//CentOS-7-x86_64-DVD-1810.iso
#命令行安装
virt-install --name=ligenlinux01 --memory=512,maxmemory=1024 --vcpus=1,maxvcpus=2 --os-type=linux --os-variant=rhel7 --location=/tmp/CentOS-7-x86_64-DVD-1810.iso --disk path=/kvm_data/ligenlinux.img,size=10 --bridge=br0 --graphics=none --console=pty,target_type=serial --extra-args="console=tty0 console=ttyS0"
#如果不想安装,想退出可以按ctrl+]