ubuntu下使用virt-install安装虚拟机并配置桥接网络

来源:互联网 发布:mysql查询最近七天 编辑:程序博客网 时间:2024/05/02 20:34

在http://blog.csdn.net/zhaihaifei/article/details/51153402这篇总结中,只是说明了如何用virt-install创建和安装虚拟机,但是是这个虚拟机是在默认的网络default下启动的。这个默认网络与主机所在的局域网不通,因此要自己手动创建网桥并分配IP,以与主机所在局域网互通。

1 创建网桥

1.1 Bridge桥接原理原理

KVM安装后默认的网络链接方式是NAT,此时虚拟机只能够与安装在本机上的其余虚拟机通信,虚拟机的IP地址是一个私有地址。
Bridge方式即虚拟网桥的网络连接方式,是客户机和子网里面的机器能够互相通信。可以使虚拟机成为网络中具有独立IP的主机。
桥接网络(也叫物理设备共享)被用作把一个物理设备复制到一台虚拟机。网桥多用作高级设置,特别是主机多个网络接口的情况。

这里写图片描述

如上图,网桥的基本原理就是创建一个桥接接口br0,在物理网卡和虚拟网络接口之间传递数据。

qemu采用两种方式配置上网:
其一,默认方式为用户模式网络(Usermode Networking),数据包由NAT方式通过主机的接口进行传送。
虚拟机可以使用网络服务,但局域网中其他机器包括宿主机无法连接它。比如,它可以浏览网页,但外部机器不能访问架设在它里面的web服务器。
默认的,虚拟机得到的ip空间为192.168.122.1/24,主机ip为192.168.122.2供虚拟机访问。可以ssh到主机,用scp来拷贝文件。
其二,使用桥接方式(Bridged Networking),外部的机器可以直接联通到虚拟机,就像联通到你的主机一样。
这种模式允许虚拟机就像一台独立的主机一样拥有网络。这种模式需要网卡支持,一般的有线网卡都支持,绝大部分的无线网卡都不支持

1.2 在host机器配置桥接网络

注意:这一步的内容是在Host主机上进行的操作,不要误以为在虚拟机中

1.2.1 在配置文件中修改,服务器启动后自动创建网桥

首先:要停止网络服务
sudo /etc/init.d/networking stop
其次:修改网络配置文件
sudo vi /etc/network/interfaces
如果想手动设置ip等请将以下代码复制到编辑的文件中,注意:IP等设置自己按照需要修改。

auto lo iface lo inet loopback auto em1 iface em1 inet manual #上网方式采用自动#添加网桥br-em1auto br-em1 iface br-em1 inet static     address 192.168.4.240 #将em1的ip地址分配给网桥。    netmask 255.255.255.0    network 192.168.4.0    broadcast 192.168.4.255    gateway 192.168.4.250    # dns-* options are implemented by the resolvconf package, if installed    dns-nameservers 8.8.8.8    dns-search ctler    bridge_ports em1 #为网桥添加接口em1(之前默认的上网网口)    bridge_stp off    bridge_fd 0    bridge_maxwait 0

如果想自动从DHCP获取,请将一下代码复制到编辑的文件中。

auto lo iface lo inet loopback auto eth0 iface eth0 inet manual auto br0 iface br0 inet dhcp     bridge_ports eth0     bridge_stp off     bridge_fd 0

最后:重新启动网络服务便可

sudo /etc/init.d/networking restart

我采用的是static方式,修改后Host主机自动创建的网桥:

root@ctler:/etc/libvirt/qemu# brctl showbridge name bridge id       STP enabled interfacesbr-em1      8000.f48e38c294b0   no      em1virbr0      8000.000000000000   yes     root@ctler:/etc/libvirt/qemu# ip a1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00    inet 127.0.0.1/8 scope host lo       valid_lft forever preferred_lft forever    inet6 ::1/128 scope host        valid_lft forever preferred_lft forever2: em1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq master br-em1 state UP group default qlen 1000    link/ether f4:8e:38:c2:94:b0 brd ff:ff:ff:ff:ff:ff3: em2: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000    link/ether f4:8e:38:c2:94:b2 brd ff:ff:ff:ff:ff:ff4: br-em1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000    link/ether f4:8e:38:c2:94:b0 brd ff:ff:ff:ff:ff:ff    inet 192.168.4.240/24 brd 192.168.4.255 scope global br-em1       valid_lft forever preferred_lft forever    inet6 fe80::f68e:38ff:fec2:94b0/64 scope link        valid_lft forever preferred_lft forever5: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000    link/ether 00:00:00:00:00:00 brd ff:ff:ff:ff:ff:ff    inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0       valid_lft forever preferred_lft forever

br-em1就是创建虚拟机时,要连接的网桥。

1.2.2 手动创建网桥

# brctl addbr br0# ifconfig -a# ifconfig eth0 0 up# ifconfig -a# brctl addif br0 eth0# ifconfig br0 192.168.1.122/24 up增加桥接过程( 1# brctl addbr br02# brctl addif br0 eth0  3#   ip addr add 172.16.12.43/8 dev br0 brd +4#   ifconfig br0 up删除桥接过程( 1# ip addr del 172.16.12.43/8 dev br0 brd +2# ifconfig br0 down  3# brctl delif br0 eth04# brctl delbr br0          

参考kvm networking:
https://help.ubuntu.com/community/KVM/Networking
https://jamielinux.com/docs/libvirt-networking-handbook/bridged-network.html

