KVM虚拟机创建,Virsh管理命令,虚拟机克隆,快速克隆虚拟机,虚拟机创建网卡,虚拟机扩容技术(centos版)

一、KVM虚拟机的组成

 

内核虚拟模块(KVM)

系统设备仿真(QEMU)

虚拟机管理程序(LIBVIRT)

 

– xml配置文件(虚拟机描述文件):定义虚拟机的名称、UUID、CPU、内
存、虚拟磁盘、网卡等各种参数设置

位置:/etc/libvirt/qemu/

– 磁盘镜像文件:保存虚拟机的操作系统及文档数据,
镜像路径取决于xml配置文件中的定义

位置:/var/lib/libvirt/images/
 

二、需要的软件包

– qemu-kvm :为 kvm 提供底层仿真支持
– libvirt-daemon :libvirtd 守护进程,管理虚拟机
– libvirt-client :用户端软件,提供客户端管理命令
– libvirt-daemon-driver-qemu :libvirtd 连接 qemu 的驱动
– virt-manager :图形管理工具

 1.配置yum

  https://blog.csdn.net/ck784101777/article/details/93750317

    2.安装软件包

   [root@svr7 ~]#  yum -y install qemu-kvm
   [root@svr7 ~]#  yum -y install libvirt-daemon
   [root@svr7 ~]#   yum -y install libvirt-client
   [root@svr7 ~]#   yum -y install libvirt-daemon-driver-qemu
   [root@svr7 ~]#  yum -y install virt-manager

 

三、通过命令管理虚拟机


virsh命令工具介绍
• 提供管理各虚拟机的命令接口
– 支持交互模式,查看/创建/停止/关闭 .. ..
– 格式:virsh 控制指令 [虚拟机名称] [参数]

1.常用命令

 virsh nodeinfo                       #查看KVM节点(服务器)信息
 virsh list --all                         #列出虚拟机
 virsh net-list --all                   #列出虚拟网络
 virsh dominfo 虚拟机名称     #查看指定虚拟机的信息
 virsh autostart nsd01            #设置虚拟机开机自启动
 virsh dominfo  nsd01         #查看指定虚拟机的信息
 virsh autostart --disable nsd01                               #禁止虚拟机开机自启动
 virsh start或reboot或shutdown 虚拟机名称            #开关机操作
 virsh destroy 虚拟机名称                                        #强制关闭指定的虚拟机
 virsh dumpxml vm-node1                                       #查看KVM虚拟机当前配置
 virsh dumpxml vm-node1 > vm-node1.bak.xml        #备份vm-node1虚拟机的xml文件,原文件默认路径/etc/libvirt/qemu/vm-node1.xml

 virsh console 虚拟机名称      #连接虚拟机

 virsh domiflist 虚拟机名称                     #查看虚拟机网卡信息

 virsh domblklist  虚拟机名称                  #查看虚拟机硬盘信息

 

2.qemu-img命令

qemu-img是虚拟机的磁盘管理命令,支持非常多的磁盘格式,如raw,qcow2,vdi,vmdk

qemu-img命令格式:

qemu-img 命令 [参数] 块文件名 大小

常用命令:

- create 创建磁盘

- convet 转换磁盘格式

- info  查看磁盘信息

- resize 扩容磁盘空间

 

 

2.使用方式

交互式:输入virsh 进入管理界面

再次输入命令不需要加virsh

非交互式:virsh 控制指令 [虚拟机名称] [参数]

 

四、克隆虚拟机

 

1)将被克隆的虚拟机CentOS7关机

右击选中的虚拟机CentOS7,选择“关机”-->“强制关机”(如图-11所示),根据提示确认即可。

 

KVM虚拟机创建,Virsh管理命令,虚拟机克隆,快速克隆虚拟机,虚拟机创建网卡,虚拟机扩容技术(centos版)_第1张图片

2)执行克隆操作

右击已关闭的虚拟机CentOS7,选择“克隆”,在弹出对话框中指定名称,确认默认设置(如图-12所示),然后单击右下角的“克隆”按钮完成操作。

 

KVM虚拟机创建,Virsh管理命令,虚拟机克隆,快速克隆虚拟机,虚拟机创建网卡,虚拟机扩容技术(centos版)_第2张图片

3)确认克隆结果

新克隆的虚拟机CentOS7-c1可以正常启动、登录,可以独立运行。

