CentOS7 环境下创建kvm虚拟机,搭建桥接环境,并实现用命令行控制虚拟机

宿主机网络桥接配置

我们要求创建的虚拟机可以和宿主主机共享网段,拓扑图如下:

图1

而桥接环境的宿主机的网络构架如下:

图2

这是宿主机有两块网卡的情况下,如果没有两块网卡(如上图没有eth1)也行,只要把物理网卡(eth0)作为对外接口,而桥接设备(br0)作为宿主机网卡也可以正常通信。

宿主机桥接工具

yum -y install bridge-utils
# 说明:很多Centos的系统都已经自带了,不用安装,可用(rpm -qa | grep birdge)指令查看。

宿主机的网络配置

# 对网络接口(图2中eth0)的修改
cat /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE="eth0"
ONBOOT=yes
BRIDGE=br0
# 说明:以上三项是必须的,至于HWADDR、NAME、。。。等等,我不知道是不是必须写,自己尝试。

# 对桥接设备(图2中的br0)的修改
cat /etc/sysconfig/network-scripts/ifcfg-br0
DEVICE="br0"
TYPE=Bridge
BOOTPROTO=dhcp
ONBOOT=yes
# 说明:这个设备大多数情况是没有的,需要自己创建,同时这个设备是可以有网址的,作为宿主机的网卡使用(如果图2中宿主机没有eth1,那么eth0被作为接口使用,而这个br0就用来当原来eth0了)。

然后重启网卡就行了

宿主机kvm安装

工具安装
yum install -y qemu-kvm qemu-kvm-tools libvirt
yum install -y virt-install net-tools
systemctl enable libvirtd
systemctl start libvirtd
虚拟机的创建
# Centos7环境下的创建
qemu-img create -f raw 磁盘名.raw 磁盘大小
virt-install --virt-type kvm --name 虚拟机名 --ram 内存大小 --vcpus=CPU核数 --cdrom=镜像路径 --disk path=磁盘路径 --network bridge=桥接设备(图2中的br0),model=virtio --graphics vnc,listen=0.0.0.0 --noautoconsole
# Centos6环境下的创建
qemu-img create -f raw 磁盘名.raw 磁盘大小
virt-install --name 虚拟机名 --ram 内存大小 --vcpus=CPU核数 --disk path=镜像路径  --network bridge=桥接设备(图2中的br0)  --cdrom 镜像路径 --vnclisten=0.0.0.0 --vncport=5900 --vnc
# Centos6下这么创建有一个问题,就是vnc监听端口是固定的不会自动修改,需要修改配置文件。操作如下:
virsh edit 虚拟机名
。。。。。
<graphics type='vnc' port='-1' autoport='yes' listen='0.0.0.0'>
    <listen type='address' address='0.0.0.0'/>
</graphics>
。。。。
# 将 autoport 选项改成 yes
# 如果不处理,那么批量克隆的时候就只能启动一台虚拟机。

创建完成后需要安装,用自带的 virt-manager 图形界面和 vncviewer 图形界面进行安装。注意vnc链接的端口就是上图中的 vnclisten 和 port,即 0.0.0.0:5900,当然这个端口只是你创建的第一台,如果创建很多了虚拟机会自动分配端口。可以自行查看端口,操作如下:

# netstat -tunlp    //查看端口
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name   
tcp        0      0 0.0.0.0:5900            0.0.0.0:*               LISTEN      4878/qemu-kvm       
tcp        0      0 0.0.0.0:5901            0.0.0.0:*               LISTEN      5051/qemu-kvm       
tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN      1/systemd           
tcp        0      0 0.0.0.0:20048           0.0.0.0:*               LISTEN      1590/rpc.mountd     
tcp        0      0 192.168.122.1:53        0.0.0.0:*               LISTEN      2821/dnsmasq      
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1474/sshd           
tcp        0      0 0.0.0.0:46200           0.0.0.0:*               LISTEN      -                   
.........
# vncviewer     //启动后按照端口链接图示为0.0.0.0:5900和0.0.0.0:5901两台虚拟机
# .........     //按照自己的要求安装成功后修改文件

如果想用命令行进行控制虚拟机,有两种方法,一是ssh服务,需要虚拟机搭建好网络环境,而且宿主机和虚拟机都安装有openssh软件;二是virsh console your_vm_names 的指令,但是这个指令需要在虚拟机内部做一些修改具体如下:

# 对于CentOS7
grubby --update-kernel=ALL --args="console=ttyS0"
reboot
# 对于其他linux
# 首先在 sercuretty 中添加 ttyS0
echo "ttyS0" >> /etc/sercuretty
# 其次在 grub.conf 中特定行加入 console=ttyS0
cat /etc/grub.conf | grep console=ttyS0
kernel /vmlinuz-2.6.32-431.el6.x86_64 ro root=/dev/mapper/VolGroup-lv_root rd_NO_LUKS LANG=en_US.UTF-8 rd_NO_MD rd_LVM_LV=VolGroup/lv_swap SYSFONT=latarcyrheb-sun16 crashkernel=128M rd_LVM_LV=VolGroup/lv_root  KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet console=ttyS0
# 最后在 inittab 添加 S0:12345:respawn:/sbin/agetty ttyS0 115200
echo "S0:12345:respawn:/sbin/agetty ttyS0 115200" >> /etc/inittab
reboot
# 如果不操作那么他会停在如下位置
[root@h97 myCentos]# virsh console 虚拟机名
Connected to domain centos7
Escape character is ^]

这样就可以用命令行操控虚拟机了

扫描二维码关注公众号,回复: 42738 查看本文章

如果想用脚本操作的话需要用到 expect 脚本来处理登录交互界面,我的一个例子如下

# cat connect.exp
set timeout 3s
set ip [lindex $argv 0]
set setip [lindex $argv 1]
spawn ssh $ip
expect "password:"
send "123456\n"
expect "#"
send "cd /home/\n"
expect "#"
send "./vmset.sh $setip\n"
expect eof
exit
# timeout 是指交互时延,超过了脚本就自动结束
# ip 和 setip 是和 shell 脚本一样的传入值,值得注意的是 expect 脚本传值是从 $argv 0 开始
# spawn 后面接的是要执行的指令
# 然后就是没捕捉到一个关键字(即 expect "关键字"),就发送你想要发送的(即 send "发送的内容")


猜你喜欢

转载自blog.csdn.net/qq_29690869/article/details/80040744