Centos7之KVM虚拟化基础管理详解

一、安装kvm虚拟化

[root@localhost media]# yum -y groupinstall "GNOME Desktop"     #安装GNOME桌面环境
[root@localhost media]# yum -y install qemu-kvm        #KVM模块
[root@localhost media]# yum -y install qemu-kvm-tools       #KVM调试工具,可不安装
[root@localhost media]# yum -y install virt-install           #构建虚拟机的命令行工具
[root@localhost media]# yum -y install qemu-img     #qemu组件,创建磁盘、启动虚拟机等
[root@localhost media]# yum -y install bridge-utils        #网络支持工具
[root@localhost media]# yum -y install libvirt        #虚拟机管理工具
[root@localhost media]# yum -y install virt-manager       #图形界面管理虚拟机
[root@localhost media]# yum -y install libguestfs-tools       #用来管理虚拟机磁盘格式
[root@localhost ~]# ls -sf /lib/systemd/system/graphical.target /etc/systemd/system/default.target
#将系统默认运行的target更改为graphical.target,若不执行该命令,重启时可能会报错。

2、安装完毕后,需重启系统,执行下面命令对系统进行检查:

[root@localhost ~]# cat /proc/cpuinfo | grep vmx
#查看Intel的CPU是否支持虚拟化,若是AMD的CPU,需 “cat /proc/cpuinfo | grep smv”
[root@localhost ~]# lsmod | grep kvm          #检查KVM模块是否安装
kvm_intel       170181 0
kvm          554609 1 kvm_intel
irqbypass       13503 1 kvm
[root@localhost ~]# systemctl start libvirtd      #启动libvirtd服务
[root@localhost ~]# systemctl enable libvirtd    #设置该服务为开机自启

3、在命令行模式中创建虚拟机

[root@kvm kk]# mkdir -p /kvm/{iso,disk} #创建相应的目录,一边存放镜像及虚拟机磁盘
#创建的/kvm目录最好挂载在LVS卷上,以便可以动态扩展卷空间
[root@kvm iso]# cp /media/CentOS-7.iso /kvm/iso/  #准备要安装的虚拟机操作系统文件
[root@kvm ~]# qemu-img create -f raw /kvm/disk/web01.raw 10G #创建虚拟机磁盘
[root@kvm ~]# virt-install --os-type=linxu --os-variant centos7.0 --name web01 --ram 1024 --vcpus 1 --disk /kvm/disk/web01.raw,format=raw,size=10 --location /kvm/iso/CentOS-7.iso --network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole    #创建虚拟机web01
开始安装......
搜索文件 .treeinfo......             | 354 B 00:00
搜索文件 vmlinuz......              | 5.9 MB 00:00
搜索文件 initrd.img......            | 50 MB 00:00
域安装仍在进行。您可以重新连接
到控制台以便完成安装进程。
#根据上面的提示打开图形化控制台
[root@kvm ~]# virt-manager   #打开控制台

输入打开控制台的命令后,便会弹出以下窗口:

单击“打开”后,会出现以下界面,和我们自己安装系统一样了(自行操作即可):

至此,命令行创建虚拟机就完成了,接下来使用手动更改配置文件的方式,克隆web01,生成新的虚拟机web02(在我博文前面的那个博文链接中有专用于克隆的命令工具的使用方法,这里只是为了来了解虚拟机的配置文件)

二、手动更改配置文件的方式,克隆web01,生成新的虚拟机web02

[root@kvm iso]# virsh list --all   #确保要克隆的虚拟机在关闭状态下
 Id  名称             状态
----------------------------------------------------
 -   test01             关闭
 -   test02             关闭
 -   web01             关闭   #就是要克隆这台
[root@kvm ~]# cd /kvm/disk/   #切换至虚拟机的虚拟磁盘存放目录
[root@kvm disk]# cp web01.raw web02.raw   #将要克隆的虚拟机磁盘复制一份,并更改名称
[root@kvm disk]# cd /etc/libvirt/qemu/   #切换至KVM虚拟机配置文件的目录
[root@kvm qemu]# ls   #查看当前目录下的文件
networks test01.xml test02.xml web01.xml
[root@kvm qemu]# virsh dumpxml web01 > ./web02.xml
#将web01的配置文件使用dumpxml工具进行备份为当前目录下的web02.xml
[root@kvm qemu]# ls     #确认备份成功
networks test01.xml test02.xml web01.xml web02.xml
[root@kvm qemu]# vim web02.xml   #编辑备份出的文件

