基于内核的虚拟机 Kernel-based Virtual Machine(KVM)是一种内建于 Linux 中的开源虚拟化技术。具体而言,KVM 可帮助您将 Linux 转变为虚拟机监控程序,使主机计算机能够运行多个隔离的虚拟环境,即虚拟客户机或虚拟机(VM)。
创建虚拟机前需要先在宿主机上做的操作
- 安装对应的虚拟化组件
yum install qemu-kvm qemu-img virt-manager libvirt libvirt-python virt-manager libvirt-client virt-install virt-viewer -y
- 安装完成之后会自动创建一个虚拟交换机virbr0,使用NAT网络,由于只做了SNAT,虚拟机可以访问外部网络,但外部网络无法访问虚拟机,因此我们需要将网络模式改为桥接网络
删除默认的virbr0虚拟交换机
[root@localhost images]# virsh net-list
Name State Autostart Persistent
----------------------------------------------------------
default active yes yes
[root@localhost images]# virsh net-destroy default
Network default destroyed
[root@localhost images]# virsh net-undefine default
Network default has been undefined
[root@localhost images]# systemctl restart libvirtd
- 创建桥设备(也就是虚拟交换)
[root@localhost network-scripts]# cat ifcfg-virbr1
DEVICE="virbr1"
TYPE="Bridge"
ONBOOT="yes"
BOOTPROTO="static"
IPADDR="x.x.x.x"
NETMASK="x.x.x.x"
GATEWAY="x.x.x.x"
- 修改物理网卡配置,让网卡接入虚拟交换机,作为桥设备的网口使用
[root@localhost network-scripts]# cat ifcfg-eth0
DEVICE=eth0
TYPE=Ethernet
ONBOOT=yes
BRIDGE=virbr1
- 重启网络让配置生效
虚拟机创建过程
- 创建磁盘
qemu-img create -f qcow2 kvm1.qcow2 80G -o preallocation=falloc
qemu-img
命令是一个磁盘镜像管理工具,默认是动态分配工具的,-o preallocation=falloc/full
可以指定磁盘预分配策略,full模式有置零操作会慢很多
- 创建虚拟机
virt-install --name=kvm1 --vcpus=4 --memory=8192 --location=/data01/iso/CentOS-7-x86_64-DVD-1708.iso --disk path=/data01/kvm/images/kvm1.qcow2 --network bridge=virbr1 --graphics none --extra-args='console=ttyS0'
--name=kvm1
表示为创建的虚拟机命名为kvm1
--vcpus=4
表示设置虚拟机cpu为4核
--memory=8192
表示虚拟机内存为8G
--location=/data01/iso/CentOS-7-x86_64-DVD-1708.iso
表示用这个路径下的iso镜像安装虚拟机
--disk path=/data01/kvm/images/kvm1.qcow2
表示指定虚拟机的磁盘镜像路径
--network bridge=virbr1
表示虚拟机使用的是桥接网络,桥接设备为virbr1
--graphics none
表示不使用图形化控制台安装虚拟机
--extra-args='console=ttyS0'
表示为虚拟机指定内核启动时的参数,console=ttyS0指分配一个ttyS0的虚拟终端,之后可以在宿主机执行virsh console kvm1
命令登录kvm1虚拟机的控制台,退出按ctrl键和]键
- 克隆虚拟机
virt-clone --auto-clone -o kvm1 -n kvm2
通过kvm1虚拟机自动克隆出kvm2虚拟机