一、虚拟化概念

1、虚拟化技术:在计算机技术中,虚拟化(技术)或虚拟技术(英语:Virtualization)是一种资源管理技术,是将计算机的各种实体资源(CPU、内存、磁盘空间、网络适配器等),予以抽象、转换后呈现出来并可供分区、组合为一个或多个电脑配置环境。

2、虚拟化:也就是指通过虚拟化技术将一台计算机虚拟为多台逻辑计算机

3、虚拟化使用软件的方法重新定义划分 IT 资源,可以实现 IT 资源的动态分配、灵活调度、跨域共享,提高 IT 资源利用率,使 IT 资源能够真正成为社会基础设施,服务于各行各业中灵活多变的应用需求。

虚拟化技术的趋势:

(1)降低运营成本;

(2)提高应用兼容性;

(3)加速应用部署;

(4)提高服务可用性;

(5)提升资源利用率;

(6)动态调度资源;

(7)降低能源消耗。

二、虚拟化分类

1、虚拟化层次种类:

(1)完全虚拟化:hypervisor(VMWare vsPhere,VirtualPC,KVM)

(2)准虚拟化(Xen)

(3)系统虚拟化

(4)桌面虚拟化

2、虚拟化架构分类:

(1)1型虚拟化(Xen,VMWare vsPhere)

(2)2型虚拟化(KVM,VirtualBox,VMWare Workstation)

三、kvm组成

1、KVM:运行在内核空间,提供CPU和内存的虚拟化

  Libvirt:是 KVM 的管理工具。Libvirt 包含 3 个东西:后台 daemon 程序 libvirtd、API 库和命令行工具 virsh。

  (1)libvirtd是服务程序,接收和处理 API 请求;
  (2)API 库使得其他人可以开发基于 Libvirt 的高级工具,比如 virt-manager,这是个图形化的 KVM 管理工具;
  (3)virsh 是我们经常要用的 KVM 命令行工具。作为 KVM 和 OpenStack 的实施人员,virsh 和 virt-manager 是一定要会用的。

2、QEMU:运行在用户空间,提供硬件I/O虚拟化

3、kvm虚拟化所需组件介绍
  kvm:核心套件
  virt-manager:图形化 KVM 管理软件
  libvirt:提供虚拟机与宿主相互通信的机制
  libvirt-python:允许使用 libvirt API
  python-virtinst:CLI 下创建 KVM 的工具
  libvirt-client:提供 client 访问 kvm 服务器的机制 ,并包含 virsh 命令进行 管理和控制VMs
  qemu-kvm:提供用户级 KVM 环境
  qemu-img:VMs 磁盘管理

4、KVM 的虚拟化需要硬件支持(需要处理器支持虚拟化:如 Intel 厂商的 Intel-VT ( vmx )技术&&AMD 厂商的 AMD-V ( svm )技术。

  查看是否支持虚拟化:cat /proc/cpuinfo | grep -e vmx -e nx -e svm 或者 egrep '(vmx|svm)' /proc/cpuinfo

5、kvm虚拟机配置文件位置:/etc/libvirt/qemu

  kvm虚拟机磁盘文件位置:/var/lib/libvirt/images

四、kvm虚拟机管理

1、virt-manager图形化

2、virsh命令行

(1)基础操作

virsh list   #列出当前宿主机上处于运行状态的虚拟机
virsh list --all   #列出当前宿主机上所有的虚拟机
virsh start vm1 (虚拟机name)   #开启某一台虚拟机
virsh shutdown vm1 (虚拟机name)   #正常关闭一台虚拟机
virsh destroy vm1   #强制关闭某一台虚拟机
virsh autostart vm1   #开机自启动虚拟机vm1
virsh autostart --disable vm1   #关闭开机自启动
virsh edit vm1   #编辑某个虚拟机的配置文件
virsh pool-list   #列出存储池

(2)创建磁盘镜像

如:qemu-img create -f qcow2 -o size=9G /export/kvm/test.qcow2
创建一个大小为 50G 的,格式为 qcow2 的磁盘镜像

(3)查看磁盘信息

qemu-img info /export/kvm/test.qcow2

(4)创建&&管理虚机

Virt-install:命令行下创建虚拟机的命令,不过在它后面需要跟上很多的参数
  --name: 虚拟机的名字。
  --disk Location: 磁盘映像的位置。
  --graphics : 怎样连接 VM ,通常是 SPICE 。
  --vcpu : 虚拟 CPU 的数量。
  --ram : 以兆字节计算的已分配内存大小。
  --location : 指定安装源路径
  --network : 指定虚拟网络,通常是 virbr0 或者自己设定的 br0
例如:
virt-install --name=test --disk path=/export/kvm/test.qcow2 --ram=1024 --vcpus=1 --graphics spice --location=/export/download/software/iso/CentOS-7.3-x86_64-DVD.iso --network bridge=br0

(5)通过XML文件定义和删除虚机

virsh destroy   #删除一个域
virsh define   #从一个 XML 文件定义(但不开始)一个域
virsh undefine   #删除一个虚机域

(6)克隆虚机(关机情况下)

virt-clone -o vm2 -n vm4 -f /var/lib/libvirt/images/vm4.qcow2

五、kvm通过virsh console 连入虚机

  centos7开启虚拟机的console功能:

grubby --update-kernel=ALL --args="console=ttyS0"
reboot

  连入虚机:

virsh console vm-name

  退出console连接的虚机:按 ctrl+] 组合键退出virsh console

