kvm总结复习
一、虚拟化概念
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总结复习的更多相关文章
- 准备 KVM 实验环境 - 每天5分钟玩转 OpenStack(3)
KVM 是 OpenStack 使用最广泛的 Hypervisor,本节介绍如何搭建 KVM 实验环境 安装 KVM 上一节说了,KVM 是 2 型虚拟化,是运行在操作系统之上的,所以我们先要装一个 ...
- 云计算大数据:Xen、KVM、VMware、hyper-v等虚拟化技术的比较
1.Xen.KVM.VMware.hyper-v等虚拟化技术的比较,xen和kvm,是开源免费的虚拟化软件. vmware是付费的虚拟化软件. hyper-v比较特别,是微软windows 2008 ...
- KVM虚拟机配置笔记
KVM 全称是 Kernel-Based Virtual Machine.也就是说 KVM 是基于 Linux 内核实现的,KVM有一个内核模块叫 kvm.ko,只用于管理虚拟 CPU 和内存. 在 ...
- KVM虚拟机配置
KVM 全称是 Kernel-Based Virtual Machine.也就是说 KVM 是基于 Linux 内核实现的,KVM有一个内核模块叫 kvm.ko,只用于管理虚拟 CPU 和内存. 在 ...
- 使用 Python 为 KVM 编写脚本,第 1 部分: libvirt
虚拟化是目前市场上大多数服务器操作系统的标准设备.在 Linux® 的世界里,服务器虚拟化有两个主要选择:基于 Kernel 的虚拟机 (KVM) 和 Xen.KVM 是 Red Hat 和其他公司采 ...
- Centos7利用kvm搭建Windows虚拟机
这几天玩了一下kvm虚拟化,真的很有意思,我把这几天踩的坑,还有收获,都记录下来,作为以后的复习和检查. 首先说一下我的基本逻辑,我有一台win7的笔记本,我的底层虚拟化是使用VMWare构建的Cen ...
- 准备 KVM 实验环境
KVM 是 OpenStack 使用最广泛的 Hypervisor,本节介绍如何搭建 KVM 实验环境 安装 KVM 上一节说了,KVM 是 2 型虚拟化,是运行在操作系统之上的,所以我们先要装一个 ...
- O003、准备 KVM 实验环境
参考https://www.cnblogs.com/CloudMan6/p/5240770.html KVM 是 OpenStack 使用的最广泛的Hypervisor,本节介绍如何搭建 KVM ...
- iOS总结_UI层自我复习总结
UI层复习笔记 在main文件中,UIApplicationMain函数一共做了三件事 根据第三个参数创建了一个应用程序对象 默认写nil,即创建的是UIApplication类型的对象,此对象看成是 ...
随机推荐
- Windows10家庭版安装docker
在公司,一直使用mac系统,在mac上安装使用docker还是比较方便的,可本人心血来朝,家里是win10 home版,就想在windows上刷一刷. 好了,废话不多说,直接上干货. 为了不误导广大爱 ...
- 四、python学习-正则表达式
正则表达式 import re lst = re.findall(正则表达式,需要匹配的字符串) findall 把所有匹配到的字符串都搜出来,返回列表 不能把分组内容和匹配内容同时显示出来 sear ...
- Leedcode算法专题训练(分治法)
归并排序就是一个用分治法的经典例子,这里我用它来举例描述一下上面的步骤: 1.归并排序首先把原问题拆分成2个规模更小的子问题. 2.递归地求解子问题,当子问题规模足够小时,可以一下子解决它.在这个例子 ...
- (十七)VMware Harbor 垃圾清理
1. 在线垃圾清理 注意:从Harbor中删除镜像时不释放空间,垃圾收集是通过从清单中不再引用文件系统中删除blob来释放空间的任务. 注意:在执行垃圾收集时,Harbor将进入只读模式,并且禁止对d ...
- element UI el-autocomplete 带输入建议的输入框
项目需求:需要用户在输入框中输入公司 全名 但是为了避免用户输入不全 需要做一个带输入建议的输入框 参考:https://www.jianshu.com/p/de922caf337c
- 使用Docker及k8s启动logstash服务
前提:搭建好elasticsearch和kibana服务 下载镜像,需要下载与elasticsearch和kibana相同版本镜像 docker pull docker.elastic.co/logs ...
- 官宣 MAUI 在.NET Preview 3的最新进展
我们在.NET 6 Preview 3中交付了.NET多平台应用UI的移动和桌面开发的最新进展.此版本添加了Windows平台和WinUI 3,改进了基本应用程序和启动构建器,添加了原生生命周期事件, ...
- Python中的Pexpect模块的简单使用
Pexpect 是一个用来启动子程序并对其进行自动控制的 Python 模块. Pexpect 可以用来和像 ssh.ftp.passwd.telnet 等命令行程序进行自动交互.以下所有代码都是在K ...
- 什么?这么精髓的View的Measure流程源码全解析,你确定不看看?
前言 Android开发中我们平时接触最多的是各种View, View是一个比较大的体系,包含了绘制流程.事件分发.各种动画.自定义View 等等.前几天我写了一篇事件分发源码解析的文章, 今天我们来 ...
- 【JavaScript】Leetcode每日一题-青蛙过河
[JavaScript]Leetcode每日一题-青蛙过河 [题目描述] 一只青蛙想要过河. 假定河流被等分为若干个单元格,并且在每一个单元格内都有可能放有一块石子(也有可能没有). 青蛙可以跳上石子 ...