1.3 在host机器配置Open vSwitch桥接网络

实验用ovs创建一个网桥,但是使用virt-install连接ovs网桥时,无法添加port。

root@compute:~# virt-install -n controller -r 4096 -c /root/ubuntu-14.04.5-server-amd64.iso --disk /var/lib/libvirt/images/controller.img,bus=virtio,size=100 --graphics vnc,listen=0.0.0.0 --noautoconsole -vStarting install...Allocating 'controller.img'                                                                         | 100 GB     00:00     ERROR    Unable to add bridge br-ex port vnet0: Operation not supportedDomain installation does not appear to have been successful.If it was, you can restart your domain by running:  virsh --connect qemu:///system start controllerotherwise, please restart your installation.

创建ovs网桥过程:

root@liberty:~# ovs-vsctl add-br br-exroot@liberty:~# ovs-vsctl showb90fde22-baca-484c-a60f-025168c0c456    Bridge br-ex        Port br-ex            Interface br-ex                type: internal    ovs_version: "2.0.2"root@liberty:~# ovs-vsctl list-ports br-exroot@liberty:~# ip l1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:002: p4p1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000    link/ether d4:be:d9:be:84:b5 brd ff:ff:ff:ff:ff:ff3: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN mode DEFAULT group default qlen 1000    link/ether 12:5a:1d:69:c3:2c brd ff:ff:ff:ff:ff:ff4: ovs-system: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1    link/ether 3a:e8:46:68:cd:43 brd ff:ff:ff:ff:ff:ff5: br-ex: <BROADCAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1    link/ether 46:56:54:92:bc:4d brd ff:ff:ff:ff:ff:ffroot@liberty:~# ip a1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00    inet 127.0.0.1/8 scope host lo       valid_lft forever preferred_lft forever    inet6 ::1/128 scope host        valid_lft forever preferred_lft forever2: p4p1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000    link/ether d4:be:d9:be:84:b5 brd ff:ff:ff:ff:ff:ff    inet 192.168.1.118/24 brd 192.168.1.255 scope global p4p1       valid_lft forever preferred_lft forever    inet6 fe80::d6be:d9ff:febe:84b5/64 scope link        valid_lft forever preferred_lft forever3: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000    link/ether 12:5a:1d:69:c3:2c brd ff:ff:ff:ff:ff:ff    inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0       valid_lft forever preferred_lft forever4: ovs-system: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1    link/ether 3a:e8:46:68:cd:43 brd ff:ff:ff:ff:ff:ff5: br-ex: <BROADCAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN group default qlen 1    link/ether 46:56:54:92:bc:4d brd ff:ff:ff:ff:ff:ff    inet6 fe80::5c46:eff:febf:e680/64 scope link        valid_lft forever preferred_lft foreverroot@liberty:~# ovs-vsctl add-port br-ex p4p1root@liberty:~# ovs-vsctl showb90fde22-baca-484c-a60f-025168c0c456    Bridge br-ex        Port "p4p1"            Interface "p4p1"        Port br-ex            Interface br-ex                type: internal    ovs_version: "2.0.2"root@liberty:~# ip address del 192.168.1.118/24 brd + dev p4p1       root@liberty:~# ip address add 192.168.1.118/24 brd + dev br-ex    root@liberty:~# ip a1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00    inet 127.0.0.1/8 scope host lo       valid_lft forever preferred_lft forever    inet6 ::1/128 scope host        valid_lft forever preferred_lft forever2: p4p1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master ovs-system state UP group default qlen 1000    link/ether d4:be:d9:be:84:b5 brd ff:ff:ff:ff:ff:ff    inet6 fe80::d6be:d9ff:febe:84b5/64 scope link        valid_lft forever preferred_lft forever3: ovs-system: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1    link/ether 6e:36:32:94:6e:1f brd ff:ff:ff:ff:ff:ff4: br-ex: <BROADCAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN group default qlen 1    link/ether d4:be:d9:be:84:b5 brd ff:ff:ff:ff:ff:ff    inet 192.168.1.118/24 brd 192.168.1.255 scope global br-ex       valid_lft forever preferred_lft forever    inet6 fe80::78fa:9aff:fe31:5777/64 scope link        valid_lft forever preferred_lft forever5: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000    link/ether a2:a2:98:c2:ee:eb brd ff:ff:ff:ff:ff:ff    inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0       valid_lft forever preferred_lft foreverroot@liberty:~# cat /etc/network/interfaces# This file describes the network interfaces available on your system# and how to activate them. For more information, see interfaces(5).# The loopback network interfaceauto loiface lo inet loopback# The primary network interface#auto p4p1#iface p4p1 inet dhcp# auto p4p1# iface p4p1 inet static# address 192.168.1.118# netmask 255.255.255.0# gateway 192.168.1.250# dns-nameserver 202.106.0.20# The primary network interfaceauto br-exiface br-ex inet static    address 192.168.1.118    netmask 255.255.255.0    gateway 192.168.1.250    # dns-* options are implemented by the resolvconf package, if installed    dns-nameservers 202.106.0.20auto p4p1iface p4p1 inet manual    up ip address add 0/0 dev $IFACE    up ip link set $IFACE up    down ip link set $IFACE down

参考:http://blog.csdn.net/zhaihaifei/article/details/50834488
http://blog.csdn.net/mountzf/article/details/52035499

2 virt-install创建虚拟机,并连接网桥

推荐使用 virt-install/virsh 系列工具操作 kvm,而不是直接使用 qemu-kvm

2.1 创建

