ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

KVM虚拟化、创建、克隆、qemu-guest-agent安装等实践过程

2020-05-16 12:01:20  阅读:834  来源: 互联网

标签:kvm qcow2 虚拟机 KVM agent virsh qemu vm1


由于公司需求,所以最近学习了KVM,下面是本人安装实践过程。

安装虚拟化软件

  • 查看CPU是否支持KVM
    egrep 'vmx|svm' /proc/cpuinfo --color=auto
    可以看到grep出来的内容,就说明支持kvm。
  • 通过apt进行安装
apt-get install -y qemu-kvm libvirt-daemon libvirt-daemon-system 
  • 启动并设置开机启动
    systemctl start libvirtd && systemctl enable libvirtd

配置网桥网卡,如下配置

  • ubuntu路径: vim /etc/netplan/01-network-manager-all.yaml
network:
  version: 2
  renderer: NetworkManager
  ethernets:
      enp2s0:
          dhcp4: yes
          dhcp6: yes
          #bridge: br0
  bridges:
      br0:
          dhcp4: no
          dhcp6: no
          addresses: [192.168.10.163/23]
          gateway4: 192.168.10.1
          nameservers:
              addresses: [223.5.5.5,223.6.6.6]

重启网卡

netplan apply

安装vncserver

apt-get install xrdp
apt-get install virt-manager
apt-get install tightvncserver

使用qemu-img命令创建磁盘镜像文件

qemu-img create -f qcow2 /root/test.qcow2 20G

使用virt-install命令创建虚拟机

纯命令行安装虚拟机

  • 先上传需要创建虚拟机的镜像文件cn_windows_10_business_editions_version_1909_x64_dvd_0ca83907.iso,和软驱virtio-win-0.1.171_amd64.vfd
virt-install --name win-win10 --ram 2048 --cdrom=/kvm/iso/cn_windows_10_business_editions_version_1909_x64_dvd_0ca83907.iso --disk path=/qcow2/win-win10.qcow2 --disk path=/kvm/iso/virtio-win-0.1.171_amd64.vfd,device=floppy  --network source=enp2s0,source.mode=bridge,type=direct --graphics vnc,password=root,port=5913,listen=0.0.0.0 --noautoconsole --check all=off
  • 更多virt-install 参数使用
virt-install --help
  • 参考
[root@localhost ~]# qemu-img create -f qcow2 /kvm/vfs/vm3.qcow2 20G
[root@localhost ~]# virt-install -n vm3 \     定义虚拟机名
> -r 1024 \         内存大小
> --vcpus 1 \       CPU数量
> -l /kvm/iso/Centos7.iso \      ISO位置
> --disk path=/kvm/vfs/vm3.qcow2,format=qcow2 \      磁盘文件位置及格式
> --graphics vnc,listen=0.0.0.0,port=5924, \         vnc安装,使用5924端口
> --noautoconsole  \      不要自动尝试连接到客户端控制台
> --accelerate \          提速安装
> --autostart             引导主机时自动启动域
[root@localhost ~]# firewall-cmd --add-port=5924/tcp    允许vnc连接

然后可以使用客户端vnc viewer连接新创建的虚拟机,ip:port,ip为宿主机ip,端口为创建虚拟机指定的端口,创建虚拟机没有指定密码则无需密码。亦可使用如下命令查看虚拟机vnc端口

virsh vncdisplay win-win10

安装Qemu-guest-agent

  1. 先在xml里配置channel段,然后启动虚拟机,会在宿主机上生成一个unix socket,同时在vm里生成一个字符设备,生成的unix socket和字符设备可以理解为一个channel隧道的两端

  2. 虚拟机里要启动qemu-guest-agent守护进程,该守护进程会监听字符设备

  3. 然后可以在宿主机上将虚拟机里的qemu-guest-agent所支持的RPC指令经过channel发送到虚拟机里,虚拟机里的qemu-guest-agent从字符设备收到数据后,执行指令,比如读写文件、修改密码等等

  • 在虚拟机的配置文件.xml中添加宿主机和虚拟机通信的通道