在“虚拟系统管理器”中也能够看到此虚拟机(图-13所示)。

 

KVM虚拟机创建,Virsh管理命令,虚拟机克隆,快速克隆虚拟机,虚拟机创建网卡,虚拟机扩容技术(centos版)_第3张图片

 

五、虚拟机磁盘镜像文件格式

 

KVM有两种磁盘镜像格式,RAW和QCOW2

 

KVM虚拟机创建,Virsh管理命令,虚拟机克隆,快速克隆虚拟机,虚拟机创建网卡,虚拟机扩容技术(centos版)_第4张图片

 

Copy On Write,写时复制技术原理:

  • 直接映射原始盘的数据内容
  • 当原始盘有修改时,在修改之前将旧数据存入前端盘
  • 对前端盘的修改不会回写到原始盘

cow技术将磁盘分为原始盘(后端盘)和使用盘(前段盘),我们在使用虚拟机的使用都是用的前端盘,包括我们修改虚拟机的文件也是修改的前端盘,后端盘是只读的,你想修改也改不了.

那么为什么cow的优势在哪呢?

其实名字已经告诉你它在干嘛了,写时复制,前端盘一开始的大小其实是很小的,几M,而一个完整的镜像文件至少是有几百M.那为什么一个几M的文件可以做系统镜像呢?因为我们在使用前端盘的前期,特别是刚创建虚拟机的时候,我们使用的都是后端盘的内容,我们每次调用一次相关文件,都会将这个文件存到前端盘中,下一次使用时就直接读前端盘的内容

 

KVM虚拟机创建,Virsh管理命令,虚拟机克隆,快速克隆虚拟机,虚拟机创建网卡,虚拟机扩容技术(centos版)_第5张图片

 

 

五、快速构建虚拟机

[磁盘文件和配置文件模板下载]https://github.com/ck784101777/MyHome

快建新虚拟机的基本思路:

  1. 提前准备好一台模板虚拟机(镜像磁盘+xml配置文件)
  2. 基于qcow2磁盘复用技术快建新虚拟机的磁盘
  3. 通过调整模板机的配置快建新虚拟机的xml配置文件
  4. 导入新虚拟机

 

步骤一:准备模板虚拟机

找一台已经装好CentOS7系统、配置好本地yum源、关闭SELinux的虚拟机,提取模板虚拟机磁盘、xml配置文件备用。

1)准备磁盘目录、模板虚拟机磁盘文件

一般的磁盘文件放置在/var/lib/libvirt/images这个路径下

  1. [root@kvmsvr ~]# qemu-img info /etc/libvirt/qemu/centos7_muban.qcow2    //查看一下虚拟磁盘信息
  2. image: /etc/libvirt/qemu/images/centos7_muban.qcow2
  3. file format: qcow2
  4. virtual size: 300G (322122547200 bytes)                 //虚拟机磁盘容量
  5. disk size: 3.2G                                         //在KVM服务器占用容量

2)准备模板虚拟机配置文件

准备一个模板配置文件

  1. [root@kvmsvr ~]# cat /etc/libvirt/qemu/centos7_muban.xml
  2. centos7.0
  3. a1992150-5cc7-e19d-20df-cd5cea7d8aa2
  4. 2097152
  5. .. ..

步骤二:快建虚拟机svr7

1)为虚拟机svr7快速建立前端盘(复用模板机的磁盘数据)

需要放在在/var/lib/libvirt/images/下

   qemu-img create  -f 指定类型为qcow2  -b 模板文件 新文件  文件大小

  1. [root@kvmsvr ~]# qemu-img create -f qcow2 -b /var/lib/libvirt/images/centos7_muban.qcow2 /var/lib/libvirt/images/svr7.qcow2
  2. Formatting '/var/lib/libvirt/images/svr7.qcow2', fmt=qcow2 size=322122547200 backing_file='/var/lib/libvirt/images/centos7_muban.qcow2' encryption=off cluster_size=65536

 或者,取决与你创建qcow2类型的还是img类型的镜像

  1. [root@kvmsvr ~]# qemu-img create -f qcow2 -b /var/lib/libvirt/images/centos7_muban.qcow2 /var/lib/libvirt/images/svr7.img
  2. Formatting '/var/lib/libvirt/images/svr7.qcow2', fmt=qcow2 size=322122547200 backing_file='/var/lib/libvirt/images/centos7_muban.qcow2' encryption=off cluster_size=65536

