KVM入门
KVM
KVM(Kernel-based Virtual Machine)是众多虚拟化技术之一,它是Linux内核中的一个模块,该模块依赖于CPU,如果CPU支持虚拟化,那么该模块才可以被加载。KVM技术是硬件层面的虚拟化,它会为我们虚拟各种硬件设备,这样我们可以在已有操作系统上运行别的操作系统。
检查CPU是否支持虚拟化
sudo apt install cpu-checker -y
sudo kvm-ok
先安装cpu-checker工具,然后使用其带的kvm-ok命令检查kvm模块是否加载
- 显示‘/dev/kvm does not exist’则表示kvm模块未被加载,执行sudo modprobe kvm_intel命令进行加载
- 当然加载kvm模块需要开启CPU虚拟化技术,在BIOS中设置Intel Virtualization Technology为Enable
注:lsmod | grep kvm也可以查看kvm模块是否加载
安装软件包
安装服务端软件包
sudo apt install ubuntu-virt-server
软件包ubuntu-virt-server依赖的两个主要的软件包是qemu-kvm和libvirt-bin。
- qemu将内核中的虚拟功能暴露给用户,提供了用户空间的虚拟机环境
- libvirt是一个工具库,通过它可以方便的管理各种虚拟机软件。Libvirt几乎支持所有常见的虚拟技术,包括KVM,Xen,LXC,VMware,VirtualBox等
安装客户端软件包
sudo apt-get install virtinst
该软件包提供4个命令来管理虚拟机
- virt-conver --------把一种格式的虚拟机转为另一种格式
- virt-clone --------克隆虚拟机
- virt-image -------创建虚拟机镜像
- virt-install -------创建新的虚拟机
创建虚拟机
配置虚拟网卡
默认情况下,KVM新创建的虚拟机使用NAT网络(虚拟机可以访问外面,外面看不到它)。这种NAT机制不通过网卡,只通过内核内部的IP转发来进行数据传输,所以外面的机器访问不到虚拟机。为了能让外面的机器访问虚拟机,需要创建虚拟网桥,把虚拟机的虚拟网卡与外部物理网卡通过网桥桥接起来。
1. 启动IP转发
编辑/etc/sysctl.conf文件
# 去掉该行前面的#号,开启转发功能
net.ipv4.ip_forward = 1
执行sudo sysctl -p命令使配置生效
2. 创建桥接设备
在宿主机上安装bridge-utils软件包:
sudo apt-get install bridge-utils
编辑/etc/network/interfaces,然后添加虚拟网桥网桥br0,将物理网卡enp4s0f2添加到网桥。
注:将物理网卡enp4s0f2添加到br0后,物理网卡的IP地址将失去作用,所以下面的配置文件中没有为enp4s0f2指定IP
[...]
auto enp4s0f2
iface enp4s0f2 inet manual
auto br0
iface br0 inet dhcp
address 10.10.10.2 网桥IP地址
netmask 255.255.255.0 掩码
gateway 10.10.10.1
bridge_ports enp4s0f2 #将物理网卡添加到虚拟网桥中
bridge_stp off
bridge_maxwait 0
bridge_fd 0
[...]
重启网络
#sudo /etc/init.d/networking restart
或
#sudo service networking restart
重启网络之后,执行brctl show查看网桥是否添加成功,下面显示我的机器已成功创建网桥,并将enp4s0f2网卡添加到网桥中
3. 创建虚拟机
首先准备好镜像文件,我这里准备了ubuntu-server-adm64.iso镜像文件,然后通过前面提到的命令来创建虚拟机
sudo virt-install \
--name=myvps1 \
--ram=512 \
--network bridge:br0 \
--disk path=/var/lib/libvirt/images/myvps1.img,bus=virtio,size=10 \
--graphics vnc,listen=0.0.0.0
--noautoconsole \
--hvm \
--cdrom ./ubuntu-server-adm64.iso
下面解释一下各个参数的作用:
- --name=myvps1 虚拟机名称为myvps1
- --ram=512 虚拟机内存大小为512MB
- --network bridge:br0 指定网络为网桥设备,后面具体解释
- --disk 指定虚拟盘的位置,虚拟盘可以是一个文件,分区或者一个逻辑卷。例子指定为myvps1.img文件,空间为10G,总线使用virtio总线
- --graphics 指定图形界面,例子中指定vnc远程桌面控制,即我们可以使用vnc客户端对虚拟机进行远程桌面控制
- --noautoconsole 不要自动连接到虚拟机控制台,主要因为我们安装的服务器版虚拟机,它上面没有图形界面
- --hvm 创建功能完整的虚拟机
- --cdrom 指定安装镜像位置
当然关于参数的详解使用man virt-install来查看
如果虚拟机创建成功则会显示以下内容
4. 连接虚拟机
我们使用VNC软件来连接虚拟机,VNC软件是一款开源的Linux远程桌面控制软件,和Windows下的Teamviewer或者是QQ自带的远程桌面控制一样。VNC分服务端和客户端,安装客户端的电脑可以远程控制安装服务端的电脑,刚才我们在创建虚拟机的时候,指定支持vnc远程控制,所以我们下载一个vnc客户端就可以了。下载地址
下面是vnc软件的连接界面,VNS Server填写网桥的IP即可,Name可以随意命名。
连接成功后就会开始装系统的步骤,这里就不介绍了。
5. 遗留问题
创建虚拟机的时候会自动创建两块虚拟网卡出来,虚拟机内部有一块(ens3),虚拟机外部也有一块(vnet0),这个下图有显示。在创建虚拟机的我们指定为网桥,意思是将来把外部那块网卡(vnet0)添加到网桥中。而物理机的网卡(enp4s0f2)已被添加的网桥中,这样外部就可以和虚拟机进行通信了(虚拟机内部那块网卡IP必须和网桥在一个IP段)。
外部虚拟网卡
网桥br0中添加了两块网卡(端口)
管理虚拟机
启动虚拟机
使用下面的命令来启动刚创建的虚拟机
# virsh start myvps1
让虚拟机随物理机一起启动
# virsh autostart myvps1
列出正在运行的虚拟机,所有虚拟机,关闭的虚拟机
# virsh list
# virsh list --all
# virsh list --inactive
重启,关机
重启
# virsh reboot myvps1
关机
# virsh shutdown myvps1
保存,恢复状态
有时我们需要把某个虚拟机暂时关闭,而又想启动时恢复当时的状态,这是需要用到save命令
# virsh save myvps1 myvps1-20171202.state
执行上面的命令后,虚拟机的内存会被保存到一个文件中,然后虚拟机自动关闭
# virsh restore myvps1-20171202.state
恢复虚拟机
挂起,恢复
挂起
# virsh suspend myvps1
恢复
# virsh resume myvps1
空间扩容
在虚拟机运行一段时间后可能会需要添加更多的磁盘空间。这里可以使用attach-disk命令对磁盘扩容。
1. 生成文件
我们使用dd命令来产生一个文件
# sudo dd if=/dev/zero of=/var/lib/libvirt/images/myvps1-disk2.image bs=1M count=4096
该命令会为我们生成一个4GB大小的文件
2. 把文件添加到虚拟机
使用attach-disk命令,把刚刚创建的文件添加到myvps1虚拟机,作为其磁盘使用:
# virsh attach-disk myvps1 \
/var/lib/libvirt/images/myvps1-disk2.img vdb \
--live \
--cache none
这样一个名为vdb的虚拟磁盘就被添加到虚拟机中了
3. 分区
将硬盘添加到虚拟机后,需要在虚拟机中对新的硬盘进行格式化才能使用。下面的操作都是在虚拟机myvps1中进行的
查看硬盘是否添加成功
# sudo fdisk -l
上图可以看到已经有磁盘/dev/vdb,但是未分区和格式化,关于Linux下如何对分区进行格式化请自行百度
增加CPU核数
查看主机cpu核数
# virsh nodeinf0
我的机器显示两个核,也就是每个虚拟机最多能有两个CPU核
查看当前虚拟机(myvps1)虚拟机核数,显示只有一个核,vcpu 0表示第0个核,而不是核数为0
# virsh vcpuinfo myvps1
关闭虚拟机
# virsh shutdown myvps1
修改最大核数为2核,并设置到配置文件(/etc/libvirt/qemu下)
# virsh setvcpus myvps1 2 --maximum --config
设置核数为2到配置文件(/etc/libvirt/qemu下)
# virsh setvcpu2 myvps1 2 --config
重启虚拟机
# virsh start myvps1
上图显示出两个cpu核表示我们设置成功
增加内存
增加内存核增加CPU核数一样,先设置最大内存,在设置当前内存
查看当前虚拟机信息,可以看到当前的内存设置
# virsh dominfo myvps1
设置最大内存为2G
# virsh setmaxmem myvps1 2097152 --config
设置当前内存为1G
# virsh setmem myvps1 1048576 --config
重启虚拟机
# virsh shutdown myvps1
# virsh start myvps1
克隆虚拟机
有时我们需要几台环境相同的虚拟机,这时,我们不需要从头创建,只需要克隆即可
先关闭虚拟机
# virsh shutdown myvps1
克隆虚拟机
# sudo virsh-clone \
--original myvps1 \
--name myvps3 \
--file /var/lib/libvirt/images/myvps3.img
启动克隆的虚拟机
# virsh start myvps3
虚拟机镜像管理
虚拟机镜像做好后,我们可能需要修改虚拟机的IP地址,虚拟机内部的文件等。当然可以先启动虚拟机,然后通过VNC或者SSH进去修改。不过,方便的方法时使用virt-edit命令来直接编辑虚拟机镜像文件即可。virt-edit是libguestfs-tools包提供的命令。
# sudo apt install libguestfs-tools
这个软件包专门管理虚拟机的虚拟磁盘文件,提供的工具有:
- virt-cat 显示虚拟机中文件的内容(相当于cat命令)
- virt-edit 编辑虚拟机中的文件(相当于vi命令)
- virt-inspector 显示虚拟机的操作系统等详细信息
- virt-tar 在虚拟机和主机之间传递文件
当然还有很多命令,这里就不一一列出了
删除虚拟机
# virsh undefine myvps1
# virsh pool-refresh default
在执行virsh undefine myvps1时,虚拟机的虚拟磁盘文件/var/lib/libvirt/images/myvps1.img文件不会被删除,需要手动删除。删除完毕后需要执行virsh pool-refresh default命令清楚虚拟机的缓存记录
KVM入门的更多相关文章
- Linux入门学习教程:虚拟机体验之KVM篇
本文中可以学习到的命令: 1. aptitude 是apt-get 不会产生垃圾的版本 2. dpkg -L virtualbox 显示属于该包的文件 lsmod | grep kvmfi ...
- KVM使用入门
KVM使用入门 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.KVM管理工具 1.libvirt系列 它是由REDHAT公司开发的适用于管理众多不同架构上的虚拟化技术的管理工具 ...
- kvm 使用入门详解
kvm 是虚拟化技术的一个典型实现,功能非常强大,使用很方便.kvm 本身主要实现对 CPU 的虚拟化,内存和IO的虚拟化使用了开源软件 qemu,qemu 是纯软件层面的虚拟化,其实就是个模拟器.k ...
- kvm虚拟化平台搭建入门
KVM虚拟化有两种网络模式:1)Bridge网桥模式2)NAT网络地址转换模式Bridge方式适用于服务器主机的虚拟化.NAT方式适用于桌面主机的虚拟化. 环境: 本次实验要开启VMWare中对应Ce ...
- KVM,QEMU,libvirt入门学习笔记【转】
转自:http://blog.csdn.net/julykobe/article/details/27571387 注:本文内容均来自网络,我只是在此做了一些摘抄和整理的工作,来源均有注明. 0.虚拟 ...
- OpenStack入门篇(五)之KVM性能优化及IO缓存介绍
1.KVM的性能优化,介绍CPU,内存,IO性能优化 KVM CPU-->qemu进行模拟ring 3-->用户应用 (用户态,用户空间)ring 0-->操作系统 (内核态,内核空 ...
- OpenStack入门篇(四)之KVM虚拟机介绍和管理
1.查看虚拟机,启动虚拟机 [root@linux-node1 ~]# virsh list --all Id Name State --------------------------------- ...
- OpenStack入门篇(三)之KVM介绍及安装
1.什么是虚拟化? 虚拟化是云计算的基础.简单的说,虚拟化使得在一台物理的服务器上可以跑多台虚拟机,虚拟机共享物理机的 CPU.内存.IO 硬件资源,但逻辑上虚拟机之间是相互隔离的. 物理机我们一般称 ...
- 【转】《从入门到精通云服务器》第六讲—OpenStack基础
前五期的<从入门到精通云服务器>受到了广泛好评,收到留言,有很多读者对云计算相关的技术非常感兴趣.应观众要求,我们这期要安利一条纯技术内容.准备好瓜子.花生,随小编一起进入OpenStac ...
随机推荐
- 多线程模块:thread
thread 常见用法如下: thread.start_new_thread(function, args):用于开启一个新的线程,接收两个参数,分别为函数和该函数的参数,相当于开启一个新的线程来执行 ...
- MySQL 密码设置
如何修改 MySQL 密码: [root@localhost ~]$ mysqladmin -uroot password 'newPass' # 在无密码的情况下设置密码 [root@localho ...
- Unity3d 手机屏幕自动适配
我提到手机自动适配的一个方法中:postion和Scale,“比例”概念适配手机.原始资源是480*800 经过实际项目考验,个人感觉: 1,UICamera是自动适配分辨率,UI上也是拉伸.放大UI ...
- mybatis-spring-1.2.1 jar下载、源码下载
http://www.everycoding.com/maven2/org/mybatis/mybatis-spring/1.2.1.html
- Linux学习——定义命令行函数(cd .. -> ..)
在使用shell的时候,每天要面对各种命令行,比如ls , cd .. 等 抱着简单,可依赖的思想.有些可以简化的操作可以要通过在 ~/.bashrc 中进行添加: 1. cd .. -> .. ...
- 设计模式之模板方法模式(Java实现)
"那个,上次由于我老婆要给我做饭,所以就没有说完就走掉了...这个那个".这次和以前一样,先来开场福利(工厂方法模式已被作者踹下场).由美女抽象工厂介绍一下适用场景~大家欢迎 抽象 ...
- Excel 2010 Alt+; (分号) --- “只选定当前选定区域中的可视单元格”
excel怎样把筛选出来的加上颜色? 1.选中筛选结果数据区域: 2.同时按下Alt+; (分号)键,选中筛选出的数据: 3.鼠标右键,设置单元格格式: 4.在弹出的对话框中,设置字体.背景颜色,即可 ...
- python搭建简易Web Server
如果你急需一个简单的Web Server,但你又不想去下载并安装那些复杂的HTTP服务程序,比如:Apache,ISS等.那么, Python可能帮助你,使用Python可以完成一个简单的内建 HTT ...
- iconfont阿里爸爸做的开源图库
iconfont 三种使用姿势 1.unicode格式 优点 兼容性最好,支持ie6+ 支持按字体的方式去动态调整图标大小,颜色等等 缺点 不支持多色图标 在不同的设备浏览器字体的渲染会略有差别,在不 ...
- Autofac在项目中应用的体会,一个接口多个实现的情况
在本人接触的项目中Autofac应用的比较多一些,我理解的他的工作原理就是 注册类并映射到接口,通过注入后返回相应实例化的类! 下面说说我在项目中的实际应用 先来简单介绍下Autofac的使用 1. ...