virtualization


目录:

虚拟化

虚拟化产品:

KVM[Linux环境]
vmware
        vsphere:管理套件
Cirtrix[思杰]
        XenDesktop:解决方案
Hyper-V:微软采用类似于VMware和Citrix的一个虚拟化产品

虚拟化概念[Virtualization]:

一种资源管理技术,是将计算机的实体资源,进行抽象、转换后呈现出来,打破实体结构间的不可切割的障碍,使用户可以比原本的组态更好的方式来应用这些资源。

虚拟化作用

虚拟化技术主要用来解决高性能的物理硬件产能过剩和老的旧的硬件产能过低的重组重用,透明化底层物理硬件,从而最大化利用物理硬件。

注意:

虚拟化并不是多任务多线程

多任务多线程:针对一个操作系统可以运行

虚拟化:可以实现多个操作系统之间并且实现同时进行

虚拟化技术,实际上一种解决方案,并不是软件的统称。

虚拟化分类

  • 完全虚拟化:

最流行的虚拟化方法使用名为hypervisor的一种软件,在虚拟服务器和底层硬件之间建立一个抽象层。hypervisor可以捕获CPU指令,为指令访问硬件控制器和外设充当中介,因此客户操作系统无需修改,所有软件都能在虚拟机中运行。

如:IBM CP/CMS,VirtualBox,VMware Workstation

  • 硬件辅助虚拟化:

利用硬件[主要是CPU]辅助处理敏感指令以实现完全虚拟化的功能,客户操作系统无需修改。

如:VMware Workstation,Xen,KVM

  • 部分虚拟化:

针对部分应用程序进行虚拟,而不是整个操作系统

  • 准虚拟化/超虚拟化[para-virtualization]

完全虚拟化是处理密集型技术,因为它要求hypervisor管理各个虚拟服务器,并让他们彼此独立。减轻这种负担的一种方法就是,改动客户操作系统,让它以自己运行在虚拟环境下,能够与hypervisor协同工作,这种方法就叫准虚拟化。为应用程序提供与底层硬件相似但不相同的软件接口,客户操作系统需要进行修改。准虚拟化技术的优点是性能高。

如:早期的Xen

  • 操作系统级虚拟化:

实现虚拟化还有一个方法,那就是在操作系统层面增添虚拟服务器功能。使操作统内核支持多用户空间实体。虽然操作系统层虚拟化的灵活性比较差,但本机速度性能比较高。

如:parallels Virtuozzo,Containers,Unix-like系统上的chroot,Solaris上的Zone。

image-20221101152249986

KVM(Keyboard Video Mouse)虚拟化

image-20221101152307735

KVM虚拟化

KVM(kernel Virtual Machine),内核虚拟化机器。KVM自Linux2.6.20版本后就直接整合到Linux内核中。它依托于CPU虚拟化指令集(如Intel-VT、AMD-V)实现高性能的虚拟化支持。

image-20221101152324349

该图描绘了KVM虚拟化架构,在KVM环境中运行的每一个虚拟化操作系统都将表现为单个独立的系统进程。因此可以很方便地与Linux系统中的安全模块进行整合(SElinux),可以灵活地实现资源的管理及分配。

KVM是由两部分构成:kernel和Qemu。Kernel已经集合到内核中,而Qemu主要处理I/O以及为用户提供一个用户空间工具来进行虚拟机的管理[负责各种组件的虚拟化]。

KVM的三种运行方式

  • 客户模式:相当于一个应用平台

用户空间:用于管理用户的操作空间。

内核空间:介于操作系统和虚拟机之间,实现组件的虚拟化功能以及模式之间的转换。

  • 用户模式[基于IOCTL,输入输出控制链]

通过Qemu实现各种组件的虚拟化

  • 内核模式

KVM驱动器

Host内核

image-20221101152353909

优劣势

KVM的不足之处:

​ A、不能跨平台

​ B、属于全虚拟化

