创新路
我们一直在努力

【学习】KVM虚拟化技术-三秒快速克隆虚拟机

KVM虚拟化技术

KVM

  linux内核的模块,它需要CPU的支持,采用硬件辅助虚拟化Intel-VT,AMD-V,内存的相关如IntelEPT AMD RVI 技术

QEMU

  是一个虚拟化的仿真工具,通过 ioctl 与内核kvm 交互完成对硬件的虚拟化支持

Libvirt

  是一个对虚拟化管理的接口和工具,提供用户端virsh , virt-install, virt-manager, virt-view 与用户交互

 

kvm虚拟化平台所需要的软件centosrhel7软件包内置

1.qemu-kvm                                  //kvm 提供底层仿真支持

2.libvirt-daemon                       //libvirtd 守护进程,管理虚拟机

3.libvirt-client                       //用户端软件,提供客户端管理命

4.libvirt-daemon-driver-qemu                                                                          //libvirtd 连接 qemu 的驱动

注:安装完成后启动libvirtd

 

虚拟机的组成

– 内核虚拟化模块(KVM)

– 系统设备仿真(QEMU)

– 虚拟机管理程序(LIBVIRT)

– 一个 XML 文件(虚拟机配置声明文件)

– 位置 /etc/libvirt/qemu/

– 一个磁盘镜像文件(虚拟机的硬盘)

– 位置 /var/lib/libvirt/images/

 

Virsh基本管理操作

查看虚拟化信息

virsh nodeinfo             //查看KVM节点(服务器)信息

virsh list [–all]          //列出虚拟机

virsh net-list [–all]        //列出虚拟网络

virsh dominfo 虚拟机名称      //查看挃定虚拟机的信息

开关机操作

virsh start|reboot|shutdown 虚拟机名称  //运行|重启|关闭指定的虚拟机

virsh destroy 虚拟机名称         //强制关闭挃定的虚拟机

virsh autostart [–disable]虚拟机名称  //将挃定的虚拟机设为开机自动运行

 

虚拟机的镜像文件格式

RAWQCOW2

  虽然RAWI/O效率高,但是QCOW2占用空间小,支持压缩,支持后端盘复用(快clone虚拟机),支持快照,所以常用QCOW2,并且也KVM默认格式

COW技术原理

Copy On Write,写时复制

  –直接映射原始盘的数据内容

  –当原始盘的旧数据有修改时,在修改之前自劢将旧数据存入前端盘

  –对前端盘的修改不回写到原始盘

 

Qemu-img(虚拟机磁盘管理命令)支持rawqcow2vdivmdk等格式

  格式:

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

  常用的命令有:

    create 创建一个磁盘     convert 转换磁盘格式

    info 查看磁盘信息       snapshot 管理磁盘快照

  创建新的镜像盘文件:

    qemu-img create -f 格式 磁盘路径 大小

    例:qemu-img create -f qcow2 disk.img 50G

  查询镜像盘文件的信息:

    qemu-img info 磁盘路径

    例:qemu-img info disk.img

  注:-b 使用后端模板文件

例:qemu-img create -b disk.img -f qcow2 disk1.img

 

