[TOC]
虚拟化:通过虚拟化工具把cpu,内存,硬盘等真实硬件资源给模拟成更少的虚拟硬件资源。进行虚拟化的好处是,最大限度的利用硬件资源。也是云计算的基础。下图为虚拟化模型:
虚拟化分类:
软件级别,所有硬件通过模拟器模拟出来(qemu)
硬件级别,通过VMM(虚拟机监视器),将硬件分配和管理,操作系统运行在建立好的vm上(xen,VMware[ESX,workstation],kvm,virtualbox)
操作系统级别,虚拟机操作系统和宿主操作系统共享,可以模拟上千个虚拟机出来(openvz)
半虚拟化和全虚拟化
半虚拟化:半虚拟化,宿主机和客户机需要更改操作系统的内核,客户机知道宿主机的存在,两者需要系统合作。(Xen支持虚拟化),半虚拟化性能较好。
全虚拟化:全虚拟化为客户机提供了完整的虚拟硬件资源,客户机不需要做任何更改,它不知道宿主机的存在(kvm属于全虚拟化,VMware也是全虚拟化)
Xen和kvm比较
1.不管CPU支持不支持虚拟化,xen都可以安装,而kvm必须要CPU支持虚拟化才行
2.xen支持半虚拟化也会支持全虚拟化,kvm仅支持全虚拟化
3.安装xen后,xen会替换原来的内核接管系统管理,而kvm只是Linux内核的一个模块,依然由原系统内核管理系统
4.xen出现的时间比kvm早,由于kvm不需要接管内核,收到大多数内核的喜爱并使用
5.在xen的体系结构中,xen hypervisor运行与硬件之上,并且将系统资源进行虚拟化,将虚拟户的资源分配给上层的虚拟机(vm),然后通过虚拟机vm来运行相应的客户机操作系统
VMware centos7 64位kvm虚拟化配置
一、实验前准备
配置kvm虚拟化需要我们的CPU支持虚拟化,有的机器支持但是还需要在BIOS开启。
我们使用一个已经创建的虚拟机作为宿主机,配置如下
1.内存4G
2.有一块50G的磁盘
3.配置该虚拟机支持虚拟化
4.关闭selinux和清除iptables规则
二、安装kvm
2.1、检查你的系统是否支持虚拟化
|
|
如果有输出内容,则支持。Intel的CPU支持vmx,AMD的CPU支持svm
2.2、安装kvm
安装时,我们还需要安装相应的依赖包
|
|
2.3、检查kvm是否加载
|
|
- 如果没有,需要执行以下
modprobe kvm-intel
- 如果还没有,需要我们重新启动宿主机
2.4、配置网卡
(1)配置ens33
|
|
- 配置BRIDGE表示桥接
(2)配置br0
|
|
- 需要将类型TYPE设置为Bridge
(3)查看是否成功
配置完成后需要重启network服务
|
|
2.5、启动libvirtd和messagebus
|
|
查看网络接口列表
|
|
三、创建虚拟机
3.1、创建虚拟机存放目录
(1)将50G的磁盘挂载到系统
|
|
(2)创建虚拟机存放目录
该目录的所在分区必须足够大
|
|
3.2、创建虚拟机
3.2.1、使用本地镜像文件
(1)首先将centos-7的光盘文件上传到宿主机
(2)创建虚拟机命令
|
|
- –name,指定虚拟机的名字
- –memory,指定内存大小,maxmemory限制最大内存
- –vcpus,指定分配CPU数量,maxvcpus限制最大CPU数量
- –os-type,指定安装系统类型
- –os-variant,指定系统版本
- –location,指定安装介质地址,可以是网络地址,也可以是本地的绝对路径,这里为镜像文件路径
- –disk path,指定虚拟磁盘位置,size指定磁盘大小。默认创建的磁盘文件为qcow2格式。在centos6中默认创建的磁盘文件为raw格式,不能拍摄快照。可以进行先创建qcow2文件,示例:qemu-img create -f qcow2 -o preallocation=metadata /kvm/test001.img 10G; –disk path=/mnt/kvm/test002.qcow2,format=qcow2,size=10,bus=virtio
- –bridge,指定网络连接类型
- –graphics none,指定安装通过那种类型安装,我们不需要使用图形安装
- –console pty,指定控制台类型
- –extra-args,设定内核参数
(3)配置安装选项
- 1、设置语言
- 2、设置时间时区
- 3、设置安装源
- 4、设置安装方式(默认为最小化安装)
- 5、设置安装位置
- 6、kdump是在系统崩溃、死锁或者死机的时候用来转储内存运行参数的一个工具和服务(默认不安装)
- 7、设置网卡
- 8、设置root密码
- 9、创建用户
- “q”为退出,”b”为开始安装,”r”为刷新配置
我们需要设置一下选项:
a.设置时区
|
|
b.设置安装源
|
|
c.设置安装方式
|
|
d.设置安装位置
|
|
e.设置root密码
|
|
- 会自动检测密码,如果太弱需要我们确认
f.设置ip,可也可以不设置,等安装完成后再设置
|
|
g.开始安装
|
|
安装时,可能安装源和安装方式还没有读取到。使用”r”刷新即可
经过等待后,系统会自动重启让我们登录系统。
3.2.2、使用网络安装
|
|
- 将location修改为163的源即可,不过安装时超级慢,因为需要下载软件包。所以建议使用本地镜像文件安装
四、virsh常用操作
libvirt是Linux上的虚拟化库,是长期稳定的C语言API,支持KVM/QEMU、Xen、LXC等主流虚拟化方案。链接:http://libvirt.org/,virsh是libvirt对应的shell命令。
(1)查看子机
|
|
- –all,可以查看到未开启的子机
(2)开启子机
类似我们在VMware开启虚拟机
|
|
(3)关闭
类似我们在VMware关闭虚拟机
|
|
(4)让子机随着宿主机开机自启动
在VMware中,我们还需要手动开启虚拟机。在kvm中,我们可以设置子机自启动
|
|
(5)删除子机
|
|
- 子机配置文件位置:/etc/libvirt/qemu/*.xml
(6)恢复子机
如果我们使用virsh undefine test01
误删除了子机,只要我们不删除子机配置文件,我们就可以恢复。
我们可以使用该配置文件创建新的子机
首先,我们拷贝其他子机的配置文件
|
|
修改新的子机配置文件,修改UUID,修改source file=’/mnt/kvm/test01.qcow2’
重新定义子机
|
|
现在就可以启动了
|
|
(7)挂起子机
|
|
(8)恢复子机
|
|
五、克隆虚拟机
(1)克隆命令
|
|
- –original,指定克隆的源,源机器需要为关闭状态
- –name,指定克隆后的子机名称
- –file,指定克隆子机的虚拟磁盘文件位置
- 克隆完成后可以直接登录克隆虚拟机
virsh start template --console
六、快照管理
6.1、创建快照
(1)创建命令
|
|
- snapshot-create,后面跟要创建快照的虚拟机
- 快照文件存放位置为:
(2)创建快照的磁盘文件
在centos6中,默认创建的虚拟机磁盘文件为raw格式,我们可以使用以下命令查看磁盘文件格式
|
|
如果是raw格式的磁盘文件,我们可以执行以下命令修改为qcow2格式
|
|
(3)列出快照
|
|
- snapshot-list,后面跟子机名称
6.2、恢复和删除快照
(1)恢复快照
恢复快照的前提是子机需要关闭
|
|
- snapshot-revert,后面跟快照名称,即列表中的那一行数字
(2)删除快照
|
|
- 后面跟子机,还有要删除的快照名称
七、磁盘扩容
centos6创建快照后无法扩容
针对子机test01扩容
(1)查看现有磁盘容量
可以使用查询磁盘信息命令查询
|
|
(2)增加磁盘容量
|
|
(3)查看是否增加磁盘
|
|
(3)挂载增加的磁盘空间
此时使用df -h
是无法看到增加的磁盘空间的,所以需要我们分区并格式化
|
|
添加完成后,需要我们将这个/dev/vd3添加到vm里面去
如果/dev/vda3不存在,需要我们重启一下系统
|
|
创建物理卷
|
|
列出物理卷
|
|
- cl为卷组
将/dev/vda3加入卷组cl
|
|
查看卷组cl
- 还有2G剩余
查看逻辑卷
|
|
将/dev/vda3的容量加入到root中
|
|
重新获得逻辑卷分区大小
|
|
- centos6使用resize2fs
八、增加磁盘
(1)创建磁盘
|
|
(2)关闭虚拟机
|
|
(3)编辑test01配置文件
|
|
- dev需要与之前的不同,使用”vdb”
(4)启动虚拟机进行操作
|
|
九、调整CPU内存,网卡
查看子机的硬件信息
|
|
9.1、调整cpu
编辑子机配置文件
|
|
- 1表示当前CPU数,2表示最大CPU数
- 如果我们设置的CPU大于最大CPU数,会报错
重新启动子机,使配置生效
|
|
9.2、调整内存
|
|
重新启动子机,使配置生效
|
|
9.3、添加网卡
查看子机网卡
|
|
增加子机网卡
这种方法适合自己是running状态,并且为在线增加
|
|
此时只存在于内存中,配置文件里添加了相关配置,但是我么已重启自己就没有了,所以我们只需要再执行以下命令即可
|
|
也可以在子机不是running状态,我们修改自己配置文件添加网卡
十、kvm虚拟主机迁移
(1)确认配置文件和磁盘文件位置
该方式需要确保虚拟机是关机状态
|
|
(2)同步配置文件和磁盘文件
将配置文件和磁盘文件同步到远程机器
|
|
如果是同步到本地,同步后还需要我们做以下操作
|
|
|
|
使用virsh list --all
即可查看test001