<domain type='kvm'>
 <name>web02</name>   #将这里的名字改为web02
 <uuid>2d6f2a7c-9937-4afb-b8d6-8ef01ca61434</uuid>  #删除UUID这行配置,防止冲突
 <memory unit='KiB'>1048576</memory>
      .............#省略部分内容
 <devices>     #定位到该行标签
  <emulator>/usr/libexec/qemu-kvm</emulator>
  <disk type='file' device='disk'>
   <driver name='qemu' type='raw'/>
   <source file='/kvm/disk/web02.raw'/>    #将这里的路径更改为刚才使用cp命令复制的web02.raw文件
#更改完成后,保存退出
[root@kvm qemu]# virsh define web02.xml   #定义此配置文
#(可以理解为载入该虚拟机,此时,需要注意当前的工作路径)
定义域 web02(从 web02.xml)

[root@kvm qemu]# virsh list --all   #查看是否克隆成功
 Id  名称             状态
----------------------------------------------------
 -   test01             关闭
 -   test02             关闭
 -   web01             关闭
 -   web02             关闭
#OK!查看到了,可以自行运行web02,测试是否运行正常。
[root@kvm qemu]# virsh start web02   #启动web02
域 web02 已开始

[root@kvm qemu]# virsh list --all   #OK,正在运行!
 Id  名称             状态
----------------------------------------------------
 3   web02             running
     .............#省略部分内容

三、将web01加入开机自启,与web02对比有何异同

[root@kvm qemu]# virsh dominfo web01  #此命令可以查看指定虚拟机的信息
Id:       -
名称:    web01
UUID:      2d6f2a7c-9937-4afb-b8d6-8ef01ca61434
OS 类型:  hvm
状态:    关闭
CPU:     1
最大内存: 1048576 KiB
使用的内存: 1048576 KiB
持久:    是
自动启动: 禁用   #默认此处为禁用状态
管理的保存: 否
安全性模式: none
安全性 DOI: 0

[root@kvm qemu]# virsh autostart web01   #设置web01为开机自启
域 web01标记为自动开始
[root@kvm qemu]# virsh dominfo web01  #查看是否设置为开机自启
Id:       -
名称:    web01
UUID:      2d6f2a7c-9937-4afb-b8d6-8ef01ca61434
OS 类型:  hvm
状态:    关闭
CPU:     1
最大内存: 1048576 KiB
使用的内存: 1048576 KiB
持久:    是
自动启动: 启用       #OK!
管理的保存: 否
安全性模式: none
安全性 DOI: 0
[root@kvm qemu]# virsh dominfo web02   #查看web02是否为开机自启
Id:       3
名称:    web02
UUID:      f554ad15-1b67-4f01-b203-a9d0c3abe192
OS 类型:  hvm
状态:    running
CPU:     1
CPU 时间:  21.4s
最大内存: 1048576 KiB
使用的内存: 1048576 KiB
持久:    是
自动启动: 禁用      #是禁用状态
管理的保存: 否
安全性模式: none
安全性 DOI: 0
#此时可以重启宿主机,然后查看虚拟机的状态(需要确保libvirtd服务的状态为开机自启,否则会出现问题)

[root@kvm qemu]# init 6     #重启宿主机
[root@kvm ~]# virsh list      #,待重启完成后,查看正在运行的虚拟机
 Id  名称             状态
----------------------------------------------------
 1   web01             running
#此时,只有web01处于运行状态,因为它设置了开机自启,在libvirtd服务开机自启的前提下,
#它会随着宿主机的启动而启动

四、远程连接虚拟机的两种方法

(1)使用VNC软件

VNC的安装比较简单,这里就不多写了。

[root@kvm ~]# virsh vncdisplay web02   <!--查看web02的监听端口-->
:0
  <!--
