KVM+Qemu+Libvirt实战
上一篇的文章是为了给这一篇文件提供理论的基础,在这篇文章中我将带大家一起来实现在linux中虚拟出ubuntu的server版来
我们需要用KVM+Qemu+Libvirt来进行kvm全虚拟化,创建虚拟机并管理。
kvm是用来虚拟化或者说模拟CPU、内存等硬件的。
QEMU只是用来虚拟化硬盘的
libvirt提供了整个虚拟机的管理,比如说虚拟机的启动,停止,创建,删除等等。
其实KVM+Qemu+Libvirt就是模拟了一个VMWare软件
环境:
宿主机:ubuntu16.04的server版
kvm虚拟化中安装的虚拟化操作系统为:ubuntu16.04的server版
在这里中一定要记住不能使用VMWare中的ubuntu当宿主机去做KVM虚拟化,因为VMWare本身已经是虚拟化的了。
一、KVM支持检测及模块安装
1.1、KVM支持检测
1)CPU检测:sudo kvm-ok
如果出现左边的提示,则表示支持kvm
grep vmx /proc/cpuinfo
1.2、安装KVM模块
sudo apt install kvm
模块启动检测:lsmod |grep kvm
二、虚拟磁盘管理
2.1、安装qemu-utils工具
sudo apt install qemu-utils
2.2、对/dev/vdb分区为vdb1,挂载到"/vdb1"
这个步骤在linux教程的文章中有,不懂得可以去查看
2.3、创建虚拟磁盘
sudo qemu-img create -f qcow2 /vdb1/us1.qcow2 30G
运行结果
2.4、虚拟磁盘文件的检查
sudo qemu-img info /vdb1/us1.qcow2
三、libvirtd配置
3.1、安装libvirtd工具
sudo apt install vitinst
3.2、检测该工具是否安装
ps -ef|grep -i libvirtd 查看是否有libvirtd进程
3.3、sudo vi /etc/libvirt/libvirtd.conf
这些内容在该文件中或许都已经存在,也有可能是以注释的形式体现的,取消注释,如果值和上面中的不符合,就改成上面中的值。
3.4、修改libvirt-lib文件
sudo vi /etc/default/libvirt-bin中修改其中的libvirtd_opts="-d -l"
3.5、修改qemu.conf文件
sudo vi /etc/libvirt/qemu.conf中修改其中的vnc_listen="0.0.0.0"
3.6、重启libvirt-bin服务
sudo service libvirt-bin restart
注意:如果你将你的Ubuntu操作系统升级到了16.10(04)版本,libvirt-bin服务跟操作系统由冲突,不能这样重启服务。只能是重启操作系统。
sudo reboot
四、创建或安装(虚拟)操作系统
4.1、命令安装
1)使用virt-install命令进行安装,一步一步的执行
我们就这样在console中一行一行的往下走。
2)使用shell脚本来安装
使用shell脚本安装(代替上面的1)),省得我们一行一行在console敲。
create_kvm.sh文件
1 DIST_QCOW2=$2
2 ORIGN_ISO=$3
3
4 sudo virt-install
5 --connect qemu:///system
6 --name $1
7 --ram 2048
8 --vcpus=2
9 --disk path=${DIST_QCOW2},format=qcow2,size=20,bus=virtio
10 --cdrom $ORIGN_ISO
11 --vnc
12 --os-type linux
13 --accelerate
14 --hvm
15 --network bridge=virbr0,model=virtio
16 --noautoconsole
注意:在上面的脚本文件中代表的是续行符。在shell中已经使用的sudo
接下来就是运行脚本进行安装了:
shell/create_kvm.sh us1 /vdb1/us1.qcow2 /iso/ubuntu-17.04-server-amd64.iso
注意:
在这里脚本中有三个参数:
第一个为虚拟机名字
第二个为指定的虚拟磁盘
第三个为ubuntu系统的镜像文件
注意:镜像文件的选取:搭建集群保证所有的服务器的操作系统类型和操作系统版本以及内核版本最好都一致。
sudo apt dist-upgrade 升级软件以及内核
3)使用virsh命令
virsh list --all查看你所有虚拟机的情况
visrh list 查看正在运行的虚拟机的情况
4)使用vnc-viewer检测系统
这里需要安装vnc viewer软件的,没有的话可以去我的博客中的随笔分类tools中下载
作用:我们虚拟机已经在安装ubuntu系统了,但是后面有些安装过程中需要认为去操作的,所以我们需要去使用vnc viewer去检测它的安装
url:host_ip:vnc编号(virsh vncdisplay vmname进行查看)
进入这里就是我们熟悉的安装ubuntu的过程了。不知道怎么安装ubuntu的server版的可以去我的博客中的随笔分类tools中下载
总结:至此,第一种创建虚拟机的方式就完成了,其实这种创建时非常的繁琐的。但是可以知道它的安装整个过程
4.2、第二种创建虚拟机的方式:(生成相应的xml文件+qcow2文件=虚拟机)
在上面我们已经安装了一个ubuntu系统,所以在us1.qcow2虚拟磁盘中是有ubuntu系统文件的和相对应的xml文件的。
1)复制us1.qcow2到us2.qcow2
2)复制us1.xml到us2.xml
3)修改us2.xml文件中的四个地方
a)修改xml文件中的虚拟机名称。<name>us2</name>中的内容。 b)修改UUID,16进制的值,随便修改其中几个值即可。 c)修改新的虚拟机配置中的磁盘(虚拟磁盘文件)信息。 d)修改MAC地址,16进制的值,随便修改其中几个值即可。
4)重启libvirt-bin服务。如果重启该服务有错,请重启宿主机
总结:使用这种安装非常的方便,只需要复制两个文件,修改一个文件就可以了。我这里会提供来两个文件给需要的人,可以去我的博客中的随笔分类tools中下载
4.3、第三种创建虚拟机的方式:virt-manager
首先你需要去安装这个软件
sudo apt install virt-manager
1)终端输入
virt-manager
2)file-->add connection
2.1)选中connection remote host
2.2)file-->create new virtual machine
第一步:
第二步:
第三步:
接下来可以自己去尝试我就不详细解释了
五、虚拟机管理、虚拟机域管理、虚拟磁盘管理
5.1、虚拟机管理
5.2、虚拟机域管理
5.3、虚拟磁盘管理
- 体验扁平化的WordPress 后台管理界面
- Python 项目实践二(生成数据)第二篇
- 重新审视SqlDataReader的使用
- Python 项目实践二(生成数据)第一篇
- 删除 WordPress 导航菜单的多余 CSS 选择器
- 删除 WordPress 导航菜单的多余 CSS 选择器
- 使用asp.net 2.0的CreateUserwizard控件如何向自己的数据表中添加数据
- 自定义(修改)WordPress管理后台界面的字体样式
- Sql Server 2005 ROW_NUMBER 函数实现分页
- Http协议中的数据传送之多重表单提交--multipart/form-data
- 另类大数据:中国有嘻哈的rapper们都在唱些什么?
- jquery属性值选择器
- sqlserver 2000/2005 Ambiguous column error错误解决办法
- jquery 层级选择器
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 小白学PyTorch | 8 实战之MNIST小试牛刀
- 干货:用好VSCode这13款插件和8个快捷键,工作效率提升10倍
- 使用dplyr包对表格整理
- 安利 5 个拍案叫绝的 Matplotlib 骚操作!
- 多媒体程序开发
- 本地 IDE 已废!编辑器大结局!GitHub 的云 VSCode 实测
- 实战 | Python 编写端口扫描器
- 我这几年踩过的十个坑,每一条都是血泪教训
- 在 Python 中如何快速创建一个只读字典?
- 现场打脸:如何使用Selenium批量上传文件?
- 一日一技:FastAPI如何关闭接口文档?
- 什么叫做类比,为什么有些 Python 入门教程结构不合理?
- 贼好用的 Java 工具类库,墙裂推荐!
- 万字长文,Thread 类源码解析!
- lintCode 31 题解