(转)kvm初识
一 虚拟化介绍
1 常见虚拟化软件
VMware系列
VMware workstation、VMware vsphere(VMware esxi)、VMware Fusion(Mac)
Xen 开源 半虚拟化
XenServer 商业,厂商Ctirx,基于Xen的
KVM 开源 基于linux内核模块
Hyper-V 商业,厂商微软
Openvz 开源 基于linux 虚拟机和宿主机共用一个内核
VirtualBox 开源 Sun公司开发 Oracle收购Sun
http://developer.huawei.com/ict/forum/thread-23385-1-1.html
2 虚拟化架构
参考 http://developer.huawei.com/ict/forum/thread-23385-1-1.html
二 kvm
1 为什么选择kvm
Vmware,Xen,Hyper-V 通通收费,剩下openvz了,可是虚拟机要跟宿主机共用内核,比如要装一个windos虚拟机,实现不了。kvm免费的,而且是作为linux内核的一个功能模块而存在。因此yum安装后就能使用,非常方便。
2 kvm 技术
KVM是以色列初创公司Qumranet开发,2008年9月RedHat公司收购了Qumranet
KVM是Linux内核的一个模块,它把Linux内核变成了一个Hypervisor
KVM是完全开源的,RedHat基于KVM的虚拟化解决方案叫做RHEV
KVM在Linux操作系统里面以进程的形式出现,由标准的Linux调度程序进行调度,这使得KVM能够使用Linux内核的已有功能
只有一个KVM内核模块还不能实现虚拟化的全部功能,就好比操作系统只有内核还不能成为一个完整的操作系统一样
QEMU是一个开源的虚拟化软件,纯软件,可以虚拟化所以的硬件,性能不强
KVM基于QEMU开发了一个能够运行在用户空间的工具QEMU-KVM
磁盘、网络设备等都是通过QEMU-KVM这个工具模拟出来的
KVM和QEMU-KVM通信是通过/dev/kvm实现的
libvirt是用来管理KVM虚拟机的API,其命令为virsh
3 Centos7上安装KVM
前提是CPU支持虚拟化
虚拟机设置内存2G,增加一个50G的虚拟磁盘,处理器2核,虚拟化引擎两个虚拟化相关的选项打上对勾
关闭iptables或者firewalld
systemctl stop iptables
systemctl stop firewalld
关闭selinux
setenforce 0
vim /etc/selinux/config
设置SELINUX=disabled
格式化新磁盘,挂载到/kvm
mkfs.ext4 /dev/sdc
blkid /dev/sdc
mkdir /kvm
mount /dev/sdc /kmv
添加开机自动挂载
vim /etc/fstab
对照之前的挂载规则,增加一条
/dev/sdc /kvm ext4 defaults 0 0
下载一个centos7的镜像文件
检查cpu参数是否支持虚拟化 grep -Ei 'vmx|svm' /proc/cpuinfo
安装kvmyum install -y virt-* libvirt bridge-utils qemu-img
4 配置网卡并安装centos7
配置网卡,增加桥接网卡
设置一个br0网卡,TYPE为Bridge,IP地址设置为ens33的ip
ens33配置文件里把IP地址去掉,增加BRIDGE=br0
检查KVM模块是否加载lsmod|grep kvm
启动libvirtd服务systemctl start libvirtdbrctl show可以看到两个网卡br0和virbr0
命令行安装centos7virt-install --name=lvlinux01 --memory=512,maxmemory=1024 --vcpus=1,maxvcpus=2 --os-type=linux --os-variant=rhel7 --location=/tmp/CentOS-7-x86_64-DVD-1708.iso --disk path=/kvm/lvlinux01.img,size=10 --bridge=br0 --graphics=none --console=pty,target_type=serial --extra-args="console=tty0 console=ttyS0"
5 虚拟机管理
安全完虚拟机需要重启,要退出虚拟机使用快捷键ctrl ]ps aux |grep kvm//查看kvm进程virsh list //查看虚拟机列表,只能看到运行的虚拟机virsh list --all //查看虚拟机列表,包括未运行的虚拟机virsh console lvlinux01//进入指定虚拟机virsh shutdown lvlinux01 //关闭虚拟机virsh start lvlinux01 //开启虚拟机virsh destroy lvlinux01//类似stop,这个是强制停止virsh undefine lvlinux01//彻底销毁虚拟机,会删除虚拟机配置文件,virsh list --all就看不到了ls /etc/libvirt/qemu/ //可以查看虚拟机配置文件virsh autostart lvlinux01//宿主机开机该虚拟机也开机virsh autostart --disable lvlinux01//解除开机启动virsh suspend lvlinux01//挂起virsh resume lvlinux01//恢复
6 虚拟机克隆virsh shutdown lvlinux01virt-clone --original lvlinux01 --name lvlinux02 --file /kvm/lvlinux02.img
--original指定克隆源虚拟机
--name指定克隆后的虚拟机名字
--file指定目标虚拟机的虚拟磁盘文件
如果lvlinux01虚拟机开机状态,则提示先关闭或者暂停虚拟机
7 快照管理
创建快照 virsh snapshot-create lvlinux01
raw格式的虚拟磁盘不支持做快照,qcow2支持qemu-img info /kvm/lvlinux01.img //查看lvlinux01.img信息,同时会查看到快照列表virsh snapshot-list lvlinux01//列出所有快照virsh snapshot-current lvlinux01//查看当前快照版本ls /var/lib/libvirt/qemu/snapshot/lvlinux01//查看所有快照配置文件virsh snapshot-revert lvlinux01 1513440854//恢复指定快照virsh snapshot-delete lvlinux01 1513440854//删除快照
8 磁盘格式
虚拟磁盘常用格式raw、qcow2qemu-img info /kvm/lvlinux01.img//查看虚拟磁盘格式qemu-img create -f raw /kvm_data/lvlinux01_2.img 2G//创建2G的raw格式磁盘
把raw格式的磁盘转换为qcow2格式qemu-img convert -O qcow2 /kvm/lvlinux01_2.img /kvm/lvlinux01_2.qcow2
转换后用ls -lh查看磁盘文件的大小,可以看到qcow2文件比较小,raw文件大小和我们指定空间大小一样是2G
raw格式的磁盘性能比qcow2要好,但是raw格式的磁盘无法做快照
给lvlinux02转换为raw格式的磁盘virsh shutdown lvlinux02qemu-img convert -O raw /kvm/lvlinux02.img /kvm/lvlinux02_3.rawvirsh edit lvlinux02//更改格式和文件路径virsh start lvlinux02
9 磁盘扩容 – raw格式
qemu-img resize /kvm/lvlinux02_3.raw +2G
qemu-img info /kvm/lvlinux02_3.raw
virsh destroy lvlinux02
virsh start lvlinux02
virsh console lvlinux02
fdisk -l 查看磁盘情况,并分新的分区
除了对已有磁盘扩容外,还可以额外增加磁盘
qemu-img create -f raw /kvm/lvlinux02_2.raw 5G
virsh edit lvlinux02 //增加<disk>…</disk>,注意更改source、target、slot
virsh destroy lvlinux02
virsh start lvlinux02
磁盘扩容 – qcow2格式qemu-img resize /kvm/lvlinux01.img +2G
若提示qemu-img: Can't resize an image which has snapshots,需要删除快照qemu-img info /kvm/lvlinux01.img virsh destroy lvlinux01virsh start lvlinux01virsh console lvlinux01
fdisk -l 查看磁盘情况,并分新的分区
除了对已有磁盘扩容外,还可以额外增加磁盘qemu-img create -f qcow2 /kvm/lvlinux01_2.img 5Gvirsh edit lvlinux01 //增加<disk>…</disk>,注意更改source、target、slotvirsh destroy lvlinux01virsh start lvlinux01
10 调整cpu、内存、网卡virsh dominfo lvlinux01 //查看配置virsh edit lvlinux01//更改如下部分内容
<memory unit='KiB'>1048576</memory>
<currentMemory unit='KiB'>524288</currentMemory>
<vcpu placement='static' current='1'>2</vcpu>
virsh shutdown lvlinux01virsh start lvlinux01virsh setmem lvlinux01 800m//动态调整内存 virsh dumpxml lvlinux01 > /etc/libvirt/qemu/lvlinux01.xml//需要把配置写入到配置文件里virsh setvcpus lvlinux01 2 //动态调整cpu数量virsh domiflist lvlinux01//查看网卡virsh attach-interface lvlinux01 --type bridge --source virbr0//增加一块新的网卡,并设置为nat网络模式(virbr0类似vmware的vmnet8),这里如果写--source br0,则网络模式为桥接virsh dumpxml lvlinux01 > /etc/libvirt/qemu/lvlinux01.xml//需要把配置写入到配置文件里
11 迁移虚拟机
该方式要确保虚拟机是关机状态virsh shutdown lvlinux01virsh dumpxml lvlinux01 > /etc/libvirt/qemu/lvlinux03.xml // 如果是远程机器,需要把该配置文件拷贝到远程机器上virsh domblklist lvlinux01 //查看虚拟机磁盘所在目录rsync -av /kvm/lvlinux01.img /kvm/lvlinux03.img //如果是迁移到远程,则需要把该磁盘文件拷贝到远程机器上vi /etc/libvirt/qemu/lvlinux03.xml //因为是迁移到本机,配置文件用的是lvlinux01子机的配置,不改会有冲突,所以需要修改该文件,如果是远程机器不用修改
修改domname: <name>lvlinux03</name>
修改uuid(随便改一下数字,位数不要变)
修改磁盘路径virsh define /etc/libvirt/qemu/lvlinux03.xml//定义新虚拟机virsh list --all //会发现新迁移的lvlinux03虚拟机
(转)kvm初识的更多相关文章
- 初识ASP.NET 5中的Sake与KoreBuild
从github上签出基于ASP.NET 5的MVC 6的源代码进行编译,发现有2个编译命令: build.cmd是针对Windows的编译命令,build.sh是针对Mac/Linux的编译命令,这本 ...
- 深入浅出 kvm qemu libvirt
在所谓的kvm技术中,应用到的其实有2个东西:qemu+kvmkvm负责cpu虚拟化+内存虚拟化,实现了cpu和内存的虚拟化,但kvm不能模拟其他设备:qemu是模拟IO设备(网卡,磁盘),kvm加上 ...
- 初识OpenStack(1)
初识OpenStack(1) 首先 先来说说我与openstack的渊源吧.那是在上个月中旬.学张的一个朋友给我打电话说让一起来搞一个云平台,当时也不知道是什么.就非常高兴的答应下来了,到了周末,就过 ...
- 我们一起来学Shell - 初识shell
文章目录 Shell 的分类 `bash` `csh` `ksh` `tcsh` `sh` `nologin` `zsh` Shell 能做什么 bash 环境变量文件 `/etc/profile` ...
- [原] KVM 虚拟化原理探究(1)— overview
KVM 虚拟化原理探究- overview 标签(空格分隔): KVM 写在前面的话 本文不介绍kvm和qemu的基本安装操作,希望读者具有一定的KVM实践经验.同时希望借此系列博客,能够对KVM底层 ...
- 基于本地存储的kvm虚拟机在线迁移
基于本地存储的kvm虚拟机在线迁移 kvm虚拟机迁移分为4种(1)热迁移基于共享存储(2)热迁移基于本地存储(3)冷迁移基于共享存储(4)冷迁移基于本地存储 这里介绍的是基于本地存储的热迁移 动态块迁 ...
- [原] KVM 虚拟化原理探究 —— 目录
KVM 虚拟化原理探究 -- 目录 标签(空格分隔): KVM KVM 虚拟化原理探究(1)- overview KVM 虚拟化原理探究(2)- QEMU启动过程 KVM 虚拟化原理探究(3)- CP ...
- [原] KVM 虚拟化原理探究(6)— 块设备IO虚拟化
KVM 虚拟化原理探究(6)- 块设备IO虚拟化 标签(空格分隔): KVM [toc] 块设备IO虚拟化简介 上一篇文章讲到了网络IO虚拟化,作为另外一个重要的虚拟化资源,块设备IO的虚拟化也是同样 ...
- [原] KVM 虚拟化原理探究(5)— 网络IO虚拟化
KVM 虚拟化原理探究(5)- 网络IO虚拟化 标签(空格分隔): KVM IO 虚拟化简介 前面的文章介绍了KVM的启动过程,CPU虚拟化,内存虚拟化原理.作为一个完整的风诺依曼计算机系统,必然有输 ...
随机推荐
- python之基础总结(飞机大战)
一.学习python有一段时间了,总体上手还是挺好的,但是有些东西还是和Java存在着一定的区别,这里主要是通过学习,然后自己去编写一个案例.从中学习到的一些东西,这里分享出来,如果存在不正确的地方还 ...
- 【转】使用Scanner输入字符串时next()和nextLine()区别
在实现字符窗口的输入时,很多人更喜欢选择使用扫描器Scanner,它操作起来比较简单.在编程的过程中,我发现用Scanner实现字符串的输入有两种方法,一种是next(),一种nextLine(),但 ...
- 【问题】man命令打开的手册上链接怎么展开?
参考:How to follow links in linux man pages? 前言 在使用man查看命令帮助的时候,有些文字下面会有下划线.给人的感觉是一个链接,但是又打不开.那么到底是不是链 ...
- STM32 LoRaWAN探索板B-L072Z-LRWAN1中文用户手册
UM2115用户手册 支持LoRaWAN和 LPWAN协议的STM32L0探索套件 前言 B-L072Z-LRWAN1探索套件采用了 Murata公司的CMWX1ZZABZ-091 LoRa模块.该探 ...
- python数据类型:dict(字典)
一.字典的简单介绍 字典(dict)是python中唯一的一个映射类型.他是以{}括起来的键值对组成. 语法: {key1:value1,key2:value2......} 注意:key必须是不可变 ...
- 某网站的videojs的配置及操作
某网站的videojs的配置及操作 一.总结 一句话总结: 多参照参照别人的例子就好,省事 1.videojs如何获取用户当前视频的位置? this.currentTime() 2.回到视频开始处? ...
- MySQL进阶18- 存储过程- 创建语句-参数模式(in/out/inout-对应三个例子) -调用语法-delimiter 结束标记'$'- 删除/查看/修改-三个练习
/* MySQL-进阶18 存储过程 和 函数 存储过程和函数:类似于java中的方法 好处: 1.提高代码的重用性 2.简化操作 */ #存储过程 /* 含义: 一组已经预见编译好的SQL语句的集合 ...
- 【记忆化搜索】[NOIP-2017--普及组] -- 棋盘
[题目描述] 原题目链接地址: 有一个m × m的棋盘,棋盘上每一个格子可能是红色.黄色或没有任何颜色的.你现在要从棋盘的最左上角走到棋盘的最右下角. 任何一个时刻,你所站在的位置必须是有颜色的( ...
- 运维CMDB建设思路
在我们日常的运维工作中,面对着大量的基础设施和软件服务,该如何管理?这个管理的原则又是什么?粒度该如何控制?我们是否可以建立一个统一的标准模型来管理以上对象?管理过程中,如何降低人力成本?资源对象的生 ...
- 判断字符串是否是IP地址
#include <stdio.h>#include <string.h> bool isIP(const char* str); int main(){ char str[] ...