KVM快速安装虚拟机

KVM快速安装虚拟机

kvm快速配置大量虚拟机思路:封装一个虚拟机,然后做快照。

虚拟机封装

封装虚拟机作为模板,提供给后面大量快照克隆虚拟机使用。

[root@localhost images]# pwd //镜像文件存放路径/var/lib/libvirt/images

[root@localhost images]# ll mather.img //已经制作好的mather模板

-rw------- 1 qemu qemu 8589934592 Apr 8 09:25 mather.img

//这里已经做好了一个模板镜像,名字"mather.img",制作过程就是安装一个本地虚拟机

模板创建完成之后,就不要再开启;模板只是做克隆,

模板创建细节问题:

rm -fr /etc/udev/rules.d/70-* ##会自动记录网卡信息,注意:70-是记录物理网卡信息的文件,每个虚拟机不同,所以在这里要删除掉;删除掉,每次启动系统会自动创建响应70-文件。

/etc/sysconfig/network-scripts/ifcfg-erh0 的配置;这个是逻辑IP,为了避免IP冲突,每个虚拟机不同,所以每次克隆新的虚拟机,都需要设置新的不同的IP地址。

rm -fr /etc/ssh/ssh_host_* ##删除公钥文件

/etc/yum.repo/*.repo ##yum源指引文件,最好在模板中就配置好一个稳定的全面的yum源,方便操作

/etc/sysconfig/network ##永久修改hostname,克隆虚拟机,每个虚拟机的hostsname也应该不同,易于识别,所以每次创建新的虚拟机,都需要更改hostname

chkconfig iptables off ##关闭防火墙,大部分实验使用不需要防火墙参与(专门学习防火墙时再开启),所以默认关闭比较方便

/etc/sysconfig/selinux ##修改selinux策略,直接设置SELINUX=disabled

建议下载几个比较方便的软件,如:vim ssh httpd等

克隆过程

创建完毕模板虚拟机后,就可以再真机上进行克隆操作。

[root@localhost images]# pwd ##进入到该目录下进行操作,该目录存放虚拟机镜像信息/var/lib/libvirt/images

[root@localhost images]# qemu-img create -f qcow2 -b mather.img test

Formatting 'test', fmt=qcow2 size=8589934592 backing_file='mather.img' encryption=off cluster_size=65536 lazy_refcounts=off

//使用内核自带kvm工具,create是子命令,标示要创建一个子虚拟机;-f qcow2,标示创建格式;-b mather.img,指定模板镜像;test是子虚拟机的名字。创建成功后该目录会生成一个test文件。

[root@localhost images]# ll mather.img test

-rw------- 1 qemu qemu 8589934592 Apr 8 09:25 mather.img-rw-r--r-- 1 root root 197120 Apr 24 14:13 test

[root@localhost images]# du -sh mather.img test

1.7G mather.img

196K test

[root@localhost images]# file mather.img test

mather.img: x86 boot sector; GRand Unified Bootloader, stage1 version 0x3, boot drive 0x80, 1st sector stage2 0x849fc, GRUB version 0.94; partition 1: ID=0x83, active, starthead 32, startsector 2048, 1024000 sectors; partition 2: ID=0x8e, starthead 221, startsector 1026048, 15751168 sectors, code offset 0x48

test: QEMU QCOW Image (v3), has backing file (path mather.img), 8589934592 bytes

完成之后,就可以使用virt-manager工具快速开启一个新的虚拟机。

具体过程:







ping不通问题

当我们创建好虚拟机之后,设置好IP地址,hostname等,需要通过ssh远程连接时,突然发现真机和虚拟机ping不通的问题。如何解决呢?

思路:当真机和虚拟机无法ping通,应该按顺序考虑以下三为问题:

首先考虑防火墙是否过滤。然后考虑IP是否在同一网段。最后考虑桥接问题。

防火墙问题

ping命令依靠网络层的ICMP协议(网络控制信息协议),没有端口,一般情况,防火墙都默认放行ping

[root@test ~]# iptables -L -n

Chain INPUT (policy ACCEPT)target prot opt source destination

ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED

ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0 //在filter表的INPUT链上,默认放行icmp协议

ACCEPT all -- 0.0.0.0/0 0.0.0.0/0

ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22

REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited

如果是因为防火墙问题,可以直接简单粗暴关掉防火墙(仅仅是做实验情况)。

[root@test ~]# /etc/init.d/iptables stop

iptables: Setting chains to policy ACCEPT: filter [ OK ]

iptables: Flushing firewall rules: [ OK ]

iptables: Unloading modules: [ OK ]

网段问题

网段问题就是设置时,可能设置真机和虚拟机不在同一网段。可以使用ip addr show查看网络逻辑地址(ip地址):

真机:

[root@localhost shell]# ip addr show br0
4: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP 
    link/ether 00:21:cc:4a:b0:47 brd ff:ff:ff:ff:ff:ff
    inet 172.25.254.111/24 brd 172.25.254.255 scope global br0
       valid_lft forever preferred_lft forever
    inet 172.25.11.11/24 brd 172.25.11.255 scope global br0
       valid_lft forever preferred_lft forever
    inet6 fe80::221:ccff:fe4a:b047/64 scope link 
       valid_lft forever preferred_lft forever

虚拟机:

[root@test ~]# ip addr show eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 52:54:00:04:4f:c2 brd ff:ff:ff:ff:ff:ff
    inet 172.25.254.15/24 brd 172.25.254.255 scope global eth0
    inet6 fe80::5054:ff:fe04:4fc2/64 scope link 
       valid_lft forever preferred_lft forever

这里,真机和虚拟机都在172.25.254网段(注意看netmask值)。

如果不在同一网段,使用ip或者ifconfig手动添加临时IP,或者在配置文件中修改IP都可以。

桥接问题

如果防火墙和网段都没有问题,那么很有可能时真机上桥接没有设置成功。

可以在真机上使用brctl show查看桥接信息:

设置正确时的显示

[root@localhost shell]# brctl show
bridge name     bridge id           STP enabled     interfaces
br0             8000.0021cc4ab047   no              enp0s25
                                                    vnet0   
  virbr0        8000.000000000000   yes     
//开启虚拟机,就会多一个vnet信息;从vnet0开始,每多开启一个虚拟机,就会多一项vnet信息,vnet0,vnet1,vnet2依次类推

设置错误时的显示

[root@localhost shell]# brctl show
bridge name     bridge id           STP enabled     interfaces
br0             8000.0021cc4ab047   no              enp0s25
virbr0          8000.fe5400044fc2   yes             vnet0

此时我们发现,vnet0项信息在virbr0上,说明br0和vnet(虚拟机)没有桥接成功。

执行ping命令也就无法连通:

[root@localhost shell]# ping 172.25.254.15

PING 172.25.254.15 (172.25.254.15) 56(84) bytes of data.

From 172.25.254.111 icmp_seq=10 Destination Host Unreachable

From 172.25.254.111 icmp_seq=11 Destination Host Unreachable

From 172.25.254.111 icmp_seq=12 Destination Host Unreachable

From 172.25.254.111 icmp_seq=13 Destination Host Unreachable

^C

--- 172.25.254.15 ping statistics ---13 packets transmitted, 0 received, +4 errors, 100% packet loss, time 11999

mspipe 4

临时解决方法

vnet桥接到br0上,使用brctl命令:

[root@localhost shell]# brctl delif virbr0 vnet0 //删除virbr0对vnet0的桥接[root@localhost shell]# brctl addif br0 vnet0 //增加br0对vnet0的桥接

此时,就可以ping通:

[root@localhost shell]# ping 172.25.254.15

PING 172.25.254.15 (172.25.254.15) 56(84) bytes of data.64 bytes

from 172.25.254.15: icmp_seq=1 ttl=64 time=0.358 ms64 bytes

from 172.25.254.15: icmp_seq=2 ttl=64 time=0.246 ms

^C

--- 172.25.254.15 ping statistics ---2 packets transmitted, 2 received, 0% packet loss, time 999msrtt min/avg/max/mdev = 0.246/0.302/0.358/0.056 ms

永久修改方法

我们使用virt-manager打开图形界面,选择test虚拟机双击打开。点击管理菜单栏中的"小灯泡",找到"Virtual Network Interface"

Source device的选项改称Bridge 'br0',重启虚拟机即可。

不同机子,可能位置不同,细心找找就能找到这些信息


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值