KVM虚拟机配置笔记
该系列文章只是本人的学习笔记,文章中的文字描述提取自《Linux鸟哥私房菜》《Linux运维之道》等书中的重点内容,部分内容是在培训Linux运维时总结的笔记,化繁为简能够在工作中快速复习掌握重点,并不代表个人立场,但转载请加出处,并注明参考文献。
虚拟化是构建云计算基础架构不可或缺的关键技术之一,云计算的云端系统,其实质上就是一个大型的KVM分布式系统,虚拟化通过在一个物理平台上虚拟出更多的虚拟平台,而其中的每一个虚拟平台则可以作为独立的终端加入云端的分布式系统.比起直接使川物理平台,虚拟化在资源的有效利用,动态调配和高可靠性方而有着巨大的优势.利用虚拟化,企业不必抛弃现有的基础架构即可构建全新的信息基础架构,从而更加充分地利用原有的IT投资,可以说虚拟化是云计算不可缺少的重要组件.
本小结内容将主要介绍一下KVM虚拟机的一些原理性的东西,包括常用的虚拟化软件厂商等,KVM章节所有内容参考KVM虚拟化技术-实战与原理解析
这本书,文中的内容均为个人随笔与总结,没有任何商业目的,只为工作方便使用.
虚拟化其实是一个广义上的术语,它是指计算机系统在虚拟的环境上运行,而不是真是主机,主要目的是为了简化管理,优化资源的解决方案,打个比方你现在有一台64核的主机,但是你的主机资源并不会全部利用起来,想一下会不会造成资源的浪费呢,在这里虚拟化就起到了至关重要的作用啦,它可以轻易地分配我们的主机资源避免浪费等.
在X86平台虚拟化技术中,新引入的虚拟化层通常称为虚拟机监控器 (Vutual Machine Monitor VMM)
,也叫做Hypervisor虚拟机监控器运行的环境,也就是真实的物理平台,称之为宿主机.而虚拟出来的平台通常称为客户机,里向运行的系统对应地也称为客户机操作系统.
虚拟化技术有很多种实现方式,比如软件虚拟化和硬件虚拟化
,再比如全虚拟化和半虚拟化
,接下来我们就看了解一下各种虚拟化的优缺点吧.
软件虚拟化与硬件虚拟化
软件虚拟化: 软件虚拟化,就是在现有的物理平台上,实现对物理平台访问的截获和模拟,常见的软件虚拟机例如QEMU,它是通过纯软件来仿真x86平台处理器的取指、解码和执行,客户机的指令并不在物理平台上直接执行,由于所有的指令都是软件模拟的,因此性能往往比较差,但是可以在同一平台上模拟不同架构平台的虚拟机.
而VMWare的软件虚拟化则使用了动态二进制翻译的技术,虚拟机监控机在可控制的范围内,允许客户机的指令在物理平台下直接运行.但是,客户机指令在运行前会被虚拟机监控机扫描,其中突破虚拟机监控机限制的指令会被动态替换为可以在物理平台上直接运行的安全指令,或者替换为对虚拟机监控器的软件调用这样做的好处是比纯软件模拟性能有大幅的提升,但是也同时失去了跨平台虚拟化的能力.
硬件虚拟化: 硬件虚拟化,就是物理平台本身提供了对特殊指令的截获和重定向的硬件支持,甚至有的硬件会提供额外的资源来帮助软件实现对关键硬件资源的虚拟化,从而提升整体性能,由于硬件虚拟化,无需进行二进制转换,减少了性能上的开销,极大的简化了VMM设计,进而使得VMM能够按通用标准进行编写,性能更加强大.
但是需要注意的是,硬件虚拟化是一整套解决方案,完整的情况下需要使用CPU,主板芯片组,BIOS和软件的支持,缺一不可,只有全部买齐交够了钱,才能够发挥硬件虚拟化的全部性能.
半虚拟化与全虚拟化对比
半虚拟化: 软件虚拟化可以在缺乏硬件虚拟化支持的平台上完全通过VMM软件来实现对各个虚拟机的监控,以保证它们之间彼此独立和隔离,但是付出的代价是软件的复杂度增加性能上损失了,本质上来说,半虚拟化弱化了对虚拟机特殊指令的被动截获要求,将其转化成客户机操作系统的主动通知,但是半虚拟化要通过修改操作系统源代码来实现主动通知.
Xen 就是一个开源半虚拟化技术的一个例子,操作系统作为虚拟服务器在Xen-Hypervisor上运行之前,它必须在内核层面进行某些改变.因此Xen适用于BSD、Linux、Solaris及其他开源操作系统,但不适合 Windows 这些币闭源的的操作系统进行虚拟化处理,因为它们不公开源代码,所以无法修改其内核.
全虚拟化: 与半虚拟化技术不同,全虚拟化为客户机提供了完整的虚拟化X86平台,包括处理器内存和外设,支持任何可以在物理机上运行的操作平台和系统,也无需对操作平台和系统进行任何修改即可实现运行,为虚拟机平台提供了最大的灵活性,这也是全虚拟化无可比拟的优势所在.
近年来随着硬件虚拟化技术的产生,运行于Intel平台的全虚拟化性能已经超越了半虚拟化产品,这一点在x64平台操作系统上表现的更出色,可以语言在将来,全虚拟化必将成为主流的存在趋势.
KVM虚拟化系统简介
KVM 的全称是(Kernel Virtual Machine 内核虚拟机),KVM虚拟机最初是由一个以色列的创业公司Qumranet开发的,作为他们的VDI产品的虚拟机,2006年10月KVM模块的源代码被正式接纳进入Linux Kermel成为内核源代码的一部分、作为一个功能和成熟度都逊于Xen的项目,在这么快的时间内被内核社区接纳,主要原因在于:在虚拟化方兴未艾的同时,内核社区急于将虚拟化的支持包含在内,但是Xen取代内核自身的管理系统资源的架构引起了内核开发人员的不满和抵触,此时KVM就是首选的产品,在2008年RedHat出资1亿700美金收购了Qumranet,从此KVM在RHEL6以后的系统上默认替代了Xen成为了,RedHat的默认虚拟化产品.
KVM功能概述
KVM是基于虚拟化扩展(Intel VT或AMD-V)的x86硬件,是Linux系统完全原生的全虚拟化解决方案,部分的半虚拟化支持,主要是通过半虚拟网络驱动程序的形式用于Linux和Windows客户机系统的,KVM目前设计为通过可加载的内核模块,支持广泛的客户机操作系统,比如 Linux、BSD、Windows、Solaris、RcactOS和AROS Rcsearch operating Systcm.
但需要注意的是,KVM本身不执行任何模拟,需要用户空间程序通过/dev/kvm接口设置一个客户机虚拟服务器的地址空间,向它提供模拟的I/O,并将它的视频显示到宿主机器的屏幕上.
KVM的发展前景
尽管 KVM 是一个相对较新的虚拟机管理程序,但是诞生不久就被 Linux 社区接纳,成为随 Linux 内核发布的轻量级模块,与 Linux 内核集成,使 KVM 可以直接获益于最新的 Linux 内核开发成果,比如更好的进程调度支持、更广泛物理硬件平台的驱动、更高的代码质量,等等.
作为相对较新的虚拟化方案,KVM一直没有成熟的工具可用于管理KVM服务器和客户机,不过现在随着libvirt、virt-manager等工具和OpenStack等云计算平台的逐渐完善,KvM管理工具在易用性方面的劣势已经逐渐被克服.
另外,KVM仍然可以改进虚拟网络的支持、虚拟存储支持、增强的安全性、高可用性、容错性、电源管理、HPC实时支持、虚拟 CPU可伸缩性、跨供应商兼容性、科技可移植性等方面,不过现在KVM开发者社区比较活跃,也有不少大公司的高级工程师参与开发,我们有理由相信很多功能都会在不远的将来得到完善.
◆安装KVM虚拟机◆
1.配置宿主机为网桥
cd /etc/sysconfig/network-scripts
cp -a ifcfg-eno16777728 ifcfg-br0
vim ifcfg-br0
TYPE=Bridge
DEVICE=br0
BOOTPROTO=static
ONBOOT=yes
IPADDR=192.168.1.13
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
DNS1=8.8.8.8
DNS2=114.114.114.114
reboot
2.宿主机的软件安装和配置
yum install -y qemu-kvm libvirt virt-install bridge-utils
3.安装完毕之后,检查模块是否已经加载
lsmod | grep kvm
4.执行下列命令开启虚拟机
systemctl start libvirtd.service
systemctl enable libvirtd.service
◆KVM的创建及管理◆
创建并实现基本管理虚拟机
virt-install -n lyshark -r 256 --vcpus 1 --disk /tmp/lyshark.img,format=qcow2,size=5 --network bridge=br0 --os-type=linux --os-variant=rhel7.0 --cdrom /tmp/rhel-server-7.0_x86_64-dvd.iso --vnc --vncport=5910 --vnclisten=0.0.0.0
-------------------------------------------------------------------------------------------------
[参数说明]
--n #指定虚拟机名称
--r #指定虚拟机内存,单位MB
--disk #指定存储设备及其属性 size:新建磁盘映像的大小单位为GB;磁盘映像格式,如raw、qcow2、vmdk
--os-type #操作系统类型,如linux、unix或windows等;
--os-variant= #某类型操作系统的变体,如rhel5、fedora8等;
--vcpus= #VCPU个数及相关配置
--cpu= #CPU模式及特性,如coreduo等;可以使用qemu-kvm -cpu ?来获取支持的CPU模式;
--os-variant=freebsd8
--os-variant=win7
--os-variant=win7 --disk path=/var/lib/libvirt/iso/virtio-win.iso,device=cdrom
--os-variant=win2k8
--os-variant=win2k8 --disk path=/var/lib/libvirt/iso/virtio-win.iso,device=cdrom
--os-variant=rhel7
-------------------------------------------------------------------------------------------------
virsh list --all #列出所有的虚拟机
virsh dominfo #显示虚拟机信息
yum install virt-top -y
virt-top #显示虚拟机内存和cpu的使用情况
virt-df #显示虚拟机分区信息
virsh destroy #强制关闭
virsh undefine #删除虚拟机
virsh start #启动
virsh shutdown #关闭虚拟机
virsh autostart #设置虚拟机自启动
virsh autostart --disable #关闭虚拟机自启动
virsh console #通过控制窗口登录虚拟机
virsh attach-disk kvm-1 /dev/sdb vbd --driver qemu --mode shareable #给虚拟机添加硬盘
-------------------------------------------------------------------------------------------------
更改内存
# 1. 查看虚拟机当前内存
[root@sh-kvm-1 ~]# virsh dominfo kvm-1 | grep memory
Max memory: 4194304 KiB
Used memory: 4194304 KiB
# 2、动态设置内存为512MB,内存减少
virsh setmem kvm-1 524288
# 注意单位必须是KB
# 3、查看内存变化
# virsh dominfo kvm-1 | grep memory
Max memory: 14194304 KiB
Used memory: 524288 kiB
# 4、内存增加
virsh shutdown kvm-1
virsh edit kvm-1 # 直接更改memory
virsh create /etc/libvirt/demu/kvm-1/xml
# 之后操作1,2,3步骤增加内存
更改CPU
virsh shutdown kvm-1
virsh edit kvm-1
# <vcpu>2</vcpu> # 4 > 2
virsh create /etc/libvirt/demu/kvm-1/xml
磁盘扩容
1. Create a 10-GB non-sparse file:
# dd if=/dev/zero of=/vm-images/vm1-add.img bs=1M count=10240
2. Shutdown the VM:
# virsh shutdown vm1
3. Add an extra entry for ‘disk’ in the VM's XML file in /etc/libvirt/qemu. You can look copy & paste
the entry for your mail storage device and just change the target and address tags. For example:
# virsh edit vm1
<disk type='file' device='disk'>
<driver name='qemu' type='raw' cache='none' io='threads'/>
<source file='/vm-images/vm1.img'/>
<target dev='vda' bus='virtio'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x04'
function='0x0'/>
</disk>
Add:
<disk type='file' device='disk'>
<driver name='qemu' type='raw' cache='none' io='threads'/>
<source file='/vm-images/vm1-add.img'/>
<target dev='vdb' bus='virtio'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x06'
function='0x0'/>
</disk>
# 这里建议使用上面的添加硬盘的方式添加
虚拟机的克隆
将一个虚拟机克隆完毕之后,就可以以此为模板进行克隆,其它虚拟机就不必在一一进行创建,安装操作系统等操作。虚拟机克隆操作的代码如下:
#!/usr/bin/env bash
set -eux
set -o pipefail
vm_path="/var/lib/libvirt/images/vm_os"
for (( i = 0; i <= 9; i ++ ))
do
vm_dir=$vm_path/vm$i
if [ ! -d $vm_dir ]; then
mkdir -p $vm_dir
fi
virt-clone --connect qemu:///system --original vm00 --name vm$i --file $vm_dir/vm"$i"system.img
done
虚拟机磁盘挂载
虚拟机挂载磁盘的命令是virsh attach-disk,卸载磁盘的命令是virsh detach-disk,同样,为了批量操作方便,我们写个脚本来进行处理。
#!/usr/bin/env bash
set -eux
set -o pipefail
vm_path="/var/lib/libvirt/images/vm_disk"
for (( i = 0; i <= 9; i ++ ))
do
vm_dir=$vm_path/vm$i
if [ ! -d $vm_dir ]; then
mkdir -p $vm_dir
fi
fallocate -l 15G $vm_dir/disk_15G.img
virsh attach-disk vm$i --source $vm_dir/disk_15G.img --target sdb --persistent
#virsh detach-disk --domain vm$i --target sdb --persistent
done
KVM虚拟机配置笔记的更多相关文章
- KVM虚拟机配置
KVM 全称是 Kernel-Based Virtual Machine.也就是说 KVM 是基于 Linux 内核实现的,KVM有一个内核模块叫 kvm.ko,只用于管理虚拟 CPU 和内存. 在 ...
- KVM安装配置笔记
系统环境centos6.6 一.KVM安装前系统相关操作: (1)修改内核模式为兼容内核启动 # grep -v "#" /etc/grub.confdevice (hd0) HD ...
- kvm虚拟机配置被克隆rhel6客户机的网卡
例子:配置被克隆rhel6客户机的网卡 rhel6的网卡是通过udev规则来进行命名每个网卡都有不一样的macudev规则是根据网卡的mac来进行识别克隆出来的客户机,为了遵守每个网卡的mac都是全球 ...
- KVM虚拟机两种配置的概念不同之处
KVM虚拟机配置的两种方式之间的不同之处 NAT方式 NAT模式中,让虚拟机借助NAT(网络地址转换)功能,通过宿主机器所在的网络来访问公网. NAT模式中,虚拟机的网卡和物理网卡的网络,不在同一个网 ...
- KVM虚拟机管理——虚拟机克隆
1. 概述2. 部署基本操作系统虚拟机3. 配置虚拟机3.1 修改/etc/sysconfig/network3.2 删除/etc/sysconfig/network-scripts/ifcfg-et ...
- CentOS 6.9下KVM虚拟机通过virt-clone克隆虚拟机(转)
一.virt-clone概述 1.virt-clone作用简介 virt-clone主要是用来克隆kvm虚拟机,并且通过Options.General Option.Storage Configura ...
- 如何在CentOS6.4系统上安装KVM虚拟机
CentOS6.4系统上安装KVM虚拟机 备注:以下操作说明是经过实验验证后总结出来的笔录,有需要的朋友可以进行参考,以下是基于VMware12.5.2虚拟机版本上安装的实验环境. 一.安装KVM ...
- kvm虚拟化学习笔记(四)之kvm虚拟机日常管理与配置
KVM虚拟化学习笔记系列文章列表----------------------------------------kvm虚拟化学习笔记(一)之kvm虚拟化环境安装http://koumm.blog.51 ...
- kvm虚拟机日常管理和配置操作命令梳理
KVM虚拟机的管理主要是通过virsh命令对虚拟机进行管理.1)查看KVM虚拟机配置文件及运行状态KVM虚拟机默认配置文件位置: /etc/libvirt/qemu/autostart目录是配置kvm ...
随机推荐
- SQL查询中连接--学习
一.开头说 不出意外,还是先说下SQL中所有的联接类型: 内连接.外连接(左连接.右连接 .全连接).交叉连接 然后接下来就是依次学习下各种连接的使用效果 二.各种连接秀 首先准备两张表 学生表: ...
- linux服务器使用Jenkins+gradle+git打apk包,报错Gradle build daemon disappeared unexpectedly (it may have been killed or may have crashed)
linux服务器使用Jenkins+gradle+git打apk包,遇到的错误Gradle build daemon disappeared unexpectedly (it may have bee ...
- Linux 学习笔记 1
1. 名词解释 GNU: 目标是创建一套完全自由的操作系统:包含了可自由使用的软件,如Emacs,GCC,Tex,X Window:制定了3个自由软件协议:GPL,LGPL,GFDL GPL(Gen ...
- Git多账号配置,同一电脑多个ssh-key的管理
为什么有这种需求? 在我们开发过程中,可能会遇到使用同一台机器,既要向公司git服务器提交代码,也要向gitlib或者gitee等 git仓库提交代码,2个仓库设置的用户名信息,不一样,此时需要用到多 ...
- select下拉option跳转页面
<select class="dropdown" name="list" onchange="window.location=this.valu ...
- 3D 数据
1.3D 图 首先在进行 3D Plot 时除了导入 matplotlib ,还要额外添加一个模块,即 Axes 3D 3D 坐标轴显示: import numpy as np import matp ...
- RestTemplate 中文乱码解决
@Bean public RestTemplate restTemplate() { RestTemplate restTemplate = new RestTemplate(); restTempl ...
- Autel MaxiTPMS TS601 Wireless TPMS Sensor Reset Relearn Activate Programming Tool
Why Choose Autel TPMS TS601? MaxiTPMS TS601 is a TPMS tool with highest performance in the world. It ...
- View操作 swift
//创建View let view1 =UIView() let view2 =UIView(frame: CGRectMake(,, ,)) let view3 =UIView(frame: CGR ...
- 解决win系统无法安装.NET Framework 4.0 4.6 原因是HRESULT0xc8000222
1.开始----- 运行------- cmd ----- 键入net stop WuAuServ回车(停止windows update服务) 2.开始----- 运行----键入%windir%回车 ...