KVM虚拟化
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了KVM虚拟化相关的知识,希望对你有一定的参考价值。
KVM虚拟化
1、什么是虚拟化?
虚拟化,是指通过虚拟化技术将一台计算机虚拟为多台逻辑计算机。在一台计算机上同时运行多个逻辑计算机,每个逻辑计算机可运行不同的操作系统,并且应用程序都可以在相互独立的空间内运行而互不影响,从而显著提高计算机的工作效率。
虚拟化使用软件的方法重新定义划分IT资源,可以实现IT资源的动态分配、灵活调度、跨域共享,提高IT资源利用率,使IT资源能够真正成为社会基础设施,服务于各行各业中灵活多变的应用需求。
2、为什么要用虚拟化?
服务器的资源很多,同一台服务器上运行的服务数量却有限制,因为运行的服务越多,服务与服务之间产生冲突的几率就越大;所以在服务器的系统中避免安装过多的服务,但是这样就浪费了服务器大量的资源。使用虚拟化技术就可以通过模拟计算机的硬件,来实现在同一台计算机上同时运行多个不同的操作系统,操作系统与操作系统之间隔离,服务之间就不会产生冲突,从而提高资源利用率。
虚拟化的好处:服务的安全隔离性,提高资源利用率,绿色环保,企业节省成本,机房迁移变得简单(操作系统系统和硬件解耦),业务快速部署。
3、KVM实现虚拟化
3.1 安装和程序介绍
KVM:Kernel-based Virtual Machine libvirt:虚拟化的管理软件 virt,virt-install,virt-clone:虚拟机的安装和克隆 qemu-kvm,qemu-img:管理虚拟机和虚拟机磁盘
虚拟化软件:libvirt虚拟化管理软件。 qemu:软件纯模拟,全虚拟化软件,性能差,兼容性好,能跑各种操作系统。 xen:半虚拟化软件,性能好,兼容性差,需要使用专门修改之后的内核。 kvm:硬件辅助虚拟化,基于内核,兼容性好,虚拟操作系统不需要使用专门的内核。
//安装KVM虚拟化程序
[root@kvm ~]# yum -y install libvirt* virt-* qemu-*
//启动服务
[root@kvm ~]# systemctl start libvirtd
[root@kvm ~]# systemctl status libvirtd
//关闭防火墙
[root@kvm ~]# iptables -F
[root@kvm ~]# systemctl stop firewalld ebtables
[root@kvm ~]# systemctl disable firewalld ebtables
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
//物理机安装VNC用来连接虚拟机
TightVNC 或者 VNC viewer软件
//准备好一个镜像,放到系统中
//使用创建一台Centos虚拟机
[root@kvm ~]# virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name centos7 --memory 1024 --vcpus 1 --disk /opt/centos7.raw,format=raw,size=10 --cdrom /opt/centos7.iso --network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole
//磁盘的两种格式
raw 不支持做快照,性能好
qcow2 支持快照
//创建完虚拟机使用VNC进行连接,连接前使用netstat或者ss命令查看,虚拟机监听端口号
//虚拟机开启后会产生qemu-kvm的进程,查看此进程所监听的端口号,然后使用宿主机的IP加端口即可连接
[root@kvm ~]# netstat -anltup | grep "qemu"
tcp 0 0 0.0.0.0:5900 0.0.0.0:* LISTEN 23549/qemu-kvm
3.2 KVM虚拟机管理命令
- 虚拟机的开启和关闭
list 列表
start 开机
shutdown 关机
destroy 断电关机
//list查看虚拟机列表
//virsh list 查看正在运行的虚拟机
[root@kvm ~]# virsh list
Id 名称 状态
----------------------------------------------------
//virsh list --all 查看所有虚拟机
[root@kvm ~]# virsh list --all
Id 名称 状态
----------------------------------------------------
2 centos7 shut off
//start开启虚拟机
//virsh start centos7 开启centos7虚拟机
[root@kvm ~]# virsh start centos7
Domain centos7 started
//查看虚拟机状态已经开启
[root@kvm ~]# virsh list --all
Id 名称 状态
----------------------------------------------------
3 centos7 running
//shutdown关闭虚拟机
//virsh shutdown centos7 关闭centos7虚拟机
[root@kvm ~]# virsh shutdown centos7
Domain centos7 is being shutdown
//查看虚拟机状态已经关闭
[root@kvm ~]# virsh list --all
Id 名称 状态
----------------------------------------------------
- centos7 shut off
//destroy断电关机
//先开启centos7虚拟机
[root@kvm ~]# virsh start centos7
Domain centos7 started
//virsh destroy centos7 断电关机
[root@kvm ~]# virsh destroy centos7
Domain centos7 destroyed
//查看虚拟机状态已经关闭
[root@kvm ~]# virsh list --all
Id 名称 状态
----------------------------------------------------
- centos7 shut off
- 虚拟机导出和导入 KVM创建的虚拟机配置文件存放目录为:/etc/libvirt/qemu/ ; dumpxml 命令可以导出虚拟机配置文件。
[root@kvm ~]# virsh dumpxml centos7 > /root/centos7.xml
[root@kvm ~]# ls
anaconda-ks.cfg centos7.xml
//前面已经导出了虚拟机配置文件,我们可以复制一份其他虚拟机的磁盘文件,可以根据这两个文件导入一台虚拟机
//define导入虚拟机,导入之前确保虚拟机的名称,uuid,磁盘文件不冲突
//virsh define /root/centos7.xml 导入centos7虚拟机
[root@kvm ~]# virsh define /root/centos7.xml
Domain centos7 defined from /root/centos7.xml
//查看虚拟机centos7导入成功,/etc/libvirt/qemu/ 目录下会多一个导入的虚拟机的配置文件
[root@kvm ~]# virsh list --all
Id 名称 状态
----------------------------------------------------
- centos7 shut off
- centos7-1 shut off
//在导入导出时,虚拟机磁盘的位置至关重要,当虚拟机磁盘的位置发生改变后,需要更改虚拟机配置文件指定位置
//edit 修改虚拟机配置文件,使用此命令会修改配置文件会检查语法
[root@kvm ~]# virsh edit centos7
<domain type=kvm>
<name>centos7</name>
<uuid>5234ea3a-2ccf-4f89-8bb8-9d2ec52be8ec</uuid>
<memory unit=KiB>1048576</memory>
<currentMemory unit=KiB>1048576</currentMemory>
<vcpu placement=static>1</vcpu>
<os>
<type arch=x86_64 machine=pc-i440fx-rhel7.0.0>hvm</type>
<boot dev=hd/>
</os>
......
<source file=/opt/centos7.raw/> //找到此行,将路径修改为磁盘文件的路径
......
//undefine删除虚拟机
//虚拟机必须处于关闭状态才能删除
[root@kvm ~]# virsh list --all
Id 名称 状态
----------------------------------------------------
- centos7 shut off
//virsh undefine centos7 删除centos7虚拟机
[root@kvm ~]# virsh undefine centos7
Domain centos7 has been undefined
//查看虚拟机已经被删除,但是仅仅只是删除配置文件,磁盘文件依然存在
[root@kvm ~]# virsh list --all
Id 名称 状态
----------------------------------------------------
- 虚拟机重命名
//domrename虚拟机重命名
//虚拟机重命名时,虚拟机必须处于关闭状态
[root@kvm ~]# virsh list --all
Id 名称 状态
----------------------------------------------------
- centos7 shut off
//virsh domrename centos7 hzz 将虚拟机centos7改名为zwh
[root@kvm ~]# virsh domrename centos7 zwh
Domain successfully renamed
//查看虚拟机,名称修改成功
[root@kvm ~]# virsh list --all
Id 名称 状态
----------------------------------------------------
- zwh shut off
- 虚拟机挂起与恢复
//虚拟机必须处于开启状态才能挂起
[root@kvm ~]# virsh start zwh
Domain zwh started
[root@kvm ~]# virsh list --all
Id 名称 状态
----------------------------------------------------
6 zwh running
//virsh suspend zwh 挂起hzz虚拟机
[root@kvm ~]# virsh suspend zwh
Domain zwh suspended
//查看虚拟机,已经处于暂停状态
[root@kvm ~]# virsh list --all
Id 名称 状态
----------------------------------------------------
6 zwh paused
//resume恢复挂起状态的虚拟机
//virsh resume zwh 恢复处于挂起状态的hzz虚拟机
[root@kvm ~]# virsh resume zwh
Domain zwh resumed
//查看虚拟机,恢复运行状态
[root@kvm ~]# virsh list --all
Id 名称 状态
----------------------------------------------------
6 zwh running
- 虚拟机端口号查询
//当一台虚拟机关闭之后再重启,端口号就不一定是原来的端口号,所以需要进行查询
//vncdisplay查看虚拟机VNC端口号,虚拟机必须处于运行状态
//virsh vncdisplay zwh 查看zwh虚拟机的端口号
[root@kvm ~]# virsh vncdisplay zwh
:0
//查询出来的端口号是短格式,我们可以直接使用这种段格式的端口号进行连接虚拟机
个人博客地址:www.lovz.asia
以上是关于KVM虚拟化的主要内容,如果未能解决你的问题,请参考以下文章