六、kvm虚拟化透传

  KVM 虚拟化需要处理器对虚拟化技术的支持,当我们需要进行虚拟机嵌套虚拟机时,我们需要让虚拟机中处理器对 VT 功能的支持达到透传的效果。
  nested 虚拟机嵌套( kvm on kvm ):nested 技术,简单的说,就是在虚拟机上跑虚拟机。

1、查看一层客户端是否支持 VT

grep vmx /proc/cpuinfo

2、在物理服务器上为嵌套虚拟机做准备 --- CPU 虚拟化透传
(1)# vim /etc/modprobe.d/kvm-nested.conf (新建配置文件)

options kvm_intel nested=1

(2)重新加载 kvm 模块

modprobe -r kvm_intel   #-r参数:remove掉kvm_intel模块
modprobe kvm_intel     #加载kvm_intel模块

(3)验证是否加载成功

cat /sys/module/kvm_intel/parameters/nested

  Y ---“Y” 表示 cpu 虚拟化透传功能开启

3、编辑需要做虚拟化透传的虚拟机的配置文件

virsh edit centos7 ( Virtual Machine Name )
<cpu mode='host-passthrough'/>

4、进入虚拟机中查看cpu是否透传成功

lsmod | grep kvm

七、kvm存储管理

  KVM 的存储虚拟化是通过存储池(Storage Pool)和卷(Volume)来管理的。
  Storage Pool 是宿主机上可以看到的一片存储空间,可以是多种类型;
  Volume 是在 Storage Pool 中划分出的一块空间,宿主机将 Volume 分配给虚拟机,Volume 在虚拟机中看到的就是一块硬盘。

  厚置备:厚置备是传统存储置备模型。对于厚置备,预先提供大量存储空间以满足未来的存储需要。但是,空间可能一直未被使用,这样会导致无法充分利用存储容量。
  精简置备:此方法与厚置备相反,通过以灵活的按需方式分配存储空间,可帮助您消除无法充分利用存储的问题。可以通过 ESXi,使用两种模型的精简置备(阵列级别和虚拟磁盘级别)。

  使用文件做 Volume 有很多优点:存储方便、移植性好、可复制
  KVM 支持多种 Volume 文件格式:
  raw:是默认格式,即原始磁盘镜像格式,移植性好,性能好,但大小固定,不能节省磁盘空间。
  qcow2:是推荐使用的格式,cow 表示 copy on write,能够节省磁盘空间(精简置备),支持 AES 加密,支持 zlib 压缩,支持多快照,功能很多。
  vmdk:是 VMWare 的虚拟磁盘格式,也就是说 VMWare 虚机可以直接在 KVM上 运行。

  fdisk:磁盘分区,是Linux发行版本中最常用的分区工具

m 查看全部可用的参数
n 添加新的分区
d 删除某个分区信息
l 列出所有可用的分区类型(查看)
t 改变某个分区的类型
p 打印分区信息(查看分区表信息)
w 保存分区信息并退出
q 不保存直接退出

  mkfs:进行格式化,就是安装文件系统的过程mkfs(meke xfs)

  lsblk:用来查看block设备的信息

八、kvm网络管理

1、kvm的三种网络模式

(1)NAT(默认上网):虚拟机利用 host 机器的 ip 进行上网。对外显示一个 ip;

(2)自带的bridge:将虚拟机桥接到 host 机器的网卡上 ,vm和 host 机器都通过 bridge 上网;对外有同网段的不通 ip,此种方式host却不能和vm联通