2)为虚拟机svr7准备xml配置

删除或修改这四条信息

  1)虚拟机名称   nsd02   //修改成你要改的名字,最好与镜像文件名一致
  2)虚拟机的UUID唯一标识   删除整行内容  
  3)虚拟机磁盘文件路径  
  4)虚拟机网卡信息
      删除整行内容

为什么要删除这些配置信息?

因为这四个配置信息使用来区分虚拟机的信息,并且就算你删除,它们也会在虚拟机被定义时自动生成

  1. [root@kvmsvr ~]# cp /etc/libvirt/qemu/centos7_muban.xml  /etc/libvirt/qemu/svr7.xml    //拷贝配置
  2. [root@kvmsvr ~]# vim /etc/libvirt/qemu/svr7.xml                             //修改配置
  3. svr7                                             //新名称
  4. b20a1a1c-a2de-4b2f-bb03-91a3e36257c7             //删除这行
  5. .. ..
  6.                     //改套接字路径
  7. .. ..
  8.  
  9.         //新磁盘路径,改成你之前创建的镜像文件名
  10. .. ..
  11. .. ..
  12.                         //新MAC地址
  13. .. ..

3)定义新虚拟机svr7

  1. [root@room9pc00 ~]# virsh define  /etc/libvirt/qemu/svr7.xml
  2. 定义域 svr7(从 /tmp/svr7.xml)

4)查看并运行虚拟机svr7

  1. [root@room9pc00 ~]# virsh list --all
  2.  Id    名称                         状态
    ----------------------------------------------------
     -     svr7                           关闭
     
  3. [root@room9pc00 ~]# virsh start svr7

 

六、配置文件详解

1.修改虚拟机名,CPU,内存大小

  标签中<name>可以修改虚拟机名

 <memory>为真实内存大小,若你真机上内存4G,你可以写小于4G的内,注意这里大小用kb表示

  <currentMemory>为虚拟机虚拟机内存大小,不可超过真实内存大小

  分片cpu核数

KVM虚拟机创建,Virsh管理命令,虚拟机克隆,快速克隆虚拟机,虚拟机创建网卡,虚拟机扩容技术(centos版)_第6张图片

 

2.修改磁盘

 找到标签,修改source这一条,注意,这个路径下必须存在该文件,且写绝对路径

 如果你想多加几个磁盘,需要将整个<disk>标签中的文件补齐

 文件格式为qcow2或img,必须是这两者,你也可以写img但是使用qcow2镜像,这个没有限制,但是必须是这两者

KVM虚拟机创建,Virsh管理命令,虚拟机克隆,快速克隆虚拟机,虚拟机创建网卡,虚拟机扩容技术(centos版)_第7张图片

 

3.修改网卡,网络资源

 首先,你要确认自己的真机有几个网卡配置文件,这是我的网卡信息,路径为/etc/sysconfig/network-scripts/,很多都是虚拟网卡,我的真实网卡是ifup-eth这个,你需要知道自己的本机ip,命令行输入ifconfig查看

[student@room9pc01 network-scripts]$ ls
ifcfg-lo          ifdown-ppp       ifup-ib      ifup-Team
ifcfg-有线连接_1  ifdown-routes    ifup-ippp    ifup-TeamPort
ifdown            ifdown-sit       ifup-ipv6    ifup-tunnel
ifdown-bnep       ifdown-Team      ifup-isdn    ifup-wireless
ifdown-eth        ifdown-TeamPort  ifup-plip    init.ipv6-global
ifdown-ib         ifdown-tunnel    ifup-plusb   network-functions
ifdown-ippp       ifup             ifup-post    network-functions-ipv6
ifdown-ipv6       ifup-aliases     ifup-ppp
ifdown-isdn       ifup-bnep        ifup-routes
ifdown-post       ifup-eth         ifup-sit

你要确认哪个网卡配置文件是连接外网的,哪些是虚拟网卡或内网网卡,确认之后,你要去虚拟系统管理器中创建虚拟网卡

 打开虚拟管理器(图形化界面),或者输入命令virt-manager打开

点击编辑,选择连接信息,选择虚拟网络,我已经创建了较多的网卡