命令:

root@bogon:~# ip a1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00    inet 127.0.0.1/8 scope host lo       valid_lft forever preferred_lft forever    inet6 ::1/128 scope host        valid_lft forever preferred_lft forever2: p4p1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master br-ctl state UP group default qlen 1000    link/ether d4:be:d9:be:84:b5 brd ff:ff:ff:ff:ff:ff3: br-ctl: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000    link/ether d4:be:d9:be:84:b5 brd ff:ff:ff:ff:ff:ff    inet 192.168.1.118/24 brd 192.168.1.255 scope global br-ctl       valid_lft forever preferred_lft forever    inet6 fe80::d6be:d9ff:febe:84b5/64 scope link        valid_lft forever preferred_lft forever4: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000    link/ether 2a:a7:cd:67:f5:5f brd ff:ff:ff:ff:ff:ff    inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0       valid_lft forever preferred_lft forever5: vnet0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master br-ctl state UNKNOWN group default qlen 1000    link/ether fe:54:00:bc:18:f3 brd ff:ff:ff:ff:ff:ff    inet6 fe80::fc54:ff:febc:18f3/64 scope link        valid_lft forever preferred_lft foreverroot@bogon:~# apt-get install qemu-kvmroot@bogon:~# qemu-img create -f qcow2 /var/lib/libvirt/images/controller.img 100GFormatting '/var/lib/libvirt/images/controller.img', fmt=qcow2 size=107374182400 encryption=off cluster_size=65536 lazy_refcounts=off root@bogon:~# virt-install -n controller -r 4096 -c /var/lib/libvirt/images/ubuntu-14.04.5-server-amd64.iso --disk path=/var/lib/libvirt/images/controller.img,bus=virtio,size=100 --network bridge=br-ctl,model=virtio --graphics vnc,listen=0.0.0.0 --noautoconsole -vStarting install...Creating domain...                                                                                                                                       |    0 B     00:00     Domain installation still in progress. You can reconnect to the console to complete the installation process.root@bogon:~# ps -ef | grep llerlibvirt+  2620     1 99 10:10 ?        00:00:14 /usr/bin/qemu-system-x86_64 -name controller -S -machine pc-i440fx-trusty,accel=tcg,usb=off -m 4096 -realtime mlock=off -smp 1,sockets=1,cores=1,threads=1 -uuid ec15513f-bf84-6d52-d7b4-72ba7377d829 -no-user-config -nodefaults -chardev socket,id=charmonitor,path=/var/lib/libvirt/qemu/controller.monitor,server,nowait -mon chardev=charmonitor,id=monitor,mode=control -rtc base=utc -no-reboot -boot strict=on -device piix3-usb-uhci,id=usb,bus=pci.0,addr=0x1.0x2 -drive file=/var/lib/libvirt/images/controller.img,if=none,id=drive-virtio-disk0,format=qcow2 -device virtio-blk-pci,scsi=off,bus=pci.0,addr=0x4,drive=drive-virtio-disk0,id=virtio-disk0,bootindex=2 -drive file=/var/lib/libvirt/images/ubuntu-14.04.5-server-amd64.iso,if=none,id=drive-ide0-1-0,readonly=on,format=raw -device ide-cd,bus=ide.1,unit=0,drive=drive-ide0-1-0,id=ide0-1-0,bootindex=1 -netdev tap,fd=24,id=hostnet0 -device virtio-net-pci,netdev=hostnet0,id=net0,mac=52:54:00:bc:18:f3,bus=pci.0,addr=0x3 -chardev pty,id=charserial0 -device isa-serial,chardev=charserial0,id=serial0 -vnc 0.0.0.0:0 -device cirrus-vga,id=video0,bus=pci.0,addr=0x2 -device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x5root      2625  1423  0 10:11 pts/1    00:00:00 grep --color=auto ller

其中:

vnc 在客户机中设置一个虚拟控制台并且将其导出为一个VNC服务。除非"--vncport" 参数也已提供,VNC服务将运行在5900或其之上第一个未用的端口号。实际的VNC显示可以使用"virsh""vncdisplay"命令(或者使用virt-viewer处理这个细节)。bridge:BRIDGE 连接到主机上名称为"BRIDGE"的桥接设备。如果主机具有静态网络配置和客户机需要与局域网进行全面的入站出站连接时使用此选项。

其它选项,参考:http://blog.csdn.net/starshine/article/details/6998189

查看生成在/etc/libvirt/qemu下的配置文件,使用默认default网络的配置文件:

<interface type='network'>      <mac address='52:54:00:79:fa:a3'/>      <source network='default'/>      <model type='virtio'/>      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>    </interface>

使用网桥的配置文件,

<interface type='bridge'>      <mac address='52:54:00:6b:78:aa'/>      <source bridge='br-em1'/>      <model type='virtio'/>      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>    </interface>

查看

root@ctler:~# virsh list Id    Name                           State---------------------------------------------------- 3     network                        runningroot@ctler:~# brctl showbridge name bridge id       STP enabled interfacesbr-em1      8000.f48e38c294b0   no      em1                            vnet0virbr0      8000.fe540079faa3   yes     vnet1root@ctler:~# ip l1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:002: em1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq master br-em1 state UP mode DEFAULT group default qlen 1000    link/ether f4:8e:38:c2:94:b0 brd ff:ff:ff:ff:ff:ff4: br-em1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT group default qlen 1000    link/ether f4:8e:38:c2:94:b0 brd ff:ff:ff:ff:ff:ff5: virbr0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT group default qlen 1000    link/ether fe:54:00:79:fa:a3 brd ff:ff:ff:ff:ff:ff9: vnet0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master br-em1 state UNKNOWN mode DEFAULT group default qlen 1000    link/ether fe:54:00:6b:78:aa brd ff:ff:ff:ff:ff:ff