libvirtd 网络接口(使虚拟机能上网,提供DHCP

  创建配置文件 /etc/libvirt/qemu/networks/vbr.xml

    <network>

      <name>vbr</name>

      <bridge name="vbr"/>

      <forward mode="nat"/>

      <ip address="192.168.1.254" netmask="255.255.255.0">

        <dhcp>

          <range start="192.168.1.100" end="192.168.1.200"/>

        </dhcp>

      </ip>

</network>

  注:forward标签是开起转发功能,dhcp是提供IP地址,文件保存后需要先创建虚拟网络,再启动虚拟网络,再设置开机自启动

  net-define vbr.xml    //创建虚拟网络

  net-start vbr        //启动虚拟网络

  net-list           //查看虚拟网络

  net-autostart vbr     //设置 vbr 虚拟网络开机自启动

  net-destroy vbr      //停止虚拟网络

  net-undefine vbr     //删除虚拟网络

  net-edit vbr        //修改 vbr 网络的配置,设置不对用这条命令修改和vim操作类似

 

 

虚拟机远程管理

  1.可用virt-manager图形化软件通过 add connection 管理其它

机器上的虚拟机,一般通过"remote tunnel over ssh"就可以了需要注意的是 virt-manager 需要使用 ssh 免密码登录如果没有免密码登录需要单独安装 python ssh 相关模块,这里我们可以使用部署 key 的方法解决

  2.使用 virsh 客户端工具

    连接本地:virsh -c qemu:///system (默认选项)

    连接远程:virsh -c qemu+ssh://user@ip.xx.xx.xx:port/system

 

xml配置文件

  定义了一个虚拟机的名称、CPU、内存、虚拟磁盘、网卡等参数设置,默认位于 /etc/libvirt/qemu/虚拟机名.xml

  导出xml配置文件

virsh dumpxml 虚拟机名 > 虚拟机名.xml

  编辑虚拟机的配置文件

    virsh edit 虚拟机名

    注:若修改namememorydisknetwork,可保存为新虚拟机配置

  导入虚拟机(根据修改后的独立xml文件定义新虚拟机)

virsh define XML描述文件

  删除虚拟机(必要时去除多余的xml配置:虚拟机改名,磁盘MAC地址冲突)

    virsh undefine 虚拟机名   //取消被定义的虚拟机

Xml配置文件详解

  —<domain type='kvm' id='4'>

    <name>centos7.0</name>

    <uuid>8413f30a-c978-4796-a28f-8ba9fe74b759</uuid>

    <memory unit='KiB'>2097152</memory>

    <currentMemory unit='KiB'>2097152</currentMemory>

    id=4 个性化设置 ,去掉

    uuid 去掉

    memory unit 虚拟机最大使用内存,可以手调整

currentmemory 创建虚拟机使用内存(一般这两个内存设置成一样)

  —<vcpu placement='static'>2</vcpu>  //设置cpu核心数

  —<resource> … … </resource>         //资源设置,可以删除

  —<os>

      <boot dev='hd'/>

    </os>    //系统配置及引导设备,不需要修改

  —<features> … … </features>   //电源相关配置无需修改

  —<cpu mode='host-passthrough' check='none'/>  //使用物理cpu!

  —<clock … … </clock>   //时钟相关配置,可以初、删除

  —<on_poweroff>destroy</on_poweroff>

    <on_reboot>restart</on_reboot>

<on_crash>destroy</on_crash>     //重启,关机,强制关闭对应命令

  —<pm> … … </pm>            //内存及硬盘休眠相关设置,可以删除

  —<devices> … … </devices>    //仿真设备相关配置

  —<seclabel> … … </seclabel>   //驱劢安全标签,可删除

  —<address ….               //总线地址,别名配置,都可以删除

      <alias …

  —<emulator>/usr/libexec/qemu-kvm</emulator>

      <disk … … </disk>    //硬盘配置,需要修改

  —<controller type='usb'        //usb 相关设备配置,可以初除

  —仿真设备配置

    – type='pci' pci总线设备,可删除

    – type='virtio-serial' 串口设备需要保留串口终端

    – type='network' 网络配置需要修改

    – type='pty' 串口终端,需要保留

    – type='unix' 虚拟机通讯控制接口

    – type='spicevmc' 图形图像相关配置可以删除

type='tablet' 数位板,可以删除

  —仿真设备配置

    – type='mouse' 鼠标,保留

    – type='keyboard' 键盘保留

    – graphicsvideo 图形图像显卡相关配置,可以删除

    – sound 声卡相关配置,可以删除

    – redirdev 设备重定向,可以删除

    – memballoon 内存气泡,可以劢态调整内存

 

做一个后端盘,快速clone虚拟机

环境操作

  1、物理机

禁用 selinux firewalld

修改配置文件 /etc/selinux/config

SELINUX=disabled

禁用 firewalld

systemctl stop firewalld

systemctl mask firewalld

  2.网络 yum

  1 安装 FTP 服务

yum install -y vsftpd

/etc/vsftpd/vsftpd.conf

listen=YES

listen_ipv6=NO

 

systemctl start vsftpd

 

验证 ftp 服务

lftp 命令

  lftp ip.xx.xx.xx -u username 默认连接 ftp 服务

  lftp sftp://ip.xx.xx.xx -u username 连接 ssh 服务

  mount iso

  mkdir -p /var/ftp/CentOS7

  mount -t iso9660 -o ro,loop /var/iso/CentOS7-1708.iso

/var/ftp/CentOS7

 

3 创建自定义 yum

  mkdir -p /var/ftp/public

  cp xx.rpm /var/ftp/public

  cd /var/ftp/public

  createrepo  .             创建新的

  createrepo  –update  .   更新

 

#————-物理机————-#

转发 dns 安装配置

  yum install -y bind bind-chroot

配置文件 /etc/named.conf

  //listen-on-v6 port 53 { ::1; };

  allow-query     { any; };

  forwarders { 202.106.196.115; };

  dnssec-enable no;

  dnssec-validation no;

时间服务器

  yum install -y chrony

  server:配置 /etc/chrony.conf

  server ntp1.aliyun.com iburst

  bindacqaddress 0.0.0.0

  allow 0/0

 

物理机为centos系统(环境配置结束后开始创建快速克隆后端盘)

1.物理机

  禁用 selinux firewalld

    修改配置文件 /etc/selinux/config      SELINUX=disabled

  禁用 firewalld   systemctl stop firewalld

               systemctl mask firewalld (创建一个链接丢进黑洞不能启用)

2.物理机配置FTP做网络yum,并且挂载centos镜像做FTP共享

  yum install -y vsftpd    Vim /etc/vsftpd/vsftpd.conf

  listen=YES

  listen_ipv6=NO

3.验证 ftp 服务

  lftp 命令(yum -y install lftp

    lftp ip.xx.xx.xx -u username 默认连接 ftp 服务

lftp sftp://ip.xx.xx.xx -u username 连接 ssh 服务

4.在物理机上添加一个libvirtd的虚接口vbr,(虚机上网文件)注意置开机自

5./var/lib/libvirt/images/下创建一个新的qcow2的虚拟磁盘,大小为10G

6.virt-manager上面创建一个新的虚拟机,通过网络安装,urlyum的地址(如:ftp://192.168.4.254/centos),内存为2048M最好,cpu2核,自定义储存选择为刚才创建的虚拟磁盘,虚拟网络选vbr

7.安装虚拟机前配置参数:修改语言为English关闭KDUMP,选择手动分区,使用标准分区格式,点击+号分一个根分区,accept change 同意更改,开始安装。

8.重启后配置网络yum,自动获取IPbaseurl地址为vbr的地址如192.168.1.254selinux设置为disabled,(根据需要卸载防火墙和netword-manager,卸载前先stop network),

写个ifcfg-eth0文件覆盖/etc/sysconfig/network-script/ifcfg-eth0(配置文件一定要dhcp自动获取IP,不然后面克隆虚拟机后会地址冲突,网络配置文件必须精简到下面5行),内容如下:

  DEVICE="eth0"

  ONBOOT="yes"

  IPV6INIT="no"

  TYPE="Ethernet"

  BOOTPROTO="dhcp"

再重启动network

9.导入镜像的公钥,检查下载的镜像是否被修改过,先安装lftp,在yum里面修改gpgcheck=1,下载ftpcentos里面的RPM-GPG-KEY-CentOS-7公钥,并导入:rpm –import RPM-GPG-KEY-CentOS-7

10.添加 Console 配置及初除磁盘分区里的个性化信息(用于virsh console连接虚拟机)

  Vim /etc/default/grub 倒数第二行修改为

  GRUB_CMDLINE_LINUX="biosdevname=0 net.ifnames=0 console=ttyS0,115200n8"

  在最后添加

    GRUB_DISABLE_LINUX_UUID="true"

GRUB_ENABLE_LINUX_LABEL="true"

重新生成:grub2-mkconfig -o /boot/grub2/grub.cfg

11.blkid 查看 uuid 对应的磁盘设备,修改 fstab 文件

   Vim /etc/fstab     修改为如 /dev/vda

12.安装分区扩展软件

yum install -y cloud-utils-growpart

设置第一次开机自动扩容根目录

chmod 755 /etc/rc.local

rc.local 里加入如下配置

###

/usr/bin/growpart  /dev/vda  1

/usr/sbin/xfs_growfs /

/usr/bin/sed '/^###/,$d' -i /etc/rc.d/rc.local

注:echo $LANG 如若为zh_CN.UTF_8中文的话,扩容可能会失败,必须要设置成en_US.UTF-8

13.关闭虚拟机后执行信息清理工作

virt-sysprep -d node

14.通过qemu命令创建前端盘,以后端创建的盘为模版,创建xml文件,定义虚拟机

 

注:修改虚拟机的配置信息可直接virsh edit 虚拟机名称   进行修改,如要修改内存,则在xml配置文件的上端修改内存的大小,通常两行都要修改,添加硬盘则复制<disk..>那一块粘贴到下方,修改硬盘的名称,删除address总线的模块,然后再qemu-img添加一块空的虚拟磁盘,大小就为需要添加的硬盘大小,然后重启。如若需要添加网卡,则复制<interface>那一块,粘贴到下方,同样删除address等个性化配置,网卡名则改为例private1这种,然后重启虚拟机,复制网卡的模版ifcfg-eth0修改为ifcfg-eth1,然后配置自己所需要的参数,systemc restart network 可以ifconfig可以查看.

例:添加网卡

      <interface type='bridge'>

        <source bridge='private1'/>

        <model type='virtio'/>

      </interface>

添加硬盘

  cd /var/lib/libvirt/images/

      qemu-img create -f qcow2 disk.img 20G

 

      <disk type='file' device='disk'>

        <driver name='qemu' type='qcow2'/>

        <source file='/var/lib/libvirt/images/disk.img'/>

        <target dev='vdb' bus='virtio'/>

      </disk>

  

 如何挂载虚拟盘

  基本用法

    guestmount -a 虚拟机磁盘路径 -i /挂载点

    例:[root@kvmsvr ~]# mkdir /mnt/kdisk

          [root@kvmsvr ~]# guestmount -a node1.qcow2 -i /mnt/kdisk

          [root@kvmsvr ~]# ls /mnt/kdisk

未经允许不得转载:天府数据港官方信息博客 » 【学习】KVM虚拟化技术-三秒快速克隆虚拟机

客官点个赞呗! (0)
分享到:

评论 抢沙发

评论前必须登录!

天府云博 - 做有态度的开发&运维&设计学习分享平台!

联系我们百度云主机