KVM虚拟机创建,Virsh管理命令,虚拟机克隆,快速克隆虚拟机,虚拟机创建网卡,虚拟机扩容技术(centos版)_第8张图片

点击+号,输入网卡名,下一步,可以看到有隔离虚拟网络和转发到物理网络,隔离虚拟网络是封闭的,如果你想虚拟机连网,需要选择转发到物理网络,选择转发到真实网卡,你就可以连网了

KVM虚拟机创建,Virsh管理命令,虚拟机克隆,快速克隆虚拟机,虚拟机创建网卡,虚拟机扩容技术(centos版)_第9张图片

介绍了创建虚拟网卡后,我们再来看这个配置文件,首先我们要确定网卡类型 bridge代表网桥,还有一个static,代表静态网,因为我们这里想要虚拟机能连接外网,所有写bridge,然后写源文件,这里需要填你之前创建的虚拟网卡名,我创建了一个名为vbr的网卡,所以我这里写vbr,你要以自己创建的网卡名为主

KVM虚拟机创建,Virsh管理命令,虚拟机克隆,快速克隆虚拟机,虚拟机创建网卡,虚拟机扩容技术(centos版)_第10张图片

 

七、COW技术原理


• Copy On Write,写时复制
– 直接映射原始盘的数据内容
– 当原始盘的旧数据有修改时,在修改之前自动将旧数据存入前端盘
– 对前端盘的修改不回写到原始盘
– 原始盘的数据不能做修改

快速创建qcow前端盘
• qemu-img 通过 -b  选项复用指定原始盘
– qemu-img create -f  qcow2  -b 原始盘   前端盘   大小

1.命令手动创建虚拟机磁盘文件                   
]$ cd /var/lib/libvirt/images/
]$ qemu-img create  -f  qcow2  -b .node_base.qcow2  nsd05.qcow2 5G    #通过原始盘产生前端盘

]$ qemu-img info nsd05.qcow2      #查看虚拟磁盘文件信息
virtual size: 5.0G (5368709120 bytes) #虚拟大小
disk size: 196K                       #实际占用空间大小
backing file: .node_base.qcow2   #原始盘

2.建立xml文件
]$ virsh dumpxml nsd01 > /tmp/nsd05.xml  #导出虚拟机信息
]$ vim /tmp/nsd05.xml #修改 虚拟机名  UUID  磁盘路径   网卡MAC
]$ virsh define  /tmp/nsd05.xml         //定义新文件

 

八、虚拟机扩容技术

我先看一个配置案例,我再来讲解每个命令的使用方式

首先执行virsh blockresize --path [绝对路径] --size 大小  虚拟机名

这条命令是扩充磁盘大小

然后我们进到虚拟机,虽然我们磁盘已经扩充了大小,但是分区并没有扩容,执行命令/usr/bin/growpart /dev/vda 1扩容,注意1要空格.如果执行失败输入LANG=C,然后执行/usr/sbin/xfs_growfs / ,最后输入lsblk查看根分区大小,与磁盘大小一致则成功

案例:

  1. [student@room9pc01 images]$ virsh blockresize --path /var/lib/libvirt/images/openstack.img --size 100G openstack
  2. [student@room9pc01 images]$ virsh console openstack
  3. [root@localhost ~]#LANG=C
  4. [root@localhost ~]# /usr/bin/growpart /dev/vda 1
  5. [root@localhost ~]# /usr/sbin/xfs_growfs /
  6. [root@localhost ~]# df -h
  7. Filesystem Size Used Avail Use% Mounted on
  8. /dev/vda1 50G 914M 50G 2% /

 

使用到的命令:

virsh blockresize --path /var/lib/libvirt/images/openstack.img --size 100G openstack

LANG=C

/usr/bin/growpart /dev/vda 1

/usr/sbin/xfs_growfs /

 

 

九、快速创建虚拟机脚本

这里提供一个脚本通过命令的形式创建虚拟机

[脚本和镜像文件配置系统下载地址]https://github.com/ck784101777/MyHome/tree/master

下载到本地后会有一个clone-vm7的脚本,把它放到/usr/local/bin/下

还有一个镜像文件和配置文件,把镜像文件放到/var/lib/libvirt/images下

把配置文件放在/etc/libvirt/qemu/下

然后执行命令,输入虚拟机的编号,输入大于0的整数即可

]#clone-vm7

Enter VM number:

你可能感兴趣的:(Linux基础)