(3)Linux bridge:基本原理就是创建一个桥接接口 br0 ,在物理网卡和虚拟网络接口之间传递数据。此种方式host也可以和vm连通;是 Linux 上用来做 TCP/IP 二层协议交换的设备

2、linux bridge命令:

brctl addbr <bridge>        add bridge  #添加网桥
brctl delbr <bridge> delete bridge #删除网桥
brctl addif <bridge> <device> add interface to bridge #向网桥添加接口
brctl delif <bridge> <device> delete interface from bridge #删除网桥上接口
brctl show [ <bridge> ] show a list of bridges #查看网桥列表

3、Linux bridge 实现 vlan

(1)查看核心是否提供VLAN功能

dmesg | grep -i 802

  如果8021q模块没有载入系统,则可以通过使用modprobe模组命令载入802.1q模组,并利用lsmod命令确认模组是否已经载入到核心内。

 modprobe 8021q
lsmod | grep 8021q

(2)安装用于查看VLAN配置的工具---vconfig

(3)创建VLAN接口

vconfig add ens37 10
vconfig add ens37 20
vim ifcfg-ens37.10 && ens37.20
#############################
VLAN=yes      #启用vlan
TYPE=vlan      #类型vlan
PHYSDEV=ens37    #物理设备网卡
VLAN_ID=10      #vlan_id
NAME=ens37.10      
ONBOOT=yes      #自启
ZONE=trusted      #开启作用域
DEVICE=ens37.10      #设备名
BRIDGE=brvlan-10      #网桥
#################################

(4)分别建立网桥brvlan-10,brvlan-20

brctl addbr brvlan-10
brctl addbr brvlan-20

(5)编辑网桥brvlan-10和brvlan-20配置文件:

#vim ifcfg-brvlan-10
TYPE=bridge
BOOTPROTO=static
NAME=brvlan-10
DEVICE=brvlan-10
ONBOOT=yes
#vim ifcfg-brvlan-20
TYPE=bridge
BOOTPROTO=static
NAME=brvlan-20
DEVICE=brvlan-20
ONBOOT=yes

(6)将网桥brvlan-10接到网口ens37.10,brvlan-20接到网口ens37.20

brctl addif brvlan-10 ens34.10
brctl addif brvlan-20 ens34.20

(7)重启网络服务

4、网卡配置bond(绑定)

(一)网卡bond(绑定),也称作网卡捆绑。就是将两个或者更多的物理网卡绑定成一个虚拟网卡。网卡是通过把多张网卡绑定为一个逻辑网卡,实现本地网卡的冗余,带宽扩容和负载均衡,在应用部署中是一种常用的技术。

多网卡绑定实际上需要提供一个额外的软件的bond驱动程序实现。通过驱动程序可以将多块网卡屏蔽。对TCP/IP协议层只存在一个Bond网卡,在Bond程序中实现网络流量的负载均衡,即将一个网络请求重定位到不同的网卡上,来提高总体网络的可用性。

(二)网卡绑定的目的
   1.提高网卡的吞吐量。
   2.增强网络的高可用,同时也能实现负载均衡。

(三)网卡配置bond(绑定)bond模式:

  1、Mode=0(balance-rr) 表示负载分担round-robin,平衡轮询策略,具有负载平衡和容错功能
  bond的网卡MAC为当前活动的网卡的MAC地址,需要交换机设置聚合模式,将多个网卡绑定为一条链路。
  2、Mode=1(active-backup) 表示主备模式具有容错功能,只有一块网卡是active,另外一块是备的standby,这时如果交换机配的是捆绑,将不能正常工作,因为交换机往两块网卡发包,有一半包是丢弃的。
  3、Mode=2(balance-xor) 表示XOR Hash负载分担(异或平衡策略),具有负载平衡和容错功能
  每个slave接口传输每个数据包和交换机的聚合强制不协商方式配合。(需要xmit_hash_policy)。
  4、Mode=3(broadcast)  表示所有包从所有interface发出,广播策略,具有容错能力,这个不均衡,只有冗余机制...和交换机的聚合强制不协商方式配合。  
  5、Mode=4(802.3ad) 表示支持802.3ad协议(IEEE802.3ad 动态链接聚合) 和交换机的聚合LACP方式配合(需要xmit_hash_policy)。
  6、Mode=5(balance-tlb) 适配器传输负载均衡,并行发送,无法并行接收,解决了数据发送的瓶颈。 是根据每个slave的负载情况选择slave进行发送,接收时使用当前轮到的slave。  
  7、Mode=6(balance-alb) 在5的tlb基础上增加了rlb。适配器负载均衡模式并行发送,并行接收数据包

  5和6不需要交换机端的设置,网卡能自动聚合。4需要支持802.3ad。0,2和3理论上需要静态聚合方式,但实测中0可以通过mac地址欺骗的方式在交换机不设置的情况下不太均衡地进行接收。

