共计 1979 个字符,预计需要花费 5 分钟才能阅读完成。
1. 实现目标
在多台物理机上创立 KVM 虚拟机,且使得不同物理机上的 KVM 虚拟机之间可能互相通信,同时还保障 KVM 虚拟机可能拜访互联网。
2. 实现办法
在每台物理机上创立两个网桥:
- 其中一个应用 KVM 默认的 virbr0 即可,虚拟机通过 virbr0 拜访外网;
- 另外创立一个网桥和 VXLAN 隧道,而后将隧道增加到新建的网桥上,虚拟机通过此网桥实现跨机通信;
- 为虚拟机增加两个虚构网卡,一个(eth0)连贯到 virbr0 上,另一个(eth1)连贯到新建网桥上;
- 为虚拟机增加路由,或者为所有虚拟机的 eth1 网卡调配处于同一个子网内的 IP。
3. 脚本 1:installKVM.sh
作用:装置 KVM 及必要的工具。
sudo yum install -y virt-* libvirt bridge-utils qemu-img qemu-kvm
# 启动服务、开机自启
sudo systemctl start libvirtd.service
sudo systemctl enable libvirtd.service
4. 脚本 2:initKVM.sh
作用:创立内部网桥 br-vxlan 和 VXLAN 隧道。
#!/bin/bash
if [$# != 2]; then
# local-ip: 本地物理机的 IP
# remote-ip: 隧道对端物理机的 IP
echo "Usage: $0 local-ip remote-ip";
exit 1
fi
localIP=$1
remoteIP=$2
brctl addbr br-vxlan
ip link set br-vxlan up
ip link add vxlan0 type vxlan id 42 dstport 4789 remote $remoteIP local $localIP
ip link set vxlan0 up
brctl addif br-vxlan vxlan0
5. 脚本 3:createVM.sh
作用:创立虚拟机,并为虚拟机增加网卡。
#!/bin/bash
if [$# != 5]; then
# n-cpu: 指定 vcpu 个数
# n-memory: 指定须要的内存大小
# n-disk: 指定虚拟机磁盘大小
# vm-name: 指定虚拟机名称
# base-img-path: 指定根底镜像的门路,如能够应用云镜像(见,http://cloud.centos.org/centos/)echo "Usage: $0 n-cpu n-memory(MB) n-disk(GB) vm-name base-img-path";
exit 1;
fi
cpu=$1
ram=$2
disk=$3
vm=$4
baseImg=$5
img=${vm}-disk.qcow2
net=default
# 依据指定的根底镜像创立虚拟机磁盘
qemu-img create -f qcow2 -b $baseImg $img -o size=${disk}G
virt-install --name=$vm --ram=$ram --vcpus=$cpu \
--os-type=linux \
# --os-variant=centos7.0 \
--disk $img,device=disk,bus=virtio \
--network network=$net,model=virtio \
--graphics=none \
--import
# 为虚拟机增加网卡
virsh attach-interface --domain $vm --type bridge --source br-vxlan --model virtio --persistent --live
注:能够通过 osinfo-query os
命令来查看反对哪些 os-variant。
另外,如果根底镜像是云镜像,如 http://cloud.centos.org/centos/,则还能够对其进行定制:(此处应用 CentOS-7-x86_64-GenericCloud-1602.qcow2)
export LIBGUESTFS_BACKEND=direct
# 批改 root 用户的明码为 root
virt-customize -a CentOS-7-x86_64-GenericCloud-1602.qcow2 --root-password password:root
# 容许 root 用户应用明码通过 ssh 登录
virt-customize -a CentOS-7-x86_64-GenericCloud-1602.qcow2 --run-command "sed -r -i's/^#(PermitRootLogin yes)/\1/; s/PasswordAuthentication no/PasswordAuthentication yes/'/etc/ssh/sshd_config"
创立完虚拟机后,进入虚拟机:
virsh console vm-name
而后,为虚拟机的 eth1 虚构网卡调配 IP 地址,让所有物理机上的 KVM 虚拟机通过它们的 eth1 虚拟机网卡进行通信。
正文完