美文网首页
虚拟化技术(Virtualization)-KVM

虚拟化技术(Virtualization)-KVM

作者: Net夜风 | 来源:发表于2018-12-03 23:56 被阅读0次

    虚拟化技术(Virtualization)

    • 计算机基础:

      • 冯诺依曼体系中计算机的五大部件:控制器、运算器、输入设备、输出设备、存储器
      • 操作系统
        操作系统就是计算机资源的虚拟化,即把底层单组架构或单组计算机资源给虚拟化,把单核心的CPU时序复用,分成时间片来使用;把内存空间复用,分成单独的离散空间(页框)使用;操作系统将有限的计算机资源划分成复用的形式,虚拟化把操作系统这得到的资源进行分割,使用软件建模,用软件模拟出一个CPU,模拟或虚拟成一个单独的系统空间
    • 虚拟化技术的类型

      • 主机虚拟化:
        • 完全虚拟化:vmware workstation、kvm、xen(hvm)
        • 半虚拟化:xen、vmware vshphere、uml
        • 模拟:qemu是个模拟器
      • 用户空间虚拟化(容器)
        • 例如:lxc、openvz、Solaris、Containers、FresBSD jails
      • 库虚拟化:WINE、cywin
      • 应用程序虚拟化:jvm、pvm
    • 主机虚拟化

      • CPU:

        • 模拟:emulation, 虚拟机的arch与物理平台的arch可以不相同;qemu;
        • 虚拟:virtualization
          • 完全虚拟化(full-virt)
            BT: 二进制转换 (软件)
            HVM:硬件辅助的虚拟化(硬件): Intel(vt-x)、AMD(amd-v)
          • 半(准)虚拟化 (para-virt)
            GuestOS得明确知道自己运行于虚拟化技术
      • 内存:

        • MMU virtualization:中文名是内存管理单元,它是中央处理器(CPU)中用来管理虚拟存储器、物理存储器的控制线路,同时也负责虚拟地址映射为物理地址,以及提供硬件机制的内存访问授权,多用户多进程操作系统
          • Intel: EPT, Extended Page Table
          • AMD: NPT, Nested Page Table
        • TLB virtualization:(Translation Lookaside Buffer)转换检测缓冲区是一个内存管理单元,用于改进虚拟地址到物理地址转换速度的缓存。
          • tagged TLB

        IO:
        Emulation
        Para-virtualization
        IO-through:IO透传

    • 主机虚拟化的类型

      • (1) Type -1:在硬件上装一个虚拟机(中间件hypervisor),所有系统都装在这个hypervisor之上;例如:xen、vmware ESX/ESXI
      • (2) Type -2:在硬件上安装运行一个OS(Host OS),而此OS上运行一个VMM; 例如:vmware workstation,virtualbox、kvm
    • Linux目前流行的开源虚拟化技术解决方案

      • 主机虚拟化:xen、kvm、virtualbox
      • 容器级:lxc、libcontainer、runC、openvz
      • 模拟器:qemu

    KVM

    1. XEN


      QQ截图20181201142323.png

    xen以软件的形式安装后,重启会取代linux内核跑在硬件之上,之前的linux会成为第一个虚拟化主机,被称为特权主机;xen跑在硬件之上后只驱动CPU和内存,I/O设备由之前的linux来驱动,其他主机驱动I/O设备需要通过特权主机,而使用CPU和内存则通过XEN

    1. KVM:Kernel-base Virtual Machine,Qumranet公司研发,后来被RedHat收购
      使用于X86_64操作系统;依赖于HVM,要求CPU必须支持虚拟化技术


      KVM.png

    kvm做为一个内核模块,安装以后取代内核,并把系统的用户空间变为一个控制台,在之上就可以安装虚拟机,优点:不需要重启就可以使用

    • 主要作用:运行程序而不是运行CPU
    • KVM两类组件:
      • /dev/kvm (kvm.ko):工作为hypervisor,在用户空间可通过系统调用ioct()与内核中的kvm模块交互,从而完成虚拟机的创建、启动、停止、删除等各种操作
      • qem-kvm进程:工作于用户空间,用于实现I/O设备模拟;用于实现一个虚拟机实例
    • KVM模块载入内存之后,系统的运行模式:
      • 内核模式:GuestOS执行IO类操作时,或其他的特殊治理操作时的模式;它也被称为“Guest-Kernel”模式;
      • 用户模式:Host OS的用户空间,用于代为GuestOS发出IO请求;
      • 来宾模式:GuestOS的用户模式;所有的非IO类请求
    • KVM的特性:
      • 内存管理:
        • 将分配给VM的内存交换至swap
        • 支持使用Huge Page(大内存页)
        • 支持使用Inter EPT或AMD RVI技术完成技术内存地址映射
        • 支持KSM(Kernel Same-page Merging)内核相同页面合并技术
      • 硬件支持:取决于Linux内核
      • 存储:
        • 本地存储
        • 网络附加存储
        • 存储区域网络
        • 分布式存储:GlusterFS等
      • 实时迁移:live migration
      • 支持GuestOS
      • 设备驱动:
        • 支持IO设备的完全虚拟化:模拟硬件
        • 支持IO设备的版虚拟化:virtio
          • virtio-blk 块设备半虚拟化
          • virtio-net 网络设备半虚拟化
          • virtio-pci 任何pci接口设备的半虚拟化
    • kvm管理工具:kvm有两组工具能实现虚拟机管理
      • 第一组工具:qemu工具
        qemu是个独立的虚拟机项目,其中有一个qemu-kvm分支是于kvm结合的分支,后来独立成了一个项目;然后又合并到了主项目,主干分支支持kvm和xen,而qemu-lvm分支只支持kvm;
        qemu-kvm组能件实现虚拟机的创建、启动管理各种接口都支持,但只是命令行接口,使用不便,而且这些组件非常底层;
        • qemu-kvm:专门用于管理kvm的工具
        • qemu-img:管理虚拟机磁盘映像文件
        • qemu-io:管理IO设备
    • 第二组工具:C/S架构的libvirt组件
      • virsh:支持基于C/S架构,与守护进程libvirtd同喜的命令行工具
      • virtual machine manger:基于python研发的图形界面工具,包括两个工具:
        • virt-manger:虚拟机管理器;创建、启动、删除、停止等
        • virt-viewer:虚拟机查看器
      • virtinst:虚拟机创建、安装工具,是命令行工具
        • virt-install
        • virt-clone
        • virt-convert
        • virt-image
      • 因此,创建虚拟机有三种方式:
        • qemu
        • virtual machine manager
        • virtinst
    • 安装使用KVM
      • 判断CPU是否支持硬件虚拟化:
        grep -i -E '(vms|svm|lm)' /porc/cpuinfo
        modinfo kvm
        lsmode|grep kvm
      • 运行中的kvm虚拟机就是一个qemu-kvm进程,运行qemu-kvm程序并传递给它合适的选项及参数技能完成虚拟机启动,终止此进程即关闭虚拟机
      • kvm工具栈
        • qemu:
          • qemu-kvm
          • qemu-img
          • qemu-io
        • libcirt:
          • CUI:virt-manager,virt-viewer
          • CLI: virtsh,cirt-install
        • c/s:
          • libvirtd
      • 安装:
        • (1)装载内核模块

          • kvm:核心模块
          • kvm-intel|kvm-amd
        • (2)使用virt-manager管理KVM

           [root@kvm ~]# yum -y groupinstall "Virtualization Host"
           [root@kvm ~]# yum -y install qemu-kvm libvirt-daemon-kvm virt-manager
           [root@kvm ~]# systemctl start libvirtd.service
           [root@kvm ~]# ps aux |grep libvirtd
           [root@kvm ~]# virt-manager`  启动
          启动后virt-manager显示乱码需要安装字体:
           [root@kvm ~]# yum install dejavu-lgc-sans-fonts
          
    使用qemu-kvm管理vms
    • Qemu:
      • 处理器模拟器
      • 仿真各种IO设备
      • 将仿真设备连接至主机的物理设备
      • 提供用户接口
    • qemu-kvm命令语法:
      qemu-kvm [option] [disk_image]
    • options有很多类别:标准选项、块设备相关选项、显示选项、网络选项、...
      • 标准选项:

        • machine [type=] name: -machine help用来获取列表;用于指定模拟的主机类型;
        • -cpu cpu: -cpu help 用来获取类别;用于指定要模拟的CPU型号;
        • -smp n[,maxcpus=cpus] [,cores=cores] [,threads=threads] [,sockets=sockets]: 指明虚拟机上的vcpu的数量及拓扑;
        • -boot [order=drives] [,once=drives] [,menu=on|off] [,splash=sp_name] [,splash-time=sp_time][,reboot-timeout=rb_time] [,strict=on|off]:
          • order:各设备的引导次序;c表示第一块硬盘,d表示第一个光驱设备;例:-boot order=dc,once=d
        • -m megs: 虚拟机的内存大小
        • name NAME: 当前虚拟机的名称,要唯一
      • 块设备相关的选项:

        • -hda/-hdb file: 指明IDE总线类型的磁盘映射文件路径,第0个和第一个
        • -hdc/-hdd file: 第2个和第3个
        • cdrom file: 指定要使用光盘映像文件
        • drive [file=file][,if=type][,media=d][,index=i][,cache=writethrough|writeback|none|directsync|unsafe][,format=f]]:
          • file=/PATH/TO/SOME_IMAGE_FILE:映像文件路径;
          • if=TYPE: 块设备总线类型,ide,scsi,sd,floppy,virtio,...
          • media=TYPE:介质类型,cdrom和disk
          • index=i:设定同一类型设备多个设备的编号
          • cache=writethrough|writeback|none|directsync|unsafe:缓存方式
          • format=f:磁盘映像文件的格式
      • 显示选项:

        • -display type:显示类型,sdl,curses,none和vnc;
        • nographic: 不使用图形接口
        • vga [std|cirrus|vmware|qxl|xenfb|none]: 模拟出的显卡的型号
        • vnc display[,option[,option[,...]]]: 启动一个vnc server来显示虚拟机
          • display:
            (1) HOST:N 在host主机的第N个桌面好输出vnc;5900+N
            (2)unix:/PATH/TO/SOCK_FILE
            (3)none
          • options:
            password:连接此服务所需要的密码
        • -monitor stdio: 在标准输出上显示monitor界面
      • 网络选项:

        • -net nic[,vlan=n][,macaddr=mac][,model=type][,name=str][,addr=str][,vectors=v]: 为虚拟机创建一个网络接口,并将其添加至指定的VLAN
          • model=type:指明模拟出的网卡型号,ne2k_pci,i82551,i8255b,i82559er,rt18139,e1000,pcnet,virtio
          • net nic,model=?
          • macaddr=mac:指明mac地址;52:54:00:...
        • -net tap[,vlan=n]][,name=str][,fd=h][,fds=x:y:...:z][,ifname=name][,script=file][,downscript=dfile]: 通过物理的tap网络接口连接至vlan n
          • script=file:启动虚拟机时要执行的脚本,默认为/etc/qemu-ifup

          • downscript=dfile: 关闭虚拟机时要执行的脚本,/etc/qemu-ifdown

          • ifname=NAME: 自定义接口名称

              cat  /etc/qemu-ifup                         
                          #!/bin/bash
                          #
                          bridge=br0
            
                          if [ -n "$1" ];then
                              ip link set $1 up
                              sleep 1
                              brctl addif $bridge $1
                              [ $? -eq 0 ] && exit 0 || exit 1
                          else
                              echo "Error: no interface specified."
                              exit 1
                          fi  
            
      • 其它选项:

        • -daemonize: 以守护进程运行

    示例1:

     ~]#  qemu-kvm -name c2 -smp 2,maxcpus=4,sockets=2,cores=2 -m 128 -drive file=/images/kvm/cos-i386.qcow2,if=virtio -vnc  :1 -daemonize -net nic,model=e1000,macaddr=52:54:00:00:00:11 -net tap,script=/etc/qemu-ifup
    

    示例2:

    ~]# qemu-kvm -name winxp -smp 1,maxcpus=2,sockets=1,cores=2 -m 1024 -drive  file=/data/vms/winxp.qcow2,media=disk,cache=writeback,format=qcow2 file=/tmp/winxp.iso,media=cdrom -boot order=dc,once=d -vnc :1 -net nic,model=rtl8139,macaddr=52:54:00:00:aa:11 -net tap,ifname=tap1,script=/etc/qemu-ifup -daemonize
    
    虚拟化模型:
    • NAT模式(相当于仅主机,默认类型)
      • libvirtd安装启动后会自动创建出一个virbr0的接口
      • virbr0表示网桥设备,类似于vmware workstation中的nat类型网络
      • 此网络模型下虚拟机可以访问宿主机,也可以访问互联网,但是不能从网络或其他的客户机访问虚拟机,性能较差
    • Host-only模型(也叫隔离模式)
      • 类似于vmware workstation中的仅主机模式
      • 将所有的虚拟机组成一个局域网,不能和外界通信,不能访问Internet,其他主机也不能访问虚拟主机,安全性高
    • Bridge模型(桥接接口)
      • 类似于vmware workstation中的桥接
      • 虚拟机与宿主机处于同一个网络环境,类似于一台真实的宿主机,可以直接访问网络资源,设置好后虚拟机与宿主机,互联网之间的通信很容易

    示例:创建2个虚拟机实例演示网络通信

    1. 隔离网络:只有虚拟机之间可以通信,与物理机无法通信,与外网也无法通信

       [root@kvm ~]# yum -y groupinstall "Virtualization Host"
       [root@kvm ~]# yum -y install virt-manager libvirt-daemon-kvm qemu-kvm dejavu0lgc-sans-fonts
       [root@kvm ~]# which brctl
       /usr/sbin/brctl
       [root@kvm ~]# rpm -qf /usr/sbin/brctl
       bridge-utils-1.5-9.el7.x86_64
       创建独立的桥设备:
       [root@kvm ~]# ip link set br-int up或者 ifconfig br-int up   #激活桥接口
       [root@kvm ~]# ifconfig
       br-int: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
               inet6 fe80::3041:11ff:fe83:15ac  prefixlen 64  scopeid 0x20<link>
               ether 32:41:11:83:15:ac  txqueuelen 1000  (Ethernet)
               RX packets 0  bytes 0 (0.0 B)
               RX errors 0  dropped 0  overruns 0  frame 0
               TX packets 6  bytes 508 (508.0 B)
               TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
      

    能看到br-int接口后,此时没有ip地址,就意味着不能作为物理机的接口与外部通信;创建两个虚拟机网卡关联到这个桥上,然后两个虚拟机配置同一个网段的ip地址,就能互相通信了;

        启动2个虚拟机实例:
        [root@kvm ~]# vim /etc/qemu-ifup
            #!/bin/bash 
            #
            bridge=br-int
            if [ -n "$1" ];then
                    ip link set $1 up
                    sleep 1
                    brctl addif $bridge $1
                    [ $? -eq 0 ] && exit 0 || exit 1
            else
                    echo "ERROR:no interface specified"
                    exit 2
            fi      
        [root@kvm ~]# bash -n /etc/qemu-ifup
        [root@kvm ~]# chmod +x /etc/qemu-ifup
        [root@kvm ~]# vim /etc/qemu-ifdown      
            #!/bin/bash
            #
            bridge=br-int
            if [ -n "$1" ];then
                    brctl delif $bridge $1
                    ip link set $1 down 
                    exit 0
            else
                    echo "ERROR: no interface specified"
                    exit 1
            fi
        [root@kvm ~]# bash -n /etc/qemu-ifdown      
        [root@kvm ~]# chmod +x /etc/qemu-ifdown
        
        [root@kvm ~]# mkdir -pv /vms/cirros
        mkdir: created directory ‘/vms’
        mkdir: created directory ‘/vms/cirros’
        [root@kvm ~]# cd /vms/cirros
        [root@kvm cirros]# cp /root/cirros-0.3.4-x86_64-disk.img cirros1.img
        [root@kvm cirros]# cp /root/cirros-0.3.4-x86_64-disk.img cirros2.img
        [root@kvm cirros]# ln -sv /usr/libexec/qemu-kvm /usr/sbin/    #qemu-kvm命令
        ‘/usr/sbin/qemu-kvm’ -> ‘/usr/libexec/qemu-kvm’
        [root@kvm cirros]# qemu-kvm -name c1 -m 256 -smp 2 -drive file=/vms/cirros/cirros1.img,media=disk,if=virtio,format=qcow2 -net nic,model=virtio,macaddr=52:54:00:00:00:11 -net tap,script=/etc/qemu-ifup,downscript=/etc/qemu-ifdown -vnc :0 -daemonize
        [root@kvm cirros]# qemu-kvm -name c2 -m 256 -smp 2 -drive file=/vms/cirros/cirros2.img,media=disk,if=virtio,format=qcow2 -net nic,model=virtio,macaddr=52:54:00:00:00:22 -net tap,script=/etc/qemu-ifup,downscript=/etc/qemu-ifdown -vnc :1 -daemonize
        [root@kvm cirros]# ps aux | grep qemu-kvm
        root      37969 10.6  6.3 720160 118664 ?       Sl   08:59   0:12 qemu-kvm -name c1 -m 256 -smp 2 -drive file=/vms/cirros/cirros1.img,media=disk,if=virtio,format=qcow2 -net nic,model=virtio,macaddr=52:54:00:00:00:11 -net tap,script=/etc/qemu-ifup,downscript=/etc/qemu-ifdown -vnc :0 -daemonize
        root      38025 12.4  5.4 719140 101044 ?       Sl   08:59   0:11 qemu-kvm -name c2 -m 256 -smp 2 -drive file=/vms/cirros/cirros2.img,media=disk,if=virtio,format=qcow2 -net nic,model=virtio,macaddr=52:54:00:00:00:22 -net tap,script=/etc/qemu-ifup,downscript=/etc/qemu-ifdown -vnc :1 -daemonize
        此时可以使用vncviewer连接两个虚拟机实例
        [root@kvm ~]# ss -tnl
        State       Recv-Q Send-Q                   Local Address:Port                                  Peer Address:Port              
        LISTEN      0      1                                    *:5900                                             *:*                  
        LISTEN      0      1                                    *:5901                                             *:*           
        [root@kvm ~]# vncviewer :0 &
        [root@kvm ~]# vncviewer :1 & 
    

    此时2个虚拟机实例都以及启动起来,并且br-int桥上没有ip地址,在两个虚拟机上配置同网段的IP地址后可以实现2个虚拟机通信:


    kvm-cirros.png
    c1:
    $ sudo su - root 
    # ifconfig eth0 10.0.0.1/24 up
    c2:
    $ sudo su - root 
    # ifconfig eth0 10.0.0.2/24 up
    # ping 10.0.0.1
    64 bytes from 10.0.0.1: seq=0 ttl=64 time=12.112 ms
    ...
    

    至此就完成虚拟机间通信,两个虚拟机都桥接到同一个桥上,这个桥本身没有ip地址,所以是隔离的网络模型;


    1. 仅主机网络模式:
      每启动一个虚拟机,tap0,tap1是两个接口,在物理机上没有地址,它们都是虚拟机网卡的后半段不需要地址,这两个是连接虚拟交换机的(桥设备);

      [root@kvm ~]# brctl show
      bridge name bridge id STP enabled interfaces
      br-int 8000.362a10196967 no tap0
      tap1

    此时,如果要想虚拟机与物理机通信,只需向网桥添加地址即可,或者是手动创建添加一对儿网卡,一半在留在网桥上,一半留在物理机上;

    给桥br-int添加地址:
    [root@kvm ~]# ifconfig br-int 10.0.0.254/24
    [root@kvm ~]# ifconfig br-int 
    br-int: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
            inet 10.0.0.254  netmask 255.255.255.0  broadcast 10.0.0.255
            inet6 fe80::3041:11ff:fe83:15ac  prefixlen 64  scopeid 0x20<link>
            ether 36:2a:10:19:69:67  txqueuelen 1000  (Ethernet)
            RX packets 19  bytes 2704 (2.6 KiB)
            RX errors 0  dropped 0  overruns 0  frame 0
            TX packets 8  bytes 648 (648.0 B)
            TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
            此时在物理机上ping虚拟机可以ping通:
    [root@kvm ~]# ping 10.0.0.1
    PING 10.0.0.1 (10.0.0.1) 56(84) bytes of data.
    64 bytes from 10.0.0.1: icmp_seq=1 ttl=64 time=4.45 ms
    64 bytes from 10.0.0.1: icmp_seq=2 ttl=64 time=1.62 ms
    ^C
    --- 10.0.0.1 ping statistics ---
    2 packets transmitted, 2 received, 0% packet loss, time 1003ms
    rtt min/avg/max/mdev = 1.627/3.043/4.459/1.416 ms
    [root@kvm ~]# ping 10.0.0.2
    PING 10.0.0.2 (10.0.0.2) 56(84) bytes of data.
    64 bytes from 10.0.0.2: icmp_seq=1 ttl=64 time=49.5 ms
    64 bytes from 10.0.0.2: icmp_seq=2 ttl=64 time=2.67 ms
    在物理机上打开核心转发功能:
    [root@kvm ~]# sysctl -w net.ipv4.ip_forward=1
    net.ipv4.ip_forward = 1
    在虚拟机上添加默认网关:
    # route add default gw 10.0.0.254
    # ping 192.168.43.33 此时与物理机ip可以通信
    

    此时虚拟机和物理机之间可以正常通信,这就是仅主机模式。


    1. NAT模式:

      # ping 61.135.169.121  #此时ping外网(百度ip)是不通的
      在物理机上是用tcpdump监控网卡发现:,虚拟机可以ping出去到外部的61.135.169.121主机,但是,ping包不能回来;
      [root@kvm ~]# tcpdump -i ens33 -nn icmp
      09:30:57.006063 IP 10.0.0.1 > 61.135.169.121: ICMP echo request, id 32001, seq 0, length 64
      09:30:58.007888 IP 10.0.0.1 > 61.135.169.121: ICMP echo request, id 32001, seq 1, length 64
      09:30:59.010346 IP 10.0.0.1 > 61.135.169.121: ICMP echo request, id 32001, seq 2, length 64
      要从虚拟机ping出去到外部的包能回来,要么让外部的主机添加能到虚拟机的路由,要么在物理机上添加iptables规则:
      [root@kvm ~]# iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -j SNAT --to-source 192.168.43.33
      在虚拟机上ping测试:
      # ping 61.135.169.121
      查看物理网卡监控:
      [root@kvm ~]# tcpdump -i ens33 -nn icmp
      tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
      listening on ens33, link-type EN10MB (Ethernet), capture size 262144 bytes
      09:35:26.191195 IP 192.168.43.33 > 61.135.169.121: ICMP echo request, id 32257, seq 0, length 64
      09:35:26.212348 IP 61.135.169.121 > 192.168.43.33: ICMP echo reply, id 32257, seq 0, length 64
      09:35:27.193508 IP 192.168.43.33 > 61.135.169.121: ICMP echo request, id 32257, seq 1, length 64
      09:35:27.226221 IP 61.135.169.121 > 192.168.43.33: ICMP echo reply, id 32257, seq 1, length 64
      

      09:35:28.195532 IP 192.168.43.33 > 61.135.169.121: ICMP echo request, id 32257, seq 2, length 64

    这就实现了NAT模式的网络模式;但是此时可以访问外网,但是外网是不能访问虚拟机的;想要外网能够访问虚拟机,需要在添加一条DNAT规则:

    [root@kvm ~]# iptables -t nat -A PREROUTING -d 192.168.43.33 -j DNAT --to-destination 10.0.0.1
    

    1. 桥接模式:
      把物理网卡当桥使用,需要手动配置桥接接口;
      把网卡配置文件复制一份,并修改相关参数就可创建桥接口了;
      但是,也有非常简洁的方法配置桥接口,如果安装了virsh或libvirtd并且有virsh命令,因为virsh命令自己就能创建桥接口,并且它能自动创建一个物理桥,把物理网卡关联到桥接口上去;

      演示手动实现配置桥接接口:

      ]# cd /etc/sysconfig/network-scripts/
      
      复制网卡配置文件为桥设备配置文件:
      ]# cp ifcfg-eno16777736 ifcfg-br0
      
      修改网卡配置文件为交换机使用:
      ]# vim ifcfg-eno16777736
      修改:
      BOOTPROTO=none
      删除接口地址;
      BRIDGE="br0"
      
      编辑桥设备配置文件:
      ]# vim  ifcfg-br0
      修改:
      DEVICE=br0
      TYPE=Bridge 必须首字母大写;
      删除NAME,其它地址等保留;
      
      使用virsh命令创建桥设备:
      
      ]# virsh iface-list
       名称               状态     MAC 地址
      ---------------------------------------------------
       eno16777736          活动     00:0c:29:3f:67:86
       lo                   活动     00:00:00:00:00:00
      
      查看命令帮助:
      ]# virsh help iface-bridge
      语法格式:
      iface-bridge <interface> <bridge> [--no-stp] [--delay <number>] [--no-start]
      其中:
      OPTIONS
      [--interface] <string>  现有接口名称
      [--bridge] <string>  新桥接设备名称
      --no-stp         无法为这个桥接启用 STP
      --delay <number>  在新连接的端口中 squelch 流量的秒数
      --no-start       不要立即启动桥接
      
      interface:指明把哪个接口关联到桥上;
      bridge:桥的名称;
      --no-stp:表示不支持生成树协议;
      

      创建物理桥:

      注意:红帽研发的网络功能NetworkManager服务必须关闭,才能使用virsh创建桥;只使用network服务;

      centos6和7都有这两种服务能管理网络功能NetworkManager和network;如果要使用桥接接口,不能使用NetworkManager服务,必须停掉,让network来作为网卡管理功能;然后,还有编辑网卡不受nm控制;

      ]# systemctl stop NetworkManager.service
      ]# systemctl disable NetworkManager.service
      ]# systemctl status network.service
      
      ]# virsh iface-bridge eno16777736 br0
      使用附加设备 br0 生成桥接 eno16777736 失败
      已启动桥接接口 br0
      
      ]# ifconfig
      br0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
              inet 172.18.11.115  netmask 255.255.0.0  broadcast 172.18.255.255
              inet6 fe80::20c:29ff:fe3f:6786  prefixlen 64  scopeid 0x20<link>
              ether 00:0c:29:3f:67:86  txqueuelen 0  (Ethernet)
              RX packets 123  bytes 11913 (11.6 KiB)
              RX errors 0  dropped 0  overruns 0  frame 0
              TX packets 23  bytes 1902 (1.8 KiB)
              TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
      
      eno16777736: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
              ether 00:0c:29:3f:67:86  txqueuelen 1000  (Ethernet)
              RX packets 251384  bytes 87346879 (83.3 MiB)
              RX errors 0  dropped 527  overruns 0  frame 0
              TX packets 17222  bytes 1562170 (1.4 MiB)
              TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
      ...
      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:8e:05:ad  txqueuelen 0  (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
      

      此时,网卡已经变成交换机了;桥设备获得了ip地址;

      ]# virt-manager
      弹出虚拟机管理界面;
      创建新建时,选桥接;
      

    相关文章

      网友评论

          本文标题:虚拟化技术(Virtualization)-KVM

          本文链接:https://www.haomeiwen.com/subject/lrdpcqtx.html