常用的有三种:
  mode=0:平衡负载模式,有自动备援,但需要”Switch”支援及设定。
  mode=1:自动备援模式,其中一条线若断线,其他线路将会自动备援。
  mode=6:平衡负载模式,有自动备援,不必”Switch”支援及设定。

(四)网卡配置bond

1、编辑bond配置文件

TYPE=Ethernet
BOOTPROTO=none
DEVICE=ens37
ONBOOT=yes
MASTER=bond0
SLAVE=yes

2、导入bonding模块

modprobe bonding
lsmod | grep bonding

3、创建bond0,并桥接到br1

#vim ifcfg-bond0
DEVICE=bond0
TYPE=Bond
NAME=bond0
BONDING_MASTER=yes
BOOTPROTO=static
USERCTL=no
ONBOOT=yes
BONDING_OPTS="mode=6 miimon=100"
BRIDGE=br1

4、创建br1网桥

# vim ifcfg-br1
TYPE=Bridge
DEVICE=br1
ONBOOT=yes
BOOTPROTO=static
NAME=br1

5、创建虚拟网口vlan10,vlan20的配置文件

# vim ifcfg-br1.10 && 20
VLAN=yes
TYPE=vlan
PHYSDEV=br1
VLAN_ID=10
NAME=br1.10
ONBOOT=yes
ZONE=trusted
DEVICE=br1.10
BRIDGE=brvlan-10

6、创建vlan的网桥

]# vim ifcfg-brvlan-10 &&20
TYPE=bridge
BOOTPROTO=static
NAME=brvlan-10
DEVICE=brvlan-10
ONBOOT=yes

7、连接网桥和虚拟网口

 brctl addif brvlan-10 br1.10
brctl addif brvlan-20 br1.20

8、重启网络服务

九、虚机迁移

  系统的迁移是指把源主机上的操作系统和应用程序移动到目的主机,并且能够在目的主机上正常运行。

1、冷迁移

  使用scp将一台宿主机里的虚拟机配置XML文件及磁盘qcow2文件拷贝到另一台宿主机上,来克隆虚拟机;使用virsh define定义配置文件,安装时如果报错,需要删除虚拟机,修改配置文件信息(disk文件位置和interface类型),再重新使用virsh define定义安装。

2、热迁移

  热迁移(又叫动态迁移、实时迁移),即虚拟机保存( save ) / 恢复 (restore) :将整个虚拟机的运行状态完整保存下来,同时可以快速的恢复到原有硬件平台甚至是不同硬件平台上。恢复以后,虚拟机仍旧平滑运行,用户不会察觉到任何差异。

  迁移的要求:两边的宿主机硬件要一致,一定有共享存储

3、nfs搭建过程

(1)服务端下载nfs-utils,并开启rpvbind 和nfs

(2)写入配置文件:

# vim /etc/exports
/PATH HOSTNAME(rw,sync)/(ro)

(3)showmount -e

(4)客户端下载nfs-utils,并启动

(5)showmount -e 检查挂载信息,并挂载