​ 存在一个虚拟主机的管理工具[凌驾于宿主机],不能直接和内核进行调用

​ C、管理繁复,且相当消耗本机资源

KVM的网络模式(4种)

设置KVM网络

[root@localhost ~]# ifconfig

image-20221101152612955

注意:默认安装完成后,会在宿主机上生成一张新的网卡:virbr0

KVM的网络模式(四种网络模式):

隔离模式[仅主机模式]

image-20221101152624585

路由模式:

image-20221101152647820

NAT模式:

​ 与路由不同的是,出外网需要通过NAT转换成公网地址。

桥接模式:

(1)编辑网卡

[root@localhost ~]# cd /etc/sysconfig/network-scripts/
[root@localhost network-scripts]# cp ifcfg-ens33 ifcfg-br0
[root@localhost network-scripts]# vim ifcfg-br0
修改:
TYPE=Bridge
#BOOTPROTO=dhcp
BOOTPROTO=static
DEFROUTE=yes
NAME=br0
DEVICE=br0
ONBOOT=yes
IPADDR=192.168.137.4
NETMASK=255.255.255.0
GATEWAY=192.168.137.1
DNS1=8.8.8.8
[root@localhost network-scripts]# vim ifcfg-ens33
修改:
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
#BOOTPROTO=dhcp
BOOTPROTO=static
DEFROUTE=yes
NAME=ens33
UUID=15e65f4e-e22f-4bb1-bfe1-01cf32d7905e
DEVICE=ens33
ONBOOT=yes
#IPADDR=192.168.137.4
#NETMASK=255.255.255.0
#GATEWAY=192.168.137.1
#DNS1=8.8.8.8
BRIDGE=br0
[root@localhost network-scripts]# systemctl restart network
[root@localhost network-scripts]# ifconfig

image-20221101152740048

部署KVM虚拟化

基于CentOS7创建KVM。

安装KVM有三种方式

​ A. 重新装系统时,自行选定

​ B. 重新安装yum源实现

​ C. KVM的快照功能

环境介绍

1、操作系统:

[root@KVM ~]#cat /etc/redhat-release 
CentOS Linux release 7.5.1804 (Core)

image-20221101153010185

2、本机IP地址:

image-20221101153039132

验证当前主机是否满足KVM的运行条件

1、将虚拟机关机后,处理器开启虚拟化功能:

image-20221101153049615

image-20221101153057611

新加一个磁盘是为了把虚拟机装在这个磁盘里面,避免数据丢失,也可以不需要

注意:若为物理机,则进入BIOS开启CPU虚拟化

2、intel CPU过滤vmx ;AMD CPU过滤smv

[root@KVM ~]#egrep 'vmx|svm' /proc/cpuinfo

image-20221101153126424

当有输出就说明CPU支持虚拟化。

注意:对于Inter的服务器可以通过查看vmx,对于AMD的服务器可以查看smv。

添加磁盘用于创建虚拟机

分区磁盘并格式化

[root@localhost ~]# fdisk /dev/sdb
Command (m for help): m
Command (m for help): n
Command (m for help): w
[root@localhost ~]# mkfs.xfs /dev/sdb1
[root@localhost ~]# blkid

image-20221101153153481

[root@localhost ~]# mkdir -pv /kvm
[root@localhost ~]# vim /etc/fstab  <==设置开机自动挂载

添加:

image-20221101153213697

[root@localhost ~]# mount -a
[root@localhost ~]# df -h

image-20221101153241991

安装KVM

1、安装KVM所需软件

yum -y install kvm python-virtinst libvirt  bridge-utils virt-manager qemu-kvm-tools  virt-viewer virt-v2v libguestfs-tools-c qemu-img.x86_64 libguestfs-tools virt-install.noarch virt* libvirt qemu-kvm* bridge-utils

软件解释:

kvm
qemu-img.x86_64:qemu组件、创建磁盘、启动虚拟机等
python-virtinst:Python组件,记录创建VM时的xml文件
libvirt:虚拟机管理工具
bridge-utils:网路支持工具
virt-manager:图形界面管理虚拟机(如果不用图形界面,就可以不安装)
qemu-kvm-tools:KVM调试工具(可不安装)
virt-viewer:
virt-v2v
libguestfs-tools-c
qemu-kvm:kvm模块

2、查看kvm模块是否正常加载:

[root@KVM ~]#lsmod |grep kvm

image-20221101153413733

3、确认一下是否 kvm 安装成功:

[root@KVM ~]#systemctl start libvirtd.service       #启动虚拟机管理工具服务

image-20221101153430296

4、查看是否启动:

ps -ef | grep libvirtd

image-20221101153445496

5、对kvm进行如下如下配置:(不要设置,多余的,写了无法启动)

1、这里主要是tcp连接的设置

[root@KVM ~]#vim /etc/libvirt/libvirtd.conf 
# 末尾添加如下:
listen_tls = 0
listen_tcp = 1
tcp_port = "16509"
listen_addr = "192.168.12.183"          #本机IP地址
unix_sock_ro_perms = "0777"
unix_sock_rw_perms = "0770"
auth_tcp = "none"
max_clients = 1024
min_workers = 100
max_workers = 200
max_requests = 20
max_client_requests = 50

2、对vnc的设置(如果不需要vnc连接,就不需要设置)

[root@KVM ~]#vim /etc/libvirt/qemu.conf
# 末尾添加
vnc_listen = 0.0.0.0
vnc_password = "666666"
remote_display_port_min = 5900
remote_display_port_max = 65535

解释:

vnc_listen = 0.0.0.0
vnc_password = "666666"  #vnc连接密码
remote_display_port_min = 5900 #vnc最小端口
remote_display_port_max = 65535 #vnc最大端口

配置网桥连接

1、配置网桥br0

[root@haha /etc/sysconfig/network-scripts]#cat ifcfg-ens33 
DEVICE="ens33"
BOOTPROTO="none"
NM_CONTROLLED=no
TYPR=Ethernet
ONBOOT="yes"
BRIDGE="br0"
[root@haha /etc/sysconfig/network-scripts]#cat ifcfg-br0 
DEVICE=br0
TYPE=Bridge
ONBOOT=yes
NM_CONTROLLED=no
BOOTPROTO=static
IPADDR=192.168.12.182
NETMASK=255.255.255.0
GATEWAY=192.168.12.1
DNS1=8.8.8.8

image-20221101153611465

2、重启网络

[root@haha /etc/sysconfig/network-scripts]#systemctl restart network.service

3、查看所有的网桥信息,如果配置成功,会有以下输出:

image-20221101153629458

4、检查ip转发是否开启

[root@haha ~]#cat /proc/sys/net/ipv4/ip_forward
0

# 如果没有开启:
vim /etc/sysctl.conf
# 在末尾增加一行:net.ipv4.ip_forward = 1
/sbin/sysctl -p

ps:br0这张网卡用于kvm里面虚拟机的IP地址

安装虚拟机

1、创建目录,并把镜像文件移动到该目录

mkdir -p /var/iso/
mv /root/CentOS-6.8-x86_64-bin-DVD1.iso /var/iso/

2、开始安装虚拟机

virt-install  --name=CentOS-6.8-x86_64 --ram 1024 --vcpus=1 --disk path=/var/lib/libvirt/images/CentOS-6.8-x86_64.img,size=10 --location /var/iso/CentOS-6.8-x86_64-bin-DVD1.iso --network bridge=br0 --check path_in_use=off --nographics --extra-args='console=ttyS0' --force
# 或者如面命令:
virt-install --name='test01' --memory=512 --vcpus=1 --os-variant rhel7 --disk path=/kvm/test01/test01.img --virt-type qemu --bridge=br0 --location=/kvm/CentOS-7-x86_64-DVD-1804.iso

这里解释一下主要的几个参数含义:

1、一般选项:指定虚拟机的名称、内存大小、VCPU个数及特性等;

