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

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

  • KVM介绍

    • KVM是开源软件,全称是kernel-based virtual machine(基于内核的虚拟机),属于内核的一个模块,Linux 2.6.20核心以上的版本中默认带有kvm模块。它包含一个为处理器提供底层虚拟化 可加载的核心模块kvm.ko(kvm-intel.ko或kvm-AMD.ko)
    • kvm虚拟机=kvm模块 + qemu模拟器
      • kvm负责分配内存和cpu,qemu负责模拟网络设备和io设备
  • 系统初始化

    • 检查服务器是否支持虚拟化

      1
      
      [root@kvm ~]# egrep '(vmx|svm)' /proc/cpuinfo
      
    • 检查内核中是否加载kvm模块

      1
      2
      3
      4
      
      [root@kvm ~]# lsmod | grep kvm
      kvm_intel             174841  3 
      kvm                   578518  1 kvm_intel
      irqbypass              13503  3 kvm
      
    • 关闭selinux

      1
      2
      3
      4
      5
      
      [root@kvm ~]# cat /etc/sysconfig/selinux | grep "SELINUX"
      # SELINUX= can take one of these three values:
      SELINUX=disabled
      # SELINUXTYPE= can take one of three two values:
      SELINUXTYPE=targeted
      
  • 为KVM虚拟机配置桥接网络

    • 新建网桥br0,并配置,转移ip到网桥上

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      
      [root@kvm ~]# cd /etc/sysconfig/network-scripts/
      [root@kvm network-scripts]# cat ifcfg-br0 
      TYPE=Bridge
      BOOTPROTO=none
      DEFROUTE=yes
      NAME=br0
      DEVICE=br0
      ONBOOT=yes
      IPADDR=192.168.175.6
      PREFIX=24
      GATEWAY=192.168.175.2
      
    • 配置eth0使用桥接模式

      1
      2
      3
      4
      5
      6
      7
      
      [root@kvm network-scripts]# cat ifcfg-eth0 
      TYPE=Ethernet
      BOOTPROTO=none
      NAME=eth0
      DEVICE=eth0
      ONBOOT=yes
      BRIDGE=br0
      
  • 配置完成后,重启网络服务

    1
    
    [root@kvm network-scripts]# systemctl restart network
    
  • 查看ifconfig如下

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    
    [root@kvm network-scripts]# ifconfig br0
    br0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
            inet 192.168.175.6  netmask 255.255.255.0  broadcast 192.168.175.255
            inet6 fe80::20c:29ff:fe52:20f6  prefixlen 64  scopeid 0x20<link>
            ether 00:0c:29:52:20:f6  txqueuelen 1000  (Ethernet)
            RX packets 49  bytes 4628 (4.5 KiB)
            RX errors 0  dropped 0  overruns 0  frame 0
            TX packets 53  bytes 7133 (6.9 KiB)
            TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
    
    [root@kvm network-scripts]# ifconfig eth0
    eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
            ether 00:0c:29:52:20:f6  txqueuelen 1000  (Ethernet)
            RX packets 6382  bytes 469272 (458.2 KiB)
            RX errors 0  dropped 0  overruns 0  frame 0
            TX packets 8765  bytes 703077 (686.5 KiB)
            TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
    
  • 安装kvm相关组件

    • 安装命令

      1
      
      [root@kvm network-scripts]# yum  install qemu-kvm python-virtinst virt-* libvirt libvirt-client bridge-utils qemu-img -y
      
  • 各组件功能

    1. kvm模块:qemu-kvm
    2. 图形界面管理虚拟机:virt-manager
    3. 网络接口管理工具:bridge-utils
    4. 虚拟机管理工具:libvirt
    5. 虚拟机管理工具客户端:libivirt-client
    6. python组件,记录xml信息:python-virtinst
    7. qemu组件,创建硬盘,启动虚拟机等:qemu-img
    8. 虚拟机安装命令:virt-install
  • 启动libvirt服务

    1
    
    [root@kvm network-scripts]# systemctl start libvirtd && systemctl enable libvirtd && systemctl status libvirt
    
  • 查看系统网络,会自动生成一个桥设备,默认虚拟机和宿主机通信的设备

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    
    [root@kvm network-scripts]# ifconfig virbr0
    virbr0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
            inet 192.168.122.1  netmask 255.255.255.0  broadcast 192.168.122.255
            ether 52:54:00:66:6f:6a  txqueuelen 1000  (Ethernet)
            RX packets 0  bytes 0 (0.0 B)
            RX errors 0  dropped 0  overruns 0  frame 0
            TX packets 0  bytes 0 (0.0 B)
            TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
    [root@kvm network-scripts]# brctl show
    bridge name     bridge id               STP enabled     interfaces
    br0             8000.000c295220f6       no              eth0
    virbr0          8000.525400666f6a       yes             virbr0-nic
    
  • 安装虚拟机

    • 创建硬盘设备

      1
      
      qemu-img create -f qcow2  /data/vm1.qcow2 5G
      
  • 创建虚拟机

    1
    2
    
    virt-install --virt-type kvm --name vm2 --ram 512 --cdrom=/data/CentOS-7.5-x86_64-DVD-1804.iso --disk path=/data/vm1.qcow2 --network bridge=br0 --graphics vnc,listen=0.0.0.0 --noautoconsole
    注:自行上传iso系统镜像
    
  • 安装tigervnc或者vnc viewe工具可以连接到安装虚拟机图形界面,默认端口5900

  • 查看kvm进程

    1
    2
    3
    4
    
    [root@kvm ~]# ps -ef | grep kvm
    root        628      2  0 22:02 ?        00:00:00 [kvm-irqfd-clean]
    avahi       714      1  0 22:02 ?        00:00:00 avahi-daemon: running [kvm.local]
    qemu       3070      1  3 22:21 ?        00:01:26 /usr/libexec/qemu-kvm -name vm2 -S -machine pc-i440fx-rhel7.0.0,accelkvm,usb=off,dump-guest-core=off -cpu IvyBridge-IBRS -m 512 -realtime mlock=off -smp 1,sockets=1,cores=1,threads=1 -uuid ef1dcbd8-1684-4ae0-9dc7-500d59236911 -no-user-config -nodefaults -chardev socket,id=charmonitor,path=/var/lib/libvirt/qemu/domain-2-vm2/monitor.sock,server,nowait -mon chardev=charmonitor,id=monitor,mode=control -rtc base=utc,driftfix=slew -global kvm-pit.lost_tick_policy=delay -no-hpet -no-shutdown -global PIIX4_PM.disable_s3=1 -global PIIX4_PM.disable_s4=1 -boot strict=on -device ich9-usb-ehci1,id=usb,bus=pci.0,addr=0x4.0x7 -device ich9-usb-uhci1,masterbus=usb.0,firstport=0,bus=pci.0,multifunction=on,addr=0x4 -device ich9-usb-uhci2,masterbus=usb.0,firstport=2,bus=pci.0,addr=0x4.0x1 -device ich9-usb-uhci3,masterbus=usb.0,firstport=4,bus=pci.0,addr=0x4.0x2 -device virtio-serial-pci,id=virtio-serial0,bus=pci.0,addr=0x5 -drive file=/data/vm1.qcow2,format=qcow2,if=none,id=drive-virtio-disk0 -device virtio-blk-pci,scsi=off,bus=pci.0,addr=0x6,drive=drive-virtio-disk0,id=virtio-disk0,bootindex=1 -drive if=none,id=drive-ide0-0-0,readonly=on -device ide-cd,bus=ide.0,unit=0,drive=drive-ide0-0-0,id=ide0-0-0 -netdev tap,fd=26,id=hostnet0,vhost=on,vhostfd=28 -device virtio-net-pci,netdev=hostnet0,id=net0,mac=52:54:00:0f:1f:00,bus=pci.0,addr=0x3 -chardev pty,id=charserial0 -device isa-serial,chardev=charserial0,id=serial0 -chardev socket,id=charchannel0,path=/var/lib/libvirt/qemu/channel/target/domain-2-vm2/org.qemu.guest_agent.0,server,nowait -device virtserialport,bus=virtio-serial0.0,nr=1,chardev=charchannel0,id=channel0,name=org.qemu.guest_agent.0 -device usb-tablet,id=input0,bus=usb.0,port=1 -vnc 0.0.0.0:0 -vga cirrus -device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x7 -msg timestamp=on
    

    实际上一个虚拟机对于宿主机而言,只是宿主机上的一个进程而已

  • 查看虚拟机

    1
    2
    3
    4
    
    [root@kvm ~]# virsh list
     Id    Name                           State
    ----------------------------------------------------
     2     vm2                            running
    
  • virsh常用命令

    1
    2
    3
    4
    5
    6
    7
    
    virsh list --all     ##列出所有虚拟机
    virsh list           ##列出运行中的虚拟机
    virsh start vm       ##启动虚拟机
    virsh shutdown vm    ##关闭虚拟机
    virsh undfine vm     ##销毁虚拟机
    virsh console vm1    ##通过console连接虚拟机
    virsh edit vm1       ##编辑位于/etc/libvirt/qemu/vm1.xml
    
  • https://www.hiecho.cn/2019/02/27/KVM%E8%99%9A%E6%8B%9F%E5%8C%96%E6%8A%80%E6%9C%AF%E4%B9%8B%E4%BD%BF%E7%94%A8Qemu-kvm%E5%88%9B%E5%BB%BA%E5%92%8C%E7%AE%A1%E7%90%86%E8%99%9A%E6%8B%9F%E6%9C%BA/
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值