kvm总结复习的更多相关文章

  1. 准备 KVM 实验环境 - 每天5分钟玩转 OpenStack(3)

    KVM 是 OpenStack 使用最广泛的 Hypervisor,本节介绍如何搭建 KVM 实验环境 安装 KVM 上一节说了,KVM 是 2 型虚拟化,是运行在操作系统之上的,所以我们先要装一个 ...

  2. 云计算大数据:Xen、KVM、VMware、hyper-v等虚拟化技术的比较

    1.Xen.KVM.VMware.hyper-v等虚拟化技术的比较,xen和kvm,是开源免费的虚拟化软件. vmware是付费的虚拟化软件. hyper-v比较特别,是微软windows 2008 ...

  3. KVM虚拟机配置笔记

    KVM 全称是 Kernel-Based Virtual Machine.也就是说 KVM 是基于 Linux 内核实现的,KVM有一个内核模块叫 kvm.ko,只用于管理虚拟 CPU 和内存. 在 ...

  4. KVM虚拟机配置

    KVM 全称是 Kernel-Based Virtual Machine.也就是说 KVM 是基于 Linux 内核实现的,KVM有一个内核模块叫 kvm.ko,只用于管理虚拟 CPU 和内存. 在 ...

  5. 使用 Python 为 KVM 编写脚本,第 1 部分: libvirt

    虚拟化是目前市场上大多数服务器操作系统的标准设备.在 Linux® 的世界里,服务器虚拟化有两个主要选择:基于 Kernel 的虚拟机 (KVM) 和 Xen.KVM 是 Red Hat 和其他公司采 ...

  6. Centos7利用kvm搭建Windows虚拟机

    这几天玩了一下kvm虚拟化,真的很有意思,我把这几天踩的坑,还有收获,都记录下来,作为以后的复习和检查. 首先说一下我的基本逻辑,我有一台win7的笔记本,我的底层虚拟化是使用VMWare构建的Cen ...

  7. 准备 KVM 实验环境

    KVM 是 OpenStack 使用最广泛的 Hypervisor,本节介绍如何搭建 KVM 实验环境 安装 KVM 上一节说了,KVM 是 2 型虚拟化,是运行在操作系统之上的,所以我们先要装一个 ...

  8. O003、准备 KVM 实验环境

    参考https://www.cnblogs.com/CloudMan6/p/5240770.html   KVM 是 OpenStack 使用的最广泛的Hypervisor,本节介绍如何搭建 KVM  ...

  9. iOS总结_UI层自我复习总结

    UI层复习笔记 在main文件中,UIApplicationMain函数一共做了三件事 根据第三个参数创建了一个应用程序对象 默认写nil,即创建的是UIApplication类型的对象,此对象看成是 ...

随机推荐

  1. Windows10家庭版安装docker

    在公司,一直使用mac系统,在mac上安装使用docker还是比较方便的,可本人心血来朝,家里是win10 home版,就想在windows上刷一刷. 好了,废话不多说,直接上干货. 为了不误导广大爱 ...

  2. 四、python学习-正则表达式

    正则表达式 import re lst = re.findall(正则表达式,需要匹配的字符串) findall 把所有匹配到的字符串都搜出来,返回列表 不能把分组内容和匹配内容同时显示出来 sear ...

  3. Leedcode算法专题训练(分治法)

    归并排序就是一个用分治法的经典例子,这里我用它来举例描述一下上面的步骤: 1.归并排序首先把原问题拆分成2个规模更小的子问题. 2.递归地求解子问题,当子问题规模足够小时,可以一下子解决它.在这个例子 ...

  4. (十七)VMware Harbor 垃圾清理

    1. 在线垃圾清理 注意:从Harbor中删除镜像时不释放空间,垃圾收集是通过从清单中不再引用文件系统中删除blob来释放空间的任务. 注意:在执行垃圾收集时,Harbor将进入只读模式,并且禁止对d ...

  5. element UI el-autocomplete 带输入建议的输入框

    项目需求:需要用户在输入框中输入公司 全名    但是为了避免用户输入不全   需要做一个带输入建议的输入框 参考:https://www.jianshu.com/p/de922caf337c

  6. 使用Docker及k8s启动logstash服务

    前提:搭建好elasticsearch和kibana服务 下载镜像,需要下载与elasticsearch和kibana相同版本镜像 docker pull docker.elastic.co/logs ...

  7. 官宣 MAUI 在.NET Preview 3的最新进展

    我们在.NET 6 Preview 3中交付了.NET多平台应用UI的移动和桌面开发的最新进展.此版本添加了Windows平台和WinUI 3,改进了基本应用程序和启动构建器,添加了原生生命周期事件, ...

  8. Python中的Pexpect模块的简单使用

    Pexpect 是一个用来启动子程序并对其进行自动控制的 Python 模块. Pexpect 可以用来和像 ssh.ftp.passwd.telnet 等命令行程序进行自动交互.以下所有代码都是在K ...

  9. 什么?这么精髓的View的Measure流程源码全解析,你确定不看看?

    前言 Android开发中我们平时接触最多的是各种View, View是一个比较大的体系,包含了绘制流程.事件分发.各种动画.自定义View 等等.前几天我写了一篇事件分发源码解析的文章, 今天我们来 ...

  10. 【JavaScript】Leetcode每日一题-青蛙过河

    [JavaScript]Leetcode每日一题-青蛙过河 [题目描述] 一只青蛙想要过河. 假定河流被等分为若干个单元格,并且在每一个单元格内都有可能放有一块石子(也有可能没有). 青蛙可以跳上石子 ...