虚拟化简介

什么是虚拟化?

创建软件或虚拟表示的应用、服务器、存储和网络,减少 IT 开销 ,同时提高效率

虚拟化(Virtualization)是一种资源管理技术,是将计算机的各种实体资源(CPU、内存、磁盘 空间、网络适配器等),予以抽象、转换后呈现出来并可供分割、组合为一个或多个计算机配置环境,并重新分 割、重新组合,以达到最大化合理利用物理资源的目的。

虚拟化可以提高 IT 敏捷性、灵活性和可扩展性,同时大幅节约成本,实现更高的工作负载移动性、自动化运维 - 这些都是虚拟化的优势

在公司使用私有云的话如何上线以及物理机选择

服务器建议配置

CPU : 2x 24核心 核心 主频

内存 : 128G / 192G / 256G / 512G / 1T / 1.5T

硬盘 : 最好固态 4块做read / 机械盘2.5 / SAS 7.2K 10K

网卡 : 万兆

云计算分类

公有云:比如阿里云、AWS、腾讯云等等 ,只要付费就可以使用,不需要关心底层技术,但是数据安全需要考虑

私有云: 在公司内或者IDC 搭建Openstack、vavare等环境

混合云: 既有公有云 又有私有云,及双方的云都有交接成为混合云

虚拟化技术之KVM

KVM是硬件虚拟化技术,主要负责CPU 和内存虚拟化 ,而Qemu负责 I/O 虚拟化,两个各自发挥优势

详情点击 KVM虚拟化技术

阿里云的服务器都是使用的kvm , 如果想支持虚拟化服务器必须有以下两个选项

lscpu |egrep -i (avx2| vmx)

1
2
3
4
5
6
7
全虚拟化软件
Vmvare workstation #https://www.vmware.com/cn/products/workstation-pro.html
Vmvare esxi
paralles desktop
KVM
Microsoft Hyper-V
VirtualBox

直接运行到物理机 :

1
2
vmvare esxi
rhev hypervisor

需要运行到操作系统 :

1
2
3
4
5
KVM , XEN
vmvare workstation
paralles desktop
Microsoft Hyper-V
virtualBox

常见的 hypervisor 类型

1
2
3
4
5
6
7
8
9
$ 面试常问用你们用的什么虚拟化
1、KVM是那种类型的虚拟化 答:裸机型的虚拟化
2、虚拟化有那几类?
分别是裸机型 和 主机脱管型

- 类型I-裸机型:直接运行在硬件设备上的,这种架构搭建的虚拟化环境称为裸机虚拟化环境(Bare-Metal Hardware Virtualization),比如:VMware ESXI、KVM
- 类型II-主机托管型,运行在具有虚拟化功能的操作系统上的,构建的是主机虚拟化环境(Hosted Virtualization),比如:VMware Workstation、VirtualBox

#Redhat将KVM划分到类型I即裸机型: https://www.redhat.com/zh/topics/virtualization/what-is-KVM

KVM 简介

KVM是 Virtual Machine的简称,是一个开源的虚拟化模块,在Linux 2.6.20以后已成为主流,也是hypervisor之一