2.2 创建中的问题

2.2.1 Host does not support virtualization type ‘hvm’

root@compute:~# virt-install -n controller -r 4096 -c /root/ubuntu-14.04.5-server-amd64.iso --disk /var/lib/libvirt/images/controller.img,bus=virtio,size=100 --network bridge=br-ex,model=virtio --graphics vnc,listen=0.0.0.0 --noautoconsole -vERROR    Host does not support virtualization type 'hvm' 

需要安装
root@compute:~# apt-get install qemu-system-x86

root@compute:~# apt-get install qemu-kvm

2.2.2 Permission denied

把镜像放到目录/root下,安装时出问题:

root@compute:~# virt-install -n controller -r 4096 -c /root/ubuntu-14.04.5-server-amd64.iso --disk /var/lib/libvirt/images/controller.img,bus=virtio,size=100 --network bridge=br-ctl,model=virtio --graphics vnc,listen=0.0.0.0 --noautoconsole Starting install...ERROR    internal error: process exited while connecting to monitor: qemu-system-x86_64: -drive file=/root/ubuntu-14.04.5-server-amd64.iso,if=none,id=drive-ide0-1-0,readonly=on,format=raw: could not open disk image /root/ubuntu-14.04.5-server-amd64.iso: Could not open '/root/ubuntu-14.04.5-server-amd64.iso': Permission deniedDomain installation does not appear to have been successful.If it was, you can restart your domain by running:  virsh --connect qemu:///system start controllerotherwise, please restart your installation.

查看并设置/root/ubuntu-14.04.5-server-amd64.iso权限无法解决问题。
解决方法一是ubuntu-14.04.5-server-amd64.iso文件不能放在/root下:

root@compute:~# cp ubuntu-14.04.5-server-amd64.iso /var/lib/libvirt/images/

解决方法二是修改 qemu.conf 配置,把下面几个地方的注释去掉,然后把 dynamic_ownership 的值改成0,禁止 libvirtd 动态修改文件的归属:

# vi /etc/libvirt/qemu.conf...user = "root"group = "root"dynamic_ownership = 0...

重启 libvirtd 服务再用上面的 virt-install 命令安装就应该可以了。

root@compute:~# ps -ef | grep libvirtd root      1185     1  0 Jul13 ?        00:00:01 /usr/sbin/libvirtd -d

2.3 配置虚拟机内操作系统的网络

此时,我们依然需要通过RealVNC或TigerVNC进入虚拟机已安装的操作系统,进入后,修改/etc/network/interfaces如:

auto eth0iface eth0 inet static    address 192.168.4.243    netmask 255.255.255.0    network 192.168.4.0    broadcast 192.168.4.255    gateway 192.168.4.250    # dns-* options are implemented by the resolvconf package, if installed    dns-nameservers 202.106.0.20    dns-search network

ping测试与主机192.168.4.240通。

2.4 修改网桥

root@network:~# virsh start controllererror: Failed to start domain controllererror: Cannot get interface MTU on 'br-em1': No such deviceroot@network:~# root@network:~# virsh edit controllerDomain controller XML configuration edited.

直接修改/etc/libvirt/qemu/controller.xml文件不行。

3 OpenStack环境

compute结点是物理机,controller节点是compute上的虚拟机,安装好controller节点后,要在compute节点上配置网桥

3.1 手工配置

ovs-vsctl add-br br-exip addr add 192.168.50.129/24 dev br-exovs-vsctl add-port br-ex eth0ip addr del 192.168.50.129/24 dev eth0ip link set br-ex upip route add default via 192.168.50.1 dev br-exip link add veth_ex type veth peer name veth_ctlip link set dev veth_ex upip link set dev veth_ctl upovs-vsctl add-port br-ex veth_exbrctl addbr br-ctlbrctl addif br-ctl veth_ctl

3.2 开机自动配置

可远程操作。
配置interfaces

root@ubuntu:~# cat /etc/network/interfaces# This file describes the network interfaces available on your system# and how to activate them. For more information, see interfaces(5).# The loopback network interfaceauto loiface lo inet loopback# The primary network interfaceauto p3p1iface p3p1 inet manual    up ip address add 0/0 dev $IFACE    up ip link set $IFACE up    down ip link set $IFACE downauto br-exiface br-ex inet static    address 192.168.50.134    netmask 255.255.255.0    gateway 192.168.50.1    # dns-* options are implemented by the resolvconf package, if installed    dns-nameservers 202.106.0.20    pre-up ip link add veth_ctl type veth peer name veth_ex    pre-up ip link set dev veth_ex up    pre-up ip link set dev veth_ctl up    up ovs-vsctl list-ports $IFACE | grep 'p3p1' || ovs-vsctl add-port $IFACE p3p1    up ovs-vsctl list-ports $IFACE | grep 'veth_ex' && ovs-vsctl del-port $IFACE veth_ex || echo    up ovs-vsctl add-port $IFACE veth_exauto br-ctliface br-ctl inet manual    bridge_ports veth_ctl    bridge_stp off    bridge_fd 0    bridge_maxwait 0

执行:
ovs-vsctl add-br br-ex
然后重启服务器。

