centos7.2系统使用KVM服务创建虚拟机

KVM(Kernel-based Virtual Machine)服务是一种基于内核的虚拟化技术,它允许在Linux操作系统上创建和运行多个虚拟机(Virtual Machines, VMs)。作为一项开源技术,KVM使Linux内核本身成为一个Hypervisor(虚拟机监视器),这样单一的物理机器就可以运行多个相互隔离的操作系统实例。

当启用KVM服务时,它可以利用硬件级别的虚拟化支持(如Intel VT或AMD-V技术),使得每个虚拟机可以直接运行在硬件级别上,从而获得接近原生的性能。KVM并不直接模拟硬件,而是利用内核模块和用户空间工具(如QEMU)来管理虚拟机的创建、生命周期、以及对虚拟硬件资源(如CPU、内存、磁盘、网卡等)的分配和访问。

有点像套娃,在vm虚拟机的centos7.2中再套一个小虚拟机来使用。

本次个人选择实验的ip网段如下:

IP地址

主机名

节点

172.168.100.10

localhost

KVM

网卡使用nat或者主机模式都可以,本次实验不是纯手动搭建的,使用到了一份脚本让kvm虚拟机以nat模式启动。

正如上面所说的,启用KVM服务时,它可以利用硬件级别的虚拟化支持(如Intel VT或AMD-V技术)。因此我们需要在虚拟机上提前开启这个功能,在自己需要搭建这个服务的虚拟机设置上勾选此选项即可。

首先,先启动我们的centos7.2然后手动配置一下网卡ip地址等信息。

如果原来是dhcp自动分配的话记得这边参数要改成静态。

然后先挂载一下本地源,安装一下kvm需要用到的服务依赖等等。移走自带的网络源,配置本地源。

创建仓库目录后将本地镜像源挂载上去

之后就可以安装服务了。

启动libvirtd服务,再建立个软链接。

这里软链接的作用如下:

接着我们把待会要安装的虚拟机镜像和启动制作脚本都通过ssh服务软件上传至centos7.2虚拟机。

实验需要的镜像和脚本已上传至百度网盘,需要自取。

链接:https://pan.baidu.com/s/1a-7_iAIX0DBAMkF9bhiTcA?pwd=2333 
提取码:2333

镜像版本不一定需要跟我一样哦,比如cirros-0.3.3版本的也行或者自己有其他不一样的镜像只要能兼容使用就行。

脚本是不需要动的,默认的地址配置就能对上到时候kvm启动的虚拟机。

脚本的全貌同样给各位贴出来,想要深究原理的可以看下。

#!/bin/bash
BRIDGE=virbr0
NETWORK=192.168.122.0
NETMASK=255.255.255.0
GATEWAY=192.168.122.1
DHCPRANGE=192.168.122.2,192.168.122.254
TFTPROOT=
BOOTP=
function check_bridge()
{
        if brctl show | grep "^$BRIDGE" &> /dev/null; then
                return 1
        else
                return 0
        fi
}
function create_bridge()
{
            brctl addbr "$BRIDGE"
            brctl stp "$BRIDGE" on
            brctl setfd "$BRIDGE" 0
            ifconfig "$BRIDGE" "$GATEWAY" netmask "$NETMASK" up
}
function enable_ip_forward()
{
        echo 1 > /proc/sys/net/ipv4/ip_forward
}
function add_filter_rules()
{
        iptables -t nat -A POSTROUTING -s "$NETWORK"/"$NETMASK" \
                ! -d "$NETWORK"/"$NETMASK" -j MASQUERADE
}
function start_dnsmasq()
{
        # don't run dnsmasq repeatedly
        ps -ef | grep "dnsmasq" | grep -v "grep" &> /dev/null
        if [ $? -eq 0 ]; then
                echo "Warning:dnsmasq is already running. No need to run it again."
                return 1
        fi
        dnsmasq \
                --strict-order \
                --except-interface=lo \
                --interface=$BRIDGE \
                --listen-address=$GATEWAY \
                --bind-interfaces \
                --dhcp-range=$DHCPRANGE \
                --conf-file="" \
                --pid-file=/var/run/qemu-dnsmasq-$BRIDGE.pid \
                --dhcp-leasefile=/var/run/qemu-dnsmasq-$BRIDGE.leases \
                --dhcp-no-override \
                ${TFTPROOT:+"--enable-tftp"} \
                ${TFTPROOT:+"--tftp-root=$TFTPROOT"} \
                ${BOOTP:+"--dhcp-boot=$BOOTP"}
}
function setup_bridge_nat()
{
        check_bridge "$BRIDGE"
        if [ $? -eq 0 ]; then
                create_bridge
        fi
        enable_ip_forward
        add_filter_rules "$BRIDGE"
        start_dnsmasq "$BRIDGE"
}
# need to check $1 arg before setup
if [ -n "$1" ]; then
        setup_bridge_nat
        ifconfig "$1" 0.0.0.0 up
        brctl addif "$BRIDGE" "$1"
        exit 0
else
        echo "Error: no interface specified."
        exit 1
fi

既然要跑脚本那自然要给脚本权限了,顺便再补充安装一下网络端口工具包,方便待会用命令查看路由等等。

最后我们就可以使用qemu-kvm命令启动KVM虚拟机。可以看到命令特别长,其实主要是参数特别多指定了一堆东西。比如:驱动磁盘文件指定了我们上传的镜像,net那块的参数指定了我们自定义的脚本。请不用担心看不懂,给诸位补上对此命令的解析。

回车运行命令以后马上就会开始创建运行虚拟机了,坐等一段时间自动获取到地址后会请求20次,但是本来就通不了,所以等它自己20次全部请求失败就进入到虚拟机界面了。

之后就进入到虚拟机界面了,输入用户名为cirros,密码为cubswin:)。注意这个密码这边:)都是密码的一部分哦,不是我打错了没删掉。

然后输入ip addr list命令查询IP地址,最后输入route -n命令查询路由表。

可以看到我们写的网络配置都通过脚本配置上了。

本次实验到此结束!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值