红帽虚拟化入门指南 [Redhat Virtual Machine](https://access.redhat.com/documentation/zh- cn/red_hat_enterprise_linux/7/html/virtualization_getting_started_guide/index)

kvm能够在无停机的情况下对业务进行迁移 ,使用共享存储的话迁移速度会更加快捷
kvm可以直接调用宿主机的kvm模块,从而进行访问
KVM 提供资源分配
CPU 内存 磁盘 网卡

1
2
3
4
5
- Guset:客户机系统,包括(CPU,Memory,Dirve,网卡等),被KVM设置成一种受限制的CPU模式下运行

- KVM:运行在内核空间,提供CPU和内存的虚拟化,以及客户机的I/O拦截,Guest部分I/O被KVM拦截以后交给QEMU处理。

- Qemu: 全虚拟化的模拟器,模拟硬件。像键盘鼠标等等

KVM 安装

首先在虚拟机的设置里面一定要开启虚拟化

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
查看是否开启虚拟化,不是0就可以
$ grep -E "vmx|svm" /proc/cpuinfo |wc -l
# KVM 安装
Ubuntu 1804 安装
$ apt install qemu-kvm virt-manager libvirt-daemon-system -y
验证是否支持kvm
$ kvm-ok

CentOS 7.X 安装:
$ yum -y install qemu-kvm qemu-kvm-tools libvirt libvirt-client virt-manager virt-install
$ systemctl start libvirtd && systemctl enable libvirtd

# 连接kvm,第一次会报错 因为没有环境变量,还有libvirtd没有启动,xshell连接还需要在属性隧道 勾选Xmanger连接
$ systemctl start libvirtd && systemctl enable libvirtd
$ virt-manager

启动以后会生成一个 virbro网卡,他使用的是Nat模式通过宿主机转换
$ ifconfig |grep virbr0

使用brctl查看会生成一个交换机
$ brctl show
bridge name bridge id STP enabled interfaces
virbr0 8000.52540043650c yes virbr0-nic

查看宿主机IP地址段儿出口,查看是软连接,默认是 192.168.122.1,也可以自定义,需要重启libvirtd
$ ll /etc/libvirt/qemu/networks/autostart/default.xml

创建NAT网络虚拟机

首先需要创建磁盘 qemu-img

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
CPU 和 内存可以直接分配  但是磁盘需要手动创建

1、使用命令创建一个10G的磁盘,目前有qcow2 和 raw 两种方式 ('主流是qcow2,因为假如你分配100G只会占用最小磁盘空间,随着数据的写入才会慢慢增加' )
qcow2-精简磁盘
raw-立即占用磁盘
- 默认磁盘路径
$ ll /var/lib/libvirt/images/

#创建qcow2磁盘显示100多k (好处是初始化磁盘空间比较小,迁移比较快,缺点是磁盘IO 可能会高,是写一点宿主机上占用一些,在磁盘是随机写)
$ qemu-img create -f qcow2 /var/lib/libvirt/images/ubuntu-m44.qcow2 10G
$ ll -h /var/lib/libvirt/images/ubuntu-m44.qcow2
-rw-r--r-- 1 root root 193K Jun 15 14:43 /var/lib/libvirt/images/ubuntu-m44.qcow2


# 创建raw 磁盘,显示10G (好处是磁盘是顺序读的, 缺点是迁移慢)
$ qemu-img create -f raw /var/lib/libvirt/images/ubuntu-m44.raw 10G
$ ll -h /var/lib/libvirt/images/ubuntu-m44.raw
-rw-r--r-- 1 root root 10G Jun 15 14:40 /var/lib/libvirt/images/ubuntu-m44.raw

virt-install 安装虚拟机

选项参数,如果CPU或者内存全部分完还继续分配可能会造成删除进程占用内存最好的进程(内存和磁盘最多1.5倍是上限)

1
2
3
4
5
6
7
8
9
10
11
12
13
virt-install
--memory 1024 #指定内存
--vcpus 4 # 指定CPU
--cpu host-passthrough #指定宿主机CPU型号
--cdrom #指定光盘位置
--disk #指定磁盘文件,也可以临时创建
--network #指定网络类型,默认桥接
--graphics # 配置虚拟机显示设置

--virt-type #要使用的管理程序名称(kvm、qemu、xen )等等
--arch #模拟的 CPU 构架
--autostart # 如果宿主机重启,虚拟机也重启(避免服务器断电宕机,虚拟机的服务设置开机自启动)
--noautoconsole #不要自动尝试连接到客户端控制台

上传镜像安装虚拟机

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
1、先创建目录,然后把镜像上传进来
$ mkdir /data/ISOs -p
$ ll /data/ISOs/CentOS-7-x86_64-Minimal-2003.iso
-rw-r--r-- 1 root root 1085276160 Jun 16 14:37 /data/ISOs/CentOS-7-x86_64-Minimal-2003.iso

2、 创建raw 磁盘
$ qemu-img create -f raw /var/lib/libvirt/images/ubuntu-m44.raw 10G

3、 创建默认网桥虚拟机
$ virt-install --virt-type kvm --name m44-vm1 --ram 1024 --vcpus 2 --cdrom=/data/ISOs/CentOS-7-x86_64-Minimal-2003.iso --disk path=/var/lib/libvirt/images/centos-m44.raw --network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole
# 一个虚拟机就是一个进程,可以过滤名字查看
$ ps -ef|grep m44-vm1

4、使用virt-manager 初始化安装 `或者使用vnc连接安装,默认端口是5900`
grep -R 5900 /etc/libvirt/qemu.conf

# 图形化选择
- 、 选择时区 (DATE & TIME ) `选择上海
- 、 语言(LANGUAGE_SUPPORT)一定把中文安装 `LANGUAGE SUPPORT`
- 、 分区 (installation_destination)
点击 `I will configer partitioning`
boot 512M 剩下的都给 /

然后点击reboot,第一次会起不来需要重新点击开机按钮

但是公司内部很少使用,因为其他服务器是无法ping通的,除非在路由器上添加路由

创建bridge网络虚拟机

网桥可以运行在宿主机上使宿主机的同网段IP,并且可以从外部直接访问到虚拟机,目前企业大部分都是使用桥接网络

1
2
3
4
5
6
7
8
9
10
11
1、创建br0桥接网卡:



2、创建磁盘
$ qemu-img create -f raw /var/lib/libvirt/images/centos-m44.raw 10G
3、创建桥接虚拟机
$ virt-install --virt-type kvm --name m44-vm1 --ram 1024 --vcpus 2 --cdrom=/data/ISOs/CentOS-7-x86_64-Minimal-2003.iso --disk path=/var/lib/libvirt/images/centos-vm2-m44.qcow2 --network bridge=br0 --graphics vnc,listen=0.0.0.0 --noautoconsole

4、 图形化安装 这里不在叙述
5、从外部连接ssh虚拟机

快速生成虚拟机

1
2
3
4
5
6
7
8
9
10
前提是你已经创建好了一个主机
$ cd /var/lib/librit/images
- 这个磁盘里面是包含虚拟机的操作系统,就不需要在安装了
$ cp centos-vm2-m44-qcow2 centos-vm3-m44-qcow2

$ virt-install --virt-type kvm --name m44-vm3 --ram 1024 --vcpus 2 --cpu host-passthrough --cdrom=/data/ISOs/CentOS-7-x86_64-Minimal-2003.iso --disk path=/var/lib/libvirt/images/centos-vm3-m44.qcow2 --network bridge=br0 --graphics vnc,listen=0.0.0.0 --noautoconsole

启动文件,然后进入虚拟机更改一下网络地址,然后启动服务就可以访问
$ ll /etc/libvirt/qemu/m44-vm3.xml

常用命令

1
2
3
4
5
6
7
8
$ virsh list   		   # 列出正在运行的虚拟机
$ virsh list --all # 列出包括关机的虚拟机
$ virsh list --inactive #列出关闭的虚拟机
$ virsh start CentOS-7-x86_64 #正常开机
$ virsh shutdown CentOS-7-x86_64 #正常关机
$ virsh destroy centos7 #强制停止/关机
$ virsh undefine Win_2008_r2-x86_64 #强制删除
$ virsh autostart centos7 #设置当前虚拟机开机自启动