查看出的结果是“:0”,解释如下:
“:0”表示监听5900端口;
“:1”表示监听5901端口;
以此类推......
            -->

打开vnc进行连接(注意防火墙相关配置):

为了方便接下来使用console进行连接,此时需要调整虚拟机(web02)的内核参数,如下:

[root@localhost ~]# grubby --update-kernel=ALL --args=”console=ttyS0”  #在虚拟机中执行此命令
[root@localhost ~]# init 6   #重启此虚拟机,以便更改生效

(2)使用console登陆web02

在KVM宿主机上执行以下命令即可登陆成功(前提是在使用vnc登陆时已经更改了web02的内核参数)

[root@kvm ~]# virsh console web02   #执行该命令
连接到域 web02
换码符为 ^]
#敲一下回车键

CentOS Linux 7 (Core)
Kernel 3.10.0-862.el7.x86_64 on an x86_64

web02 login: root   #输入web02的用户名及密码登陆即可。
密码:
Last login: Wed Oct 9 21:20:48 on tty1
[root@web02 ~]# 

五、使用默认的NAT网络类型使web02可以ping通外网

这里就进行ping百度的测试,务必保证KVM宿主机可以ping通百度。

(1)检查相关配置

[root@kvm ~]# virsh net-list --all   <!--检查当前的网络设置-->
 名称        状态   自动开始 持久
----------------------------------------------------------
 default       活动   是      是
[root@kvm ~]# ifconfig     <!--检查当前的网络接口-->
     .............<!--省略部分内容-->
virbr0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
    inet 192.168.122.1 netmask 255.255.255.0 broadcast 192.168.122.255
        <!--
virbr0是由宿主机虚拟机支持模块安装时产生的虚拟网络接口,
也是一个switch和bridge,负责把内容分发到各虚拟机。
virbr0是一个桥接器,接收所有到网络192.168.122.*的内容。
从下面命令可以验证:   -->
[root@kvm ~]# brctl show
bridge name bridge id    STP enabled interfaces
virbr0   8000.525400a8bf19  yes   virbr0-nic
                                   vnet0
[root@kvm ~]# route
Kernel IP routing table
Destination   Gateway     Genmask     Flags Metric Ref  Use Iface
192.168.1.0   0.0.0.0     255.255.255.0  U   100  0    0 ens33
192.168.122.0  0.0.0.0     255.255.255.0  U   0   0    0 virbr0

(2)接下来开始配置nat网络

[root@kvm ~]# virsh net-define /usr/share/libvirt/networks/default.xml
#如果没有上面指定的文件,可以使用该命令定义一个虚拟网络
也可以修改该文件,创建自己的虚拟网络
[root@kvm ~]# virsh net-autostart default   #网络default标记为自动启动
[root@kvm ~]# virsh net-start default    #启动网络,若已启动,此处会报错
[root@kvm ~]# vim /etc/sysctl.conf  #修改此配置文件
        ............#省略部分内容
net.ipv4.ip_forward=1    #在文件末尾加入该行,以便允许IP转发
[root@kvm ~]# vim /etc/libvirt/qemu/web02.xml
        ............#省略部分内容
  <interface type='network'>
   <mac address='52:54:00:24:9d:24'/>
   <source network='default'/>
   <model type='virtio'/>
   <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
  </interface>
#定位“interface”关键字,确定有上述内容
               ............#省略部分内容

(3)连接到虚拟机web02,更改网卡的配置:

[root@web02~]# vi /etc/sysconfig/network-scripts/ifcfg-eth0  #编辑网卡配置文件

更改网卡后,保存退出。

[root@web02~]# systemctl restart network     #重启web02虚拟机的网络服务

进行ping测试:

若要使用静态IP,配置文件可更改如下(更改完成后自行重启网卡,可以增加DNS配置):

六、KVM虚拟机管理命令汇总