ifup brings the named interfaces up in the order listed.
interfaces参考:http://blog.csdn.net/mountzf/article/details/52035499
http://manpages.ubuntu.com/manpages/precise/man5/interfaces.5.html
网络设置: https://www.debian.org/doc/manuals/debian-reference/ch05.zh-cn.html
https://jamielinux.com/docs/libvirt-networking-handbook/bridged-network.html

3.3 OpenStack官方镜像和密码

官方的镜像trusty-server-cloudimg-amd64-disk1.img,基本都是只能使用秘钥登录。该镜像的用户名是:ubuntu
Ubuntu14.04的镜像,默认不允许root的身份登录,包括密码和秘钥。甚至把注入root的公钥都修改了。
要实现用root用户登录,只需要把ubuntu用户的公钥,复制到root的目录下

root@uuu:~# ls -a .ssh/.  ..  authorized_keysroot@uuu:~# cat .ssh/authorized_keys no-port-forwarding,no-agent-forwarding,no-X11-forwarding,command="echo 'Please login as the user \"ubuntu\" rather than the user \"root\".';echo;sleep 10" ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCNUxhA7eQjLpreouJJkvTa+6qh9mMi0wOEGohMOxxAuZ+WQmfN+KEN5HrKv077niN5hYGpF3sVYm+1UcQOJsFbv5954y4m8Yr1s8wnFewbD9ArcThk6XM2QEH5ljlbu7AEHcCjFXcrvuw3ha0oQ+mJDonCY4fqT8dLU+Dd5yQZjAk30IhIsGvE1uXrUPTJLEEIneTDHegQBdN1psL03Z92Tv1VazOOzN+isXeGM/3YzlrwUoabTeCpdZZEpc/Zz724Gc9/DmXCnG9WKUeMDKEVYl83jwCyBDcFlOMfp3pzRRNySBqeMm2fnm388DrtZtjh+Rvj05+Zd9nM3XiT7+Ud Generated-by-Novaroot@uuu:~# cat /home/ubuntu/.ssh/authorized_keys ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCNUxhA7eQjLpreouJJkvTa+6qh9mMi0wOEGohMOxxAuZ+WQmfN+KEN5HrKv077niN5hYGpF3sVYm+1UcQOJsFbv5954y4m8Yr1s8wnFewbD9ArcThk6XM2QEH5ljlbu7AEHcCjFXcrvuw3ha0oQ+mJDonCY4fqT8dLU+Dd5yQZjAk30IhIsGvE1uXrUPTJLEEIneTDHegQBdN1psL03Z92Tv1VazOOzN+isXeGM/3YzlrwUoabTeCpdZZEpc/Zz724Gc9/DmXCnG9WKUeMDKEVYl83jwCyBDcFlOMfp3pzRRNySBqeMm2fnm388DrtZtjh+Rvj05+Zd9nM3XiT7+Ud Generated-by-Novaroot@uuu:~# mv .ssh/authorized_keys .ssh/authorized_keys.bakroot@uuu:~# cp /home/ubuntu/.ssh/authorized_keys .ssh/authorized_keysroot@uuu:~# cat .ssh/authorized_keys ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCNUxhA7eQjLpreouJJkvTa+6qh9mMi0wOEGohMOxxAuZ+WQmfN+KEN5HrKv077niN5hYGpF3sVYm+1UcQOJsFbv5954y4m8Yr1s8wnFewbD9ArcThk6XM2QEH5ljlbu7AEHcCjFXcrvuw3ha0oQ+mJDonCY4fqT8dLU+Dd5yQZjAk30IhIsGvE1uXrUPTJLEEIneTDHegQBdN1psL03Z92Tv1VazOOzN+isXeGM/3YzlrwUoabTeCpdZZEpc/Zz724Gc9/DmXCnG9WKUeMDKEVYl83jwCyBDcFlOMfp3pzRRNySBqeMm2fnm388DrtZtjh+Rvj05+Zd9nM3XiT7+Ud Generated-by-Nova

参考:http://www.chenshake.com/openstack-official-mirrors-and-password/

3 virsh管理虚拟机

3.1 Libvirt有两种控制方式

Libvirt有两种控制方式,命令行和图形界面
图形界面:
通过执行名virt-manager,启动libvirt的图形界面,在图形界面下可以一步一步的创建虚拟机,管理虚拟机,还可以直接控制虚拟机的桌面。

命令行:
virsh list #显示本地活动虚拟机
virsh list –all #显示本地所有的虚拟机(活动的+不活动的)
virsh define ubuntu.xml #通过配置文件定义一个虚拟机(这个虚拟机还不是活动的)
virsh start ubuntu #启动名字为ubuntu的非活动虚拟机
virsh create ubuntu.xml #创建虚拟机(创建后,虚拟机立即执行,成为活动主机)
virsh suspend ubuntu #暂停虚拟机
virsh resume ubuntu #启动暂停的虚拟机
virsh shutdown ubuntu #正常关闭虚拟机
virsh destroy ubuntu #强制关闭虚拟机
virsh dominfo ubuntu #显示虚拟机的基本信息
virsh domname 2 #显示id号为2的虚拟机名
virsh domid ubuntu #显示虚拟机id号
virsh domuuid ubuntu #显示虚拟机的uuid
virsh domstate ubuntu #显示虚拟机的当前状态
virsh dumpxml ubuntu #显示虚拟机的当前配置文件(可能和定义虚拟机时的配置不同,因为当虚拟机启动时,需要给虚拟机分配id号、uuid、vnc端口号等等)
virsh setmem ubuntu 512000 #给不活动虚拟机设置内存大小
virsh setvcpus ubuntu 4 #给不活动虚拟机设置cpu个数
virsh edit ubuntu #编辑配置文件(一般是在刚定义完虚拟机之后)

