KVM虚拟化(一)创建虚拟机

一、虚拟化分类

虚拟化分成两类,全虚拟化和半虚拟化。

半虚拟化,Hypervisor程序部署在物理机上,如:Xen,VMWare ESXI。

全虚拟化,Hypervisor 作为OS 上的一个程序模块运行,并对管理虚拟机进行管理,如:kvm、VirtualBox、VMWare Workstation。

 

KVM虚拟化(一)创建虚拟机

 

二、KVM

KVM,Kernel-Based Virtual Machine,基于Linux 内核实现的虚拟化技术。目前x86平台上最热门运用最广泛的虚拟化方案。

一台虚拟机的主要构成部分包括:cpu、memory、disk和network。其中:

  •  Kvm负责CPU和内存的虚拟化。
  • Qemu负责磁盘、网络等IO的虚拟化。

三、Libvirt

Libvirt,kvm的管理工具,包含三个部分:

  •  libvirtd是服务程序,接收和处理API请求
  •  API库使得其他人可以开发基于Libvirt的高级工具
  •  virsh命令管理工具

四、创建一台虚拟机

1、服务器信息

# uname -r
3.10.0-1062.12.1.el7.x86_64
# more /etc/redhat-release 
CentOS Linux release 7.7.1908 (Core)
# lsmod |grep kvm
kvm_intel            188688  42 
kvm                  636883  1 kvm_intel
irqbypass             13503  16 kvm
# grep -E '(vmx|svm)' /proc/cpuinfo   //查看CPU是否支持虚拟化,能过滤到信息代表支持虚拟化

2、安装kvm相关包

# yum install -y http://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-5.noarch.rpm
# yum install qemu-kvm qemu-kvm-tools virt-manager libvirt virt-install -y
# systemctl enable libvirtd.service
# systemctl start libvirtd.service 
# systemctl status libvirtd.service

3、  创建虚拟机

# wget http://mirrors.aliyun.com/centos/7.8.2003/isos/x86_64/CentOS-7-x86_64-Minimal-2003.iso
# qemu-img create -f raw /data/test/centos7.raw 20g //创建虚拟机磁盘
# virt-install --virt-type kvm --name centos7 --ram 4096 \
--cdrom=/data/test/CentOS-7-x86_64-Minimal-2003.iso \
--disk path=/data/test/centos7.raw --network network=default \
--graphics vnc,listen=0.0.0.0 -noautoconsole

使用vnc客户端访问宿主机的5900端口

然后就跟我们平常安装操作一样去操作就可以了

这里有一个优化点,就是虚拟机的磁盘在宿主机上本质就是一个磁盘文件,所以没必要做太多的分区,一般只给一个根分区就可以了。

如果制作的centos7的镜像,一般会做如下的设置

1)为了标准化,设置网络接口的名称为eth0

 

KVM虚拟化(一)创建虚拟机

 

在后面输入net.ifname=0 biosdevname=0,然后输入enter

2)只创建一个/分区

KVM虚拟化(一)创建虚拟机

 

安装完毕,可以看到dhcp分配到的IP地址是192.168.122.55,也可以访问到互联网

KVM虚拟化(一)创建虚拟机

 

五、虚拟机访问互联网

默认网络虚拟机是如何访问互联网的?

Kvm默认会创建一个叫virbr0的网桥,其作用是为连接其上的虚拟机网卡提供nat访问外网的功能。

# brctl show
virbr0         8000.525400375ff1       yes             virbr0-nic
                                                       vnet0
# virsh domiflist oautoconsole
Interface Type       Source     Model      MAC
-------------------------------------------------------
vnet0     network    default    virtio     52:54:00:a0:a4:3f
# ps -ef|grep dnsmasq
root      19041 106421  0 10:51 pts/9    00:00:00 grep --color=auto dnsmasq
nobody  112903      1  0 Sep02 ?        00:00:00 /usr/sbin/dnsmasq --conf-file=/var/lib/libvirt/dnsmasq/defau
root     112904 112903  0 Sep02 ?        00:00:00 /usr/sbin/dnsmasq --conf-file=/var/lib/libvirt/dnsmasq/defau
# more /var/lib/libvirt/dnsmasq/default.conf
……
interface=virbr0
dhcp-range=192.168.122.2,192.168.122.254
……
# more /var/lib/libvirt/dnsmasq/virbr0.status 
[
  {
   "ip-address": "192.168.122.55",
   "mac-address": "52:54:00:a0:a4:3f",
   "expiry-time": 1599104583
  }
]
# iptables -S -t nat
-P PREROUTING ACCEPT
-P INPUT ACCEPT
-P OUTPUT ACCEPT
-P POSTROUTING ACCEPT
-A POSTROUTING -s 192.168.122.0/24 -d 224.0.0.0/24 -j RETURN
-A POSTROUTING -s 192.168.122.0/24 -d 255.255.255.255/32 -j RETURN
-A POSTROUTING -s 192.168.122.0/24 ! -d 192.168.122.0/24 -p tcp -j MASQUERADE --to-ports 1024-65535
-A POSTROUTING -s 192.168.122.0/24 ! -d 192.168.122.0/24 -p udp -j MASQUERADE --to-ports 1024-65535
-A POSTROUTING -s 192.168.122.0/24 ! -d 192.168.122.0/24 -j MASQUERADE

虚拟的逻辑连接图

 

 

KVM虚拟化(一)创建虚拟机

虚拟机上网数据流向

KVM虚拟化(一)创建虚拟机

 

上一篇:魅族云Docker实践


下一篇:KVM简介,安装及常见使用详解