[root@kvm ~]# virsh start 虚拟机名称  #开启虚拟机
[root@kvm ~]# virsh list  #仅查看运行的虚拟机列表
[root@kvm ~]# virsh list --all    #查看所有虚拟机列表
[root@kvm ~]# virsh shutdown 虚拟机名称  #正常的关闭虚拟机
[root@kvm ~]# virsh destroy  虚拟机名称  #强制关闭虚拟机(类似于拔电源)
[root@kvm ~]# virsh dumpxml 虚拟机名称 > /root/test01-dum.xml       #虚拟机备份
[root@kvm ~]# virsh undefine 虚拟机名称 #删除虚拟机(注意:取消定义之后,磁盘文件需要手动删除)
[root@kvm ~]# virsh define 备份的.xml虚拟机文件  #还原虚拟机
[root@kvm ~]# virsh edit 虚拟机名称 #编辑虚拟机的配置文件
[root@kvm ~]# virsh domrename 原名字 要更改的名字
# 如:([root@kvm ~]# virsh domrename test01 test03)  更改虚拟机名称
[root@kvm qemu]# virsh dominfo test02      #查看虚拟机的详细信息
[root@kvm ~]# virsh autostart test02       #设置虚拟机为开机自启
[root@kvm ~]# virsh autostart --disable test02  #取消开机自启
[root@kvm ~]# virsh vncdisplay test02      #查看对应的VNC连接端口号;默认第一个端口号为:5900(用“:0”表示)
[root@kvm ~]# virsh suspend test02     #挂起虚拟机
[root@kvm ~]# virsh resume test02        #取消挂起虚拟机
[root@kvm ~]# virsh console test02      #console登陆虚拟机
[root@kvm ~]# qemu-img info /kvm/disk/test01.raw   #查看虚拟机的磁盘信息
[root@kvm disk]# qemu-img create test.raw 2G    #创建虚拟机使用的磁盘
[root@kvm disk]# qemu-img create -f qcow2 21.qcow2 2G   #创建qcow2格式的虚拟机磁盘
[root@kvm disk]# qemu-img convert -f raw -O qcow2 test.raw test.qcow2  #将test.raw磁盘格式raw转换为qcow2
[root@kvm qemu]# virsh snapshot-create test02    #创建虚拟机快照
[root@kvm disk]# virsh snapshot-list test02       #查看虚拟机快照
[root@kvm disk]# virsh snapshot-revert test02 1570692304   #恢复快照
[root@kvm disk]# virt-clone --auto-clone -o test01 -n 指定要克隆的名字(可选)    #自动克隆虚拟机
[root@kvm disk]# virt-clone -o test01 -n test04 -f /kvm/disk/test04.qcow2  #手动克隆
#上述都是属于完整克隆。
[root@kvm disk]# qemu-img create -f qcow2 -b test01.qcow2 lktest01.qcow2
# -f:指定要克隆为的磁盘格式;
# -b:指定要转换的源文件及目标文件
#上述命令是在克隆虚拟机的磁盘文件
  • RAW:裸格式。占用空间较大,性能比较好,但不支持快照功能。
  • qcow:copy on write(写时复制机制)。
  • qcow2:占用空间较小,性能相比较RAW稍差,,但它支持快照功能。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • kvm虚拟化学习笔记(一)之kvm虚拟化环境安装的步骤

    平时一直玩RHEL/CentOS/OEL系列的操作,玩虚拟化也是采这一类系统,kvm在RHEL6系列操作系统支持比较好,本文采用采用OEL6.3操作系统,网上所有文章都说KVM比xen简单,我怎么感觉kvm比较复杂,可能是它的工具太多了吧,所以决定开始记录KVM的学习过程. 1.操作系统安装 本文采用OEL6.3X64操作系统,也可以采用RHEL/CentOS6.x. (1)修改内核模式为兼容内核启动 (2)关闭selinux,重启后生效 (3)关闭防火墙 chkconfig ip6tables

  • CentOS 7中搭建KVM虚拟化平台的方法步骤

    什么是虚拟化 虚拟化就是把硬件资源从物理方式转变为逻辑方式,打破原有物理结构,使用户可以灵活管理这些资源,并且允许1台物理机上同时运行多个操作系统,以实现资源利用率最大化和灵活管理的一项技术. 虚拟化的优势 减少服务器数量,降低硬件采购成本. 资源利用率最大化 降低机房空间.散热.用电消耗的成本. 硬件资源可动态调整,提高企业IT业务灵活性. 高可用性. 在不中断服务的情况下进行物理硬件调整. 降低管理成本. 具备更高效的备灾能力. KVM虚拟化 KVM自linux2.6.20版本后就直接整合到

  • 详解虚拟化技术QEMU-KVM入门

    一.QEMU.KVM.QEMU-KVM QEMU提供一系列的硬件模拟设备(CPU,网卡,磁盘等),客户机指令都需要QEMU翻译,因而性能较差.KVM是linux内核提供的虚拟化,可以用来进行vCPU的创建与运行,虚拟内存的地址空间分配,指令执行效率较高,但缺少IO设备的虚拟化.QEMU-KVM就是KVM与QEMU的结合,KVM负责CPU虚拟化+内存虚拟化,QEMU模拟其它IO设备. 二.安装并创建虚拟机 安装qemu-kvm软件 faramita2016@linux-l9e6:~> zypper

  • KVM虚拟化(一)——KVM虚拟机的介绍与简单使用

    一.架构及介绍 KVM(Kernel-based Virtual Machine)它由 Quramnet 开发,该公司于 2008年被 Red Hat 收购: 自Linux 2.6.20后整合到内核,该内核模块使得 Linux 变成了一个 Hypervisor层: 它依托于CPU虚拟化指令集,性能.安全性.兼容性.稳定性表现很好,每个虚拟化操作系统表现为单个系统进程,与Linux安全模块selinux安全模块很好结合: 官方网站为http://www.linux-kvm.org/page/Mai

  • KVM虚拟化技术之使用Qemu-kvm创建和管理虚拟机的方法

    一.KVM简介 KVM(名称来自英语:Kernel-basedVirtual Machine的缩写,即基于内核的虚拟机),是一种用于Linux内核中的虚拟化基础设施,可以将Linux内核转化为一个hypervisor.KVM在2007年2月被导入Linux 2.6.20核心中,以可加载核心模块的方式被移植到FreeBSD及illumos上. KVM在具备Intel VT或AMD-V功能的x86平台上运行.它也被移植到S/390,PowerPC与IA-64平台上.在Linux内核3.9版中,加入A

  • KVM虚拟化技术之virt-manager使用及KVM虚拟化平台网络模型介绍

    一.使用virt-manager创建和管理虚拟机 1.使用VNC Viewer连接进入虚拟化平台主机 2.打开终端输入virt-manager命令启动virt-manager虚拟机管理界面 #virt-manager 3.通过virt-manager安装CentOS 6.6的虚拟机 点击如图所示图标新建虚拟机: 选择PXE引导,我的网络内存在一个系统自动化部署服务器: 选择操作系统类型和版本: 设置内存和CPU个数: 设置硬盘大小,这里采用动态扩展磁盘空间方式: 忽略这个错误,由于是虚拟磁盘,不

  • Centos7之KVM虚拟化基础管理详解

    一.安装kvm虚拟化 [root@localhost media]# yum -y groupinstall "GNOME Desktop" #安装GNOME桌面环境 [root@localhost media]# yum -y install qemu-kvm #KVM模块 [root@localhost media]# yum -y install qemu-kvm-tools #KVM调试工具,可不安装 [root@localhost media]# yum -y install

  • Centos7的Firewalld防火墙基础命令详解

    一.Linux防火墙的基础 Linux的防火墙体系主要工作在网络层,针对TCP/IP数据包实时过滤和限制,属于典型的包过滤防火墙(或称为网络层防火墙).Linux系统的防火墙体系基于内核共存:firewalld.iptables.ebtables,默认使用firewalld来管理netfilter子系统. netfilter:指的是Linux内核中实现包过滤防火墙的内部结构,不以程序或文件的形式存在,属于"内核态"的防火墙功能体系: firewalld:指用来管理Linux防护墙的命令

  • Docker基础命令详解

    docker基本概念 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上. Docker是一个重新定义了程序开发测试.交付和部署过程的开放平台,Docker则可以称为构建一次,到处运行,这就是docker提出的"Build once,Run anywhere" 创建镜像 创建镜像的方法有三种: 基于已有的容器创建 基于本地模板导入 基于dockerfile 基于已有的容器创建 主要使用docker

  • Cisco路由技术基础知识详解之一

    Cisco路由技术基础知识详解 路由器 <一> 最简单的网络可以想象成单线的总线,各个计算机可以通过向总线发送分组以互相通信.但随着网络中的计算机数目增长,这就很不可行了,会产 生许多问题: 1.带宽资源耗尽.     2.每台计算机都浪费许多时间处理无关的广播数据.     3.网络变得无法管理,任何错误都可能导致整个网络瘫痪.     4.每台计算机都可以监听到其他计算机的通信. 把网络分段可以解决这些问题,但同时你必须提供一种机制使不同网段的计算机可以互相通信,这通常涉及到在一些ISO网

  • Cisco路由技术基础知识详解

    Cisco路由技术基础知识详解 路由器 <一> 最简单的网络可以想象成单线的总线,各个计算机可以通过向总线发送分组以互相通信.但随着网络中的计算机数目增长,这就很不可行了,会产 生许多问题: 1.带宽资源耗尽.     2.每台计算机都浪费许多时间处理无关的广播数据.     3.网络变得无法管理,任何错误都可能导致整个网络瘫痪.     4.每台计算机都可以监听到其他计算机的通信. 把网络分段可以解决这些问题,但同时你必须提供一种机制使不同网段的计算机可以互相通信,这通常涉及到在一些ISO网

  • vuex state及mapState的基础用法详解

    先使用vue cli构建一个自己的vue项目 1.npm i -g vue-cli 2.vue init webpack sell (sell是你的项目名) 3.一路回车(在这个过程中会提示你是否安装一些依赖包,比如vue-router,es6语法检查等等,这些根据你个人习惯或者癖好选择Y/N) 4.npm i (这个是安装项目的依赖包) 5.npm run dev(启动你的vue项目) 这个时候如果在页面上看到了vue的logo说明你的vue的项目基础构建已经完成,然后你可以删除掉没有用的组件

  • 对Tensorflow中Device实例的生成和管理详解

    1. 关键术语描述 kernel 在神经网络模型中,每个node都定义了自己需要完成的操作,比如要做卷积.矩阵相乘等. 可以将kernel看做是一段能够跑在具体硬件设备上的算法程序,所以即使同样的2D卷积算法,我们有基于gpu的Convolution 2D kernel实例.基于cpu的Convolution 2D kernel实例. device 负责运行kernel的具体硬件设备抽象.每个device实例,对应系统中一个具体的处理器硬件,比如gpu:0 device, gpu:1 devic

  • Linux系统诊断之内存基础深入详解

    1.背景 谈及linux内存,很多时候,我们会关注free,top等基础命令.当系统遇到异常情况时,内存问题的根因追溯,现场诊断时,缺乏深层次的debug能力.本篇幅不做深层讨论,能把当前系统的问题描述清楚,是每个SRE应该具备的最基础能力. 2. free 2.1 free命令原理 free是通过查看 /proc/meminfo 来获取内存的使用情况.但是 /proc/meminfo 这个文件又是怎么来的?我们先了解下 /proc 目录: /proc 是一个虚拟文件系统,该目录下的所有文件都是

  • linux系统之进程管理详解

    目录 1.进程与线程的概念 2.什么是进程管理 3.进程管理的作用 4.Linux进程的几种状态 5.进程与线程的关系 (1)线程与进程的关系 (2)总结 1.进程与线程的概念 来源百度百科: 进程(Process) 是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础. 在当代面向线程设计的计算机结构中,进程是线程的容器.程序是指令.数据及其组织形式的描述,进程是程序的实体.是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和

  • 基于React Hooks的小型状态管理详解

    目录 实现基于 React Hooks 的状态共享 使用感受 本文主要介绍一种基于 React Hooks 的状态共享方案,介绍其实现,并总结一下使用感受,目的是在状态管理方面提供多一种选择方式. 实现基于 React Hooks 的状态共享 React 组件间的状态共享,是一个老生常谈的问题,也有很多解决方案,例如 Redux.MobX 等.这些方案很专业,也经历了时间的考验,但私以为他们不太适合一些不算复杂的项目,反而会引入一些额外的复杂度. 实际上很多时候,我不想定义 mutation 和

随机推荐