3.2 virsh对虚拟机管理

1 virt-install生成的配置文件

root@compute:~# cat /etc/libvirt/qemu/controller.xml <!--WARNING: THIS IS AN AUTO-GENERATED FILE. CHANGES TO IT ARE LIKELY TO BEOVERWRITTEN AND LOST. Changes to this xml configuration should be made using:  virsh edit controlleror other application using the libvirt API.--><domain type='kvm'>  <name>controller</name>  <uuid>00aa8ffd-d267-efdd-6874-f6d785c497d6</uuid>  <memory unit='KiB'>4194304</memory>  <currentMemory unit='KiB'>4194304</currentMemory>  <vcpu placement='static'>1</vcpu>  <os>    <type arch='x86_64' machine='pc-i440fx-trusty'>hvm</type>    <boot dev='hd'/>  </os>  <features>    <acpi/>    <apic/>    <pae/>  </features>  <clock offset='utc'/>  <on_poweroff>destroy</on_poweroff>  <on_reboot>restart</on_reboot>  <on_crash>restart</on_crash>  <devices>    <emulator>/usr/bin/kvm-spice</emulator>    <disk type='file' device='disk'>      <driver name='qemu' type='raw'/>      <source file='/var/lib/libvirt/images/controller.img'/>      <target dev='vda' bus='virtio'/>      <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>    </disk>    <disk type='block' device='cdrom'>      <driver name='qemu' type='raw'/>      <target dev='hdc' bus='ide'/>      <readonly/>      <address type='drive' controller='0' bus='1' target='0' unit='0'/>    </disk>    <controller type='usb' index='0'>      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/>    </controller>    <controller type='pci' index='0' model='pci-root'/>    <controller type='ide' index='0'>      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/>    </controller>    <interface type='bridge'>      <mac address='52:54:00:b5:f1:ab'/>      <source bridge='br-ctl'/>      <model type='virtio'/>      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>    </interface>    <serial type='pty'>      <target port='0'/>    </serial>    <console type='pty'>      <target type='serial' port='0'/>    </console>    <input type='mouse' bus='ps2'/>    <input type='keyboard' bus='ps2'/>    <graphics type='vnc' port='-1' autoport='yes' listen='0.0.0.0'>      <listen type='address' address='0.0.0.0'/>    </graphics>    <video>      <model type='cirrus' vram='9216' heads='1'/>      <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>    </video>    <memballoon model='virtio'>      <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/>    </memballoon>  </devices></domain>

注:
生成一个4G大小的空文件:dd if=/dev/zero of=./disk bs=1024 count=expr 4 \* 1024 \* 1024
修改虚拟机的启动设备:从硬盘启动;从CD启动

网络参数:
如ubuntu.xml配置文件,kvm虚拟机和xen虚拟机都只需要按照下面的模板进行配置,MAC地址是必须的,bridage的名字可能在不同的主机上是不一样,可能是virbr0,也可能是br0,但类型一定要是桥接模式就可以了

<interface type='bridge'><mac address='00:16:36:1e:1d:04'/><source bridge='virbr0'/></interface>

KVM虚拟机迁移:
迁移命令:virsh migrate –live qemu+ssh:///system tcp://:49152
迁移完之后,本地机器可能仍是定义状态,要执行virsh undefine 清除。

2、开关机
virsh start centos6.3 #开机
virsh create /etc/libvirt/qemu/centos6.3.xml #直接通过主机配置文档启动主机
virsh shutdown centos6.3 #关机
virsh destroy centos6.3 #强制关闭电源
virsh list –all #查看虚拟机状态

使用virsh shutdown +域名,这个时候我在virsh list发现 虚拟机还是在运行的,并没有关闭。
我们需要安装一个acpid的服务并启动它,什么是ACPI?
ACPI是Advanced Configuration and PowerInterface缩写,高级配置和电源管理接口。
acpid中的d则代表daemon。Acpid是一个用户空间的服务进程,它充当linux内核与应用程序之间通信的接口,负责将kernel中的电源管理事件转发给应用程序。
Acpid是一个用户空间的服务进程,它充当linux内核与应用程序之间通信的接口,负责将kernel中的电源管理事件转发给应用程序。
其实,说明了就是通过这个服务来执行电源关闭的动作,这也是为什么我们执行virsh shutdown +域名无法关机的原因。

root@compute:~# apt-cache search acpidacpica-tools - ACPICA tools for the development and debug of ACPI tablesacpid - Advanced Configuration and Power Interface event daemonacpidump - transitional dummy package

3、添加删除虚拟机
virsh define /etc/libvirt/qemu/node5.xml #根据主机配置文档添加虚拟机
virsh list –all #node5已经添加
virsh undefine node5 #移除虚拟机
ls /etc/libvirt/qemu
virsh list –all #node5已经被移除