virsh edit 虚拟机名字
在<devices>标签中添加如下信息:

 <channel type='unix'>
      <source mode='bind' path='/tmp/channel.sock'/>
      <target type='virtio' name='org.qemu.guest_agent.0'/>
      <address type='virtio-serial' controller='0' bus='0' port='1'/>
</channel>

然后关闭虚拟机并启动虚拟机

virsh shutdown VM
virsh start VM
  • 如果虚拟机是Linux,只需安装qemu-guest-agent
apt-get install qemu-guest-agent
或
yum install qemu-guest-agent
  • Windows
    首先,您必须下载virtio-win驱动程序iso
    下载好wirtio-win手工挂载到虚拟机上
    在这里插入图片描述
    进入虚拟机,转到Windows设备管理器
    查找“ PCI简单通信控制器”
    右键单击->更新驱动程序,然后选择目录为上面挂载的光驱盘:

进入我的电脑->选择手工挂载的光驱盘,找到qemu-guest目录,
双击执行安装程序(qemu-ga-x64.msi(64位)或qemu-ga-x86.msi(32位)
之后,进入服务管理器查看qemu-guest-agent应该已启动并正在运行。

  • 在宿主机通过指令
virsh qemu-agent-command VM  --cmd '{"execute":"guest-info"}'
可以查看其所有支持的命令

复制虚拟机:

  • 普通复制
virt-clone -o vm -n newvm -f /root/centos7_clone1.qcow2 (新磁盘镜像)
或者
virt-clone --connect qemu:///system --original vm1 --name vm1-clone --file /vm-images/vm1-clone.qcow2
  • 通过模板复制虚拟机
    安装完成后,关闭虚拟机
virsh shutdown vm1

将原虚拟机的磁盘镜像文件copy一份,作为镜像模板

cp /kvm/vm/vm1_0.qcow2 /data/kvm/template/tpl.qcow2

使用virsh dumpxml命令获取虚拟机的配置文件

virsh dumpxml --domain vm1 > /data/kvm/template/tpl.xml

修改tpl.xml中镜像文件的指定位置为/data/kvm/template/tpl.qcow2,即我们复制的磁盘镜像文件的路径。

<disk type='file' device='disk'>
    <driver name='qemu' type='qcow2'/>
    <source file='/data/kvm/template/tpl.qcow2'/>
    <target dev='vda' bus='virtio'/>
    <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
</disk>

删除tpl.xml中如下四行内容,其中<source …/>是必删的,其它三行只是为了避免歧义。

<name>vm1</name>
<uuid>47cdbba1-3551-407d-a03c-90d2a60bfa71</uuid>
<mac address='52:54:00:83:79:76'/>
<source mode='bind' path='/var/lib/libvirt/qemu/channel/target/domain-vm1/org.qemu.guest_agent.0'/>

通过 virt-sysprep 命令处理tpl.qcow2,为了clone操作可以用于这个镜像。

virt-sysprep -a /data/kvm/template/tpl.qcow2

这样,我们的模板文件和模板镜像就制作好了。其root密码同vm1的root密码一致。

[root@localhost /data/kvm/template]# tree .

├── tpl.qcow2
└── tpl.xml

如果直接使用virt-sysprep 来重置镜像,不加任何其他参数,会把镜像重置成几乎是完全新安装的状态。其执行的步骤,可以通过list命令查看。

virt-sysprep --list-operations
一些定制的配置,可以通过参数来设置,比如hostname和root密码。

virt-sysprep -a /data/kvm/template/tpl.qcow2  --hostname localhost --root-password password:testpwd

通过模板创建虚拟机

virt-clone --connect qemu:///system \
  --original-xml /data/kvm/template/tpl.xml \
  --name 虚拟机名字 \
  --file /data/kvm/vm/vm5_0.qcow2 (新的磁盘镜像)
virt-clone --connect qemu:///system \
  --original-xml /data/kvm/template/tpl.xml \
  --name vm3 \
  --file /data/kvm/vm/vm3_0.qcow2
clone操作会为新的虚拟机分配新的uuid和mac地址。

定义存储池

  • 存储池介绍
    KVM平台以存储池的形式对存储进行统一管理,所谓存储池可以理解为本地目录,通过远端磁盘阵列(ISCSI,NFS)分配过来磁盘或目录,当然也支持各类分布式文件系统。
    存储池是放置虚拟机存储的位置,可以是本地,也可以是网络存储,具体的虚拟机实例放置在卷上。
    KVM创建的存储池可以理解为一种映射关系,即将某一块挂载至宿主机器上的存储空间形成可被KVM使用的逻辑存储池,以方便虚拟主机的管理
  • 定义存储池
    采用本地目录方式创建KVM存储池
  mkdir -p /data/vmfs
  virsh pool-define-as vmfspool --type dir --target /data/vmfs  (定义池 vmfspool)
  virsh pool-build vmfspool  (构建池 vmfspool)

 virsh pool-list --all
 名称               状态     自动开始
-------------------------------------------
 vmfspool             不活跃  否       

virsh pool-info vmfspool
名称:       vmfspool
UUID:           c6d5bd62-3229-4a16-b267-081d943be80a
状态:       不活跃
持久:       是
自动启动: 否
  • 设置存储池自动启动
virsh pool-autostart vmfspool
  • 启动存储池
virsh pool-start vmfspool
  • 查看存储池信息
名称:       vmfspool
UUID:           c6d5bd62-3229-4a16-b267-081d943be80a
状态:       running
持久:       是
自动启动: 是
容量:       49.98 GiB     #显示挂载分区总容量
分配:       6.59 GiB      #分区已经使用容量
可用:       43.38 GiB     #可用容量

3、在存储池创建映像文件,安装vm
#在存储池创建一个 testqcow2.img (磁盘映像文件)

virsh vol-create-as vmfspool  test.qcow2 10G --format qcow2
 ll /data/vmfs/
总用量 196
-rw------- 1 root root 197120 10月 26 13:39 oel3_qcow2.img
[root@node71 ~]# 
[root@node71 ~]# virsh vol-info --pool vmfspool /data/vmfs/oel3_qcow2.img
名称:       oel3_qcow2.img
类型:       文件
容量:       10.00 GiB
分配:       196.00 KiB
  • 存储池的删除
virsh pool-destroy vmfspool
virsh pool-undefine vmfspool
virsh pool-delete vmfspool

创建快照

  • 磁盘内部快照( 只支持qcow2格式的镜像文件)
virsh snapshot-create-as --domain vm --name vm1

查看虚拟机快照列表

virsh snapshot-list --domain vm1

快照回滚

virsh snapshot-revert --domain vm --snapshotname vm1

快照删除

virsh snapshot-delete --domain vm --snapshotname vm1
  • 磁盘外部快照
    外置磁盘快照创建时,会保存正在使用磁盘作为backing file(此磁盘不再接受新数据,只保存快照前的数据),并创建一个新的磁盘作为overlays以等待写入新数据
    创建
virsh snapshot-create-as --domain vm1 vm1_sn1 --disk-only --diskspec vda,snapshot=external,file=/disk3/vm1_sn.qcow2 --atomic --no-metadata

已生成域快照 vm1_sn1
其中/disk3/vm1_sn.qcow2是新生成的磁盘快照
查看快照列表

virsh snapshot-list vm1
  • 参考文章
    https://www.cnblogs.com/fzxiaomange/p/kvm-inject.html
    https://www.toutiao.com/i6646012291059810823/
    https://www.jianshu.com/p/1f93b724c540

标签:kvm,qcow2,虚拟机,KVM,agent,virsh,qemu,vm1
来源: https://blog.csdn.net/qq_41311159/article/details/106146145

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有