-n NAME, --name=NAME    虚拟机名称,需全局惟一
-r MEMORY, --ram=MEMORY     分配给虚拟机的内存,单位MB
--vcpus=VCPUS[,maxvcpus=MAX][,sockets=#][,cores=#][,threads=#]  VCPU个数及相关配置; 分配给虚拟机的cpu个数
--cpu=CPU:CPU模式及特性,如coreduo等;可以使用qemu-kvm -cpu ?来获取支持的CPU模式

2、安装方法:指定安装方法、GuestOS类型等;

-c CDROM, --cdrom=CDROM 光盘安装介质;
-l LOCATION, --location=LOCATION    安装源URL,支持FTP、HTTP及NFS等,如ftp://172.16.0.1/pub;
-x EXTRA, --extra-args=EXTRA:根据--location指定的方式安装GuestOS时,用于传递给内核的额外选项,例如指定kickstart文件的位置,--extra-args "ks=http://172.16.0.1/class.cfg"  
--boot=BOOTOPTS:指定安装过程完成后的配置选项,如指定引导设备次序、使用指定的而非安装的kernel/initrd来引导系统启动等 ;例如:  
    --boot  cdrom,hd,network:指定引导次序;  
    --boot kernel=KERNEL,initrd=INITRD,kernel_args=”console=/dev/ttyS0”:指定启动系统的内核及initrd文件;
--os-type=DISTRO_TYPE:操作系统类型,如linux、unix或windows等;
--os-variant=DISTRO_VARIANT:某类型操作系统的变体,如rhel5、fedora8等;

3、存储配置:指定存储类型、位置及属性等;

--disk    指定虚拟机img文件路径,如果虚拟机使用lvm分区,这里就指向到lvm的分区就行
  size    虚拟机文件大小,单位GB
  bus     虚拟机磁盘使用的总线类型,为了使虚拟机达到好的性能,这里使用virtio
  cache   虚拟机磁盘的cache类型
--graphics图形参数
format:磁盘映像格式,如raw、qcow2、vmdk等;

4、网络配置:指定网络接口的网络类型及接口属性如MAC地址、驱动模式等;

-w NETWORK, --network=NETWORK,opt1=val1,opt2=val2:将虚拟机连入宿主机的网络中,其中NETWORK可以为:  
bridge=BRIDGE:连接至名为“BRIDEG”的桥设备;  
network=NAME:连接至名为“NAME”的网络;
model  网卡模式,这里也是使用性能更好的virtio

其它常用的选项还有:

   model:GuestOS中看到的网络设备型号,如e1000、rtl8139或virtio等;     mac:固定的MAC地址;省略此选项时将使用随机地址,但无论何种方式,对于KVM来说,其前三段必须为52:54:00;     --nonetworks:虚拟机不使用网络功能;  
图形配置:定义虚拟机显示功能相关的配置,如VNC相关配置;     --graphics TYPE,opt1=val1,opt2=val2:指定图形显示相关的配置,此选项不会配置任何显示硬件(如显卡),而是仅指定虚拟机启动后对其进行访问的接口;     TYPE:指定显示类型,可以为vnc、sdl、spice或none等,默认为vnc;     port:TYPE为vnc或spice时其监听的端口;     listen:TYPE为vnc或spice时所监听的IP地址,默认为127.0.0.1,可以通过修改/etc/libvirt/qemu.conf定义新的默认值;     password:TYPE为vnc或spice时,为远程访问监听的服务进指定认证密码;     --noautoconsole:禁止自动连接至虚拟机的控制台;  
设备选项:指定文本控制台、声音设备、串行接口、并行接口、显示接口等;     --serial=CHAROPTS:附加一个串行设备至当前虚拟机,根据设备类型的不同,可以使用不同的选项,格式为“--serial type,opt1=val1,opt2=val2,...”,例如:     --serial pty:创建伪终端;     --serial dev,path=HOSTPATH:附加主机设备至此虚拟机;     --video=VIDEO:指定显卡设备模型,可用取值为cirrus、vga、qxl或vmvga;  


虚拟化平台:虚拟化模型(hvm或paravirt)、模拟的CPU平台类型、模拟的主机类型、hypervisor类型(如kvm、xen或qemu等)以及当前虚拟机的UUID等;     -v, --hvm:当物理机同时支持完全虚拟化和半虚拟化时,指定使用完全虚拟化;     -p, --paravirt:指定使用半虚拟化;     --virt-type:使用的hypervisor,如kvm、qemu、xen等;所有可用值可以使用’virsh capabilities’命令获取;  
其它:     --autostart:指定虚拟机是否在物理启动后自动启动;     --print-xml:如果虚拟机不需要安装过程(--import、--boot),则显示生成的XML而不是创建此虚拟机;默认情况下,此选项仍会创建磁盘映像;     --force:禁止命令进入交互式模式,如果有需要回答yes或no选项,则自动回答为yes;     --dry-run:执行创建虚拟机的整个过程,但不真正创建虚拟机、改变主机上的设备配置信息及将其创建的需求通知给libvirt;     -d, --debug:显示debug信息;  

其他功能

------以下是命令字符界面操作命令,一般情况下直接图形界面操作,用不着------

首先安装管理工具

[root@kvm02 ~]# yum install acpid –y
[root@kvm02 ~]# yum install acpid

查看运行的虚拟机

[root@kvm02 ~]# virsh list 

image-20221101154056630

查看所有的虚拟机(关闭和运行的,不包括摧毁的)

virsh list --all

image-20221101154122325

Linux虚拟化技术---CentOS7.4下KVM虚拟化一 安装配置及基本操作

---------以下是一系列操作命令-----------

virsh shutdown winxp //关闭虚拟机
virsh start winxp //启动虚拟机
virsh destroy winxp //停止虚拟机(关闭后状态仍然是运行,停止才会删除,关闭状态)
virsh suspend winxp //挂起、暂停
virsh resume winxp //恢复
virsh autostart winxp //开机自运行
virsh dumpxml 虚拟机名称 > 路径

------删除KVM虚拟机--------

virsh destroy winxp //先关闭再删除,或者先删除再关闭,一样能删除
virsh undefine winxp 

------克隆------(centos7.4版本已经没有以下命令了)

virsh list --all
virt-clone -o 源虚拟机名称 -n 克隆后的虚拟机名称 -f 克隆后的虚拟机磁盘镜像路径
virsh start 克隆后的虚拟机名称

2、启动

2.1启动虚拟机

[root@haha ~]#virsh start CentOS-6.8-x86_64

2.2虚拟机随物理机启动而启动

[root@haha ~]#virsh autostart CentOS-6.8-x86_64
Domain CentOS-6.8-x86_64 marked as autostarted

2.3取消虚拟机随物理机启动而启动

[root@haha ~]#virsh autostart --disable  CentOS-6.8-x86_64
Domain CentOS-6.8-x86_64 unmarked as autostarted

3、连接

3.1连接虚拟机

[root@haha ~]# virsh console CentOS-6.8-x86_64
Connected to domain CentOS-6.8-x86_64
Escape character is ^]

image-20221101154333076

3.2退出虚拟机

ctrl+]

4、关闭虚拟机

# 前提虚拟机需要(安装acpid服务)
yum install -y acpid
/etc/init.d/acpid start

[root@haha ~]#virsh shutdown CentOS-6.8-x86_64
Domain CentOS-6.8-x86_64 is being shutdown

5、删除

5.1在virsh list中删除该虚拟机

 virsh destroy CentOS-6.8-x86_64

5.2彻底删除虚拟机

# 解除标记
virsh undefine CentOS-6.8-x86_64
然后删除虚拟机存储所在的位置

6、挂起虚拟机

virsh suspend CentOS-6.8-x86_64  #挂起
virsh resume CentOS-6.8-x86_64  #恢复被挂起的