4、使用已存在的虚拟机配置文档安裝新的虚拟机
qemu-img create -f qcow2 /virhost/kvm_node/node6.img 20G#为新建虚拟机生产磁盘镜像文件
virsh list
virsh dumpxml node4 >/etc/libvirt/qemu/node6.xml#导出虚拟机node6的硬件配置信息为/etc/libvirt/qemu/node6.xml
vim /etc/libvirt/qemu/node6.xml
#修改node6的id号
node6 #虚拟机node6的name
4b7e91eb-6521-c2c6-cc64-c1ba72707fc7 #uuid必须修改,否则会和node4的冲突
#指定新虚拟机的硬盘文件
virsh define /etc/libvirt/qemu/node6.xml #使用虚拟描述文档建立虚拟机,
可用virsh edit node6修改node6的配置文件
virsh start node6#启动虚拟机

5 为虚拟机开启vnc
virsh edit node4 #编辑node4的配置文件;不建议直接通过vim node4.xml修改。

<graphics type='vnc' port='-1' listen='127.0.0.1' keymap='en-us'/>

port=’-1’ :port自动分配,监听回环网络(virt-manager管理需要listen=’127.0.0.1’),无密码
改为

<graphics type='vnc' port='5904' listen='0.0.0.0' keymap='en-us' passwd='xiaobai'/>

固定vnc管理端口5904,不自动分配,vnc密码xiaobai,监听所有网络

远程vnc访问地址:192.168.32.40:5904

6 实例:
1、登入服务器:ssh
2、创建磁盘: qemu-img create -f qcow2 rhel6.5x64.img 15G
3、生成xml: virsh dumpxml rhel6.5x64 > rhelxml
4、编辑xml: vimrhelxml
a\修改name:rhel6.5x64
b\修改type: type=qcow2
c\修改mac地址: 改成不一样的就可以:比如: a1->a2;
d\修改两个source地址: iso img
e\去除uid那一行
5、定义xml:virsh define rhelxml
6、开启rhel6.5x64:virsh start rhel6.5x64

7 添加已经创建好的虚拟机
1、 一台服务器上存放有做好的虚拟机文件,如ubuntu1404,要把此虚拟机加入virt
2、 复制一个xml配置文件,修改相关参数
3、定义xml:virsh define rhelxml
4、开启:virsh start ubuntu1404

8 删除 kvm 虚拟机
1,删除虚拟机 virsh destroy +域名
2,解除标记 virsh undefine +域名
3,删除虚拟机文件 ,如/var/lib/livirt/images目录下

9 让虚机随宿主机开机自动启动
virsh autostart controller
解除自动启动virsh autostart controller –disable

root@node129:~# virsh autostart controllerDomain controller marked as autostartedroot@node129:~# ls /etc/libvirt/qemu/autostart/controller.xmlroot@node129:~# ll /etc/libvirt/qemu/autostart/total 8drwxr-xr-x 2 root root 4096 Jul 18 16:14 ./drwxr-xr-x 4 root root 4096 Jul 18 16:14 ../lrwxrwxrwx 1 root root   32 Jul 18 16:14 controller.xml -> /etc/libvirt/qemu/controller.xmlroot@node129:~# virsh autostart controller --disableDomain controller unmarked as autostarted

要使KVM虚拟机随KVM服务器的启动而启动,我们所需要做的工作很少。只需要把KVM虚拟机的XML配置文件做一个软连接到/etc/libvirt/qemu/autostart/目录下即可。

4 卷操作

在机器上装了一个Centos6.2用来测试KVM,对比Windows下的VMwareworstation,KVM功能强大,定制性高,只要入了门,绝对是功能强大。用来作云计算不错。不过就是操作性差了点。没有vmwareworkstation方便,毕竟,workstation是个人用的,可能不适合企业吧,没接触过vsphere。
kvm的安装比较简单,如果安装Centos的时候没有安装,那么,就需要使用groupinstall了
KVM的主要软件组有如下几个
1。 Virtualization 提供虚拟机的环境,主要包含qumu-kvm
2。 Virtualization Client管理和安装虚拟机实例的客户端,主要有python-virtinst,virt-manager,virt-viewer
3。 Virtualization Platform提供访问和控制虚拟客户端的接口,主要有libvirt,libvirt-client
4。 Virtualization Tools 管理离线虚拟机镜像的工具,主要有libguestfs
根据需求选择软件包,一般都安装1,2,3
yum groupinstall “Virtualization” “Virtualization Client”“Virtualization Platform”
安装完组件后,就需要创建虚拟机了
一般在创建虚拟机前,如果需要桥接虚拟机,就需要创建桥接网口,具体看自己的需求
创建一个虚拟机,可以通过virt-manager来完成,图形化界面,但是这个功能不全,不能随心所欲,例如,需要将虚拟机创建在不同的位置上,毕竟,默认的存储是在/var/lib/libvirt/images下,无法进行存储的管理
所以,在创建虚拟机之前,需要先创建一个存储池
存储池(Storagepools)是放置虚拟机的存储位置,可以是本地的,也可以是网络存储,具体的虚拟机实例放置在卷(Volume)上。
操作存储卷的命令行是virsh
主要有以下操作
查看卷的信息
[root@centos6 ~]# virsh vol-info –pool kvm_imagesguest1-rhel6.1
名称: guest1-rhel6.1
类型: 文件
容量: 16.00 GB
分配: 1.97 GB
或者直接使用存储卷的绝对路径
virsh vol-info /kvm/images/guest1-rhel6.1

在创建卷之前,先要创建存储池,存储池可以建立在好几种方式的存储上,现在主要建立一个基于目录的存储池。
首先创建了一个LVM,并将这个LVM挂载到一个目录下,例如/kvm
然后开始创建存储池
1。 建立存储池的目录
mkdir /kvm/images
2。 为了安全性,更改目录的所有者,并设置权限
chown root:root /kvm/images
chmod 700 /kvm/images
验证一下
ls -a /kvm/images
3。 配置SELinux文件上下文
semanage fcontext -a -t virt_image_t /kvm/images
这个主要是打开SELinux设定,不然虚拟机无法访问存储文件
如果没有semanage,那么安装policycoreutils-python
yum install policycoreutils-python
4。创建基于文件夹的存储池
1) 定义一个存储池
virsh pool-define-as kvm_images dir - - - - “/kvm/images”
2) 查看创建的存储池信息
virsh pool-list –all
3) 建立基于文件夹的存储池
virsh pool-build kvm_images
4) 使存储池生效
virsh pool-start kvm_images
5) 这时候,存储池还不是自动运行,使用virshpool-autostart
virsh pool-autostart kvm_images
6) 验证存储池
[root@centos6 ~]# virsh pool-info kvm_images
名称: kvm_images
UUID: 89a6434f-2106-4a98-d34c-d6b32bef6a0c
状态: running
Persistent: yes
自动启动: yes
容量: 170.84 GB
分配: 187.38 MB
可用: 170.66 GB

创建了存储池后,就可以创建一个卷,这个卷是用来做虚拟机的硬盘
1。创建卷
virsh vol-create-as kvm_images guest2-rhel6.1.img 8G –formatqcow2
2。查看存储池里面的卷信息

virsh vol-list kvm_images名称              路径                                 -----------------------------------------guest1-rhel6.1      /kvm/images/guest1-rhel6.1             guest2-rhel6.1.img  /kvm/images/guest2-rhel6.1.img

3。查看某个卷的信息
virsh vol-info guest2-rhel6.1.img kvm_images
名称: guest2-rhel6.1.img
类型: 文件
容量: 8.00 GB
分配: 136.00 K
更详细的

virsh vol-dumpxml guest2-rhel6.1.img kvm_images<volume> <name>guest2-rhel6.1.img</name> <key>/kvm/images/guest2-rhel6.1.img</key> <source> </source> <capacity>8589934592</capacity> <allocation>139264</allocation> <target>   <path>/kvm/images/guest2-rhel6.1.img</path>   <format type='qcow2'/>   <permissions>     <mode>0600</mode>     <owner>0</owner>     <group>0</group>     <label>system_u:object_r:file_t:s0</label>   </permissions> </target></volume>

可以从xml配置文件看出,这个卷是qcow2类型的
4。现在开始创建虚拟机,使用virt-install来创建
创建的虚拟机名字为guest2-rhel6.1 这个名字很重要,就是在KVM中的域名,可以做各种操作
cpu使用1个,内存化为512M,硬盘文件使用新创建的硬盘文件,格式为qcow2,大小为8G,使用ISO镜像安装,安装的操作系统类型为linux,类别为rhel6。网络挂载桥接网卡br0
virt-install –connect qemu:///system -n guest2-rhel6.1 -r 512-f /kvm/images/guest2-rhel6.1.img -s 8 –vnc –os-type=linux–os-variant=rhel6 –vcpus=1 –networkbridge=br0 -c /mnt/rhel-server-6.1-x86_64-dvd.iso
回车后,控制台显示
开始安装……
创建域…… | 0B 00:00
会弹出一个窗口,如果定义了自动安装,那么,可以关闭安装窗口
5。启动一个窗口监测安装进程
virt-viewer guest2-rhel6.1来查看安装进程
有时候会碰到虚拟机无法正常安装,这时候如果没有启动acpid进程的话,那么使用virsh shutdownguest2-rhel6.1无法关闭虚拟机,这时候就需要使用命令 destroy guest2-rhel6.1来强制关闭了。
6。安装完毕后,要记的在虚拟机上安装acpid进程,以方便远程关闭机器
yum install acpid -y
chkconfig acpid on 345
service acpid start
7。 等做完虚拟机的配置后,就需要对虚拟机做一个快照了。
快照的制作有两种方法,一种是直接在virsh 里面使用snapshot来制作。另外一种是使用qemu-img来创建快照
virsh snapshot-create-as guest2-rhel6.1
快照创建的很快,其实,就是生成了一个XML的配置文件,记录下当前的信息。
查看快照

virsh snapshot-list guest2-rhel6.1名称               CreationTime            状态------------------------------------------------------------ 1330937069          2012-03-05 16:44:29 +0800 shutoff

查看快照的配置文件
virsh snapshot-current guest2-rhel6.1
那么,快照文件存在什么地方呢,在/var/lib/libvirt/qemu/snapshot目录下,有以虚拟机的域名为名称的文件夹,就在里面哪
使用qemu-img创建快照也很方便,这个镜像是直接对硬盘文件进行操作,硬盘文件的格式必须为qcow2格式的,记的貌似物理硬盘的格式为LVM才能创建快照,还是格式为LVM,qemu-img的格式不必为qcow2格式就能创建快照,还没整明白
qemu-img snapshot -c 2012-3-5 /kvm/images/guest2-rhel6.1.img
创建完毕后,查看一下
qemu-img snapshot -l /kvm/images/guest2-rhel6.1.img
Snapshot list:
ID TAG VMSIZE DATE VM CLOCK
1 1330937069 0 2012-03-0516:44:29 00:00:00.000
2 2012-3-5

参考:
1 http://blog.csdn.net/u010817321/article/details/52117344
2 http://www.server110.com/kvm/201403/6903.html
3 http://blog.csdn.net/zhaihaifei/article/details/51153402

0 0