KVM(Kernel-based Virtual Machine)是众多虚拟化技术之一,它是Linux内核中的一个模块,该模块依赖于CPU,若是CPU支持虚拟化,那么该模块才能够被加载。KVM技术是硬件层面的虚拟化,它会为咱们虚拟各类硬件设备,这样咱们能够在已有操做系统上运行别的操做系统。node
sudo apt install cpu-checker -y sudo kvm-ok
先安装cpu-checker工具,而后使用其带的kvm-ok命令检查kvm模块是否加载ubuntu
注:lsmod | grep kvm也能够查看kvm模块是否加载缓存
sudo apt install ubuntu-virt-server
软件包ubuntu-virt-server依赖的两个主要的软件包是qemu-kvm和libvirt-bin。服务器
sudo apt-get install virtinst
该软件包提供4个命令来管理虚拟机网络
默认状况下,KVM新建立的虚拟机使用NAT网络(虚拟机能够访问外面,外面看不到它)。这种NAT机制不经过网卡,只经过内核内部的IP转发来进行数据传输,因此外面的机器访问不到虚拟机。为了能让外面的机器访问虚拟机,须要建立虚拟网桥,把虚拟机的虚拟网卡与外部物理网卡经过网桥桥接起来。dom
编辑/etc/sysctl.conf文件工具
# 去掉该行前面的#号,开启转发功能 net.ipv4.ip_forward = 1
执行sudo sysctl -p命令使配置生效ui
在宿主机上安装bridge-utils软件包:操作系统
sudo apt-get install bridge-utils
编辑/etc/network/interfaces,而后添加虚拟网桥网桥br0,将物理网卡enp4s0f2添加到网桥。3d
注:将物理网卡enp4s0f2添加到br0后,物理网卡的IP地址将失去做用,因此下面的配置文件中没有为enp4s0f2指定IP
[...] auto enp4s0f2 iface enp4s0f2 inet manual auto br0 iface br0 inet dhcp address 10.10.10.2 网桥IP地址 netmask 255.255.255.0 掩码 gateway 10.10.10.1 bridge_ports enp4s0f2 #将物理网卡添加到虚拟网桥中 bridge_stp off bridge_maxwait 0 bridge_fd 0 [...]
重启网络
#sudo /etc/init.d/networking restart 或 #sudo service networking restart
重启网络以后,执行brctl show查看网桥是否添加成功,下面显示个人机器已成功建立网桥,并将enp4s0f2网卡添加到网桥中
首先准备好镜像文件,我这里准备了ubuntu-server-adm64.iso镜像文件,而后经过前面提到的命令来建立虚拟机
sudo virt-install \ --name=myvps1 \ --ram=512 \ --network bridge:br0 \ --disk path=/var/lib/libvirt/images/myvps1.img,bus=virtio,size=10 \ --graphics vnc,listen=0.0.0.0 --noautoconsole \ --hvm \ --cdrom ./ubuntu-server-adm64.iso
下面解释一下各个参数的做用:
固然关于参数的详解使用man virt-install来查看
若是虚拟机建立成功则会显示如下内容
咱们使用VNC软件来链接虚拟机,VNC软件是一款开源的Linux远程桌面控制软件,和Windows下的Teamviewer或者是QQ自带的远程桌面控制同样。VNC分服务端和客户端,安装客户端的电脑能够远程控制安装服务端的电脑,刚才咱们在建立虚拟机的时候,指定支持vnc远程控制,因此咱们下载一个vnc客户端就能够了。下载地址
下面是vnc软件的链接界面,VNS Server填写网桥的IP便可,Name能够随意命名。
链接成功后就会开始装系统的步骤,这里就不介绍了。
建立虚拟机的时候会自动建立两块虚拟网卡出来,虚拟机内部有一块(ens3),虚拟机外部也有一块(vnet0),这个下图有显示。在建立虚拟机的咱们指定为网桥,意思是未来把外部那块网卡(vnet0)添加到网桥中。而物理机的网卡(enp4s0f2)已被添加的网桥中,这样外部就能够和虚拟机进行通讯了(虚拟机内部那块网卡IP必须和网桥在一个IP段)。
外部虚拟网卡
网桥br0中添加了两块网卡(端口)
使用下面的命令来启动刚建立的虚拟机
# virsh start myvps1
让虚拟机随物理机一块儿启动
# virsh autostart myvps1
列出正在运行的虚拟机,全部虚拟机,关闭的虚拟机
# virsh list # virsh list --all # virsh list --inactive
重启
# virsh reboot myvps1
关机
# virsh shutdown myvps1
有时咱们须要把某个虚拟机暂时关闭,而又想启动时恢复当时的状态,这是须要用到save命令
# virsh save myvps1 myvps1-20171202.state
执行上面的命令后,虚拟机的内存会被保存到一个文件中,而后虚拟机自动关闭
# virsh restore myvps1-20171202.state
恢复虚拟机
挂起
# virsh suspend myvps1
恢复
# virsh resume myvps1
在虚拟机运行一段时间后可能会须要添加更多的磁盘空间。这里可使用attach-disk命令对磁盘扩容。
咱们使用dd命令来产生一个文件
# sudo dd if=/dev/zero of=/var/lib/libvirt/images/myvps1-disk2.image bs=1M count=4096
该命令会为咱们生成一个4GB大小的文件
使用attach-disk命令,把刚刚建立的文件添加到myvps1虚拟机,做为其磁盘使用:
# virsh attach-disk myvps1 \ /var/lib/libvirt/images/myvps1-disk2.img vdb \ --live \ --cache none
这样一个名为vdb的虚拟磁盘就被添加到虚拟机中了
将硬盘添加到虚拟机后,须要在虚拟机中对新的硬盘进行格式化才能使用。下面的操做都是在虚拟机myvps1中进行的
查看硬盘是否添加成功
# sudo fdisk -l
上图能够看到已经有磁盘/dev/vdb,可是未分区和格式化,关于Linux下如何对分区进行格式化请自行百度
查看主机cpu核数
# virsh nodeinf0
个人机器显示两个核,也就是每一个虚拟机最多能有两个CPU核
查看当前虚拟机(myvps1)虚拟机核数,显示只有一个核,vcpu 0表示第0个核,而不是核数为0
# virsh vcpuinfo myvps1
关闭虚拟机 # virsh shutdown myvps1 修改最大核数为2核,并设置到配置文件(/etc/libvirt/qemu下) # virsh setvcpus myvps1 2 --maximum --config 设置核数为2到配置文件(/etc/libvirt/qemu下) # virsh setvcpu2 myvps1 2 --config 重启虚拟机 # virsh start myvps1
上图显示出两个cpu核表示咱们设置成功
增长内存核增长CPU核数同样,先设置最大内存,在设置当前内存
查看当前虚拟机信息,能够看到当前的内存设置 # virsh dominfo myvps1 设置最大内存为2G # virsh setmaxmem myvps1 2097152 --config 设置当前内存为1G # virsh setmem myvps1 1048576 --config 重启虚拟机 # virsh shutdown myvps1 # virsh start myvps1
有时咱们须要几台环境相同的虚拟机,这时,咱们不须要从头建立,只须要克隆便可
先关闭虚拟机 # virsh shutdown myvps1 克隆虚拟机 # sudo virsh-clone \ --original myvps1 \ --name myvps3 \ --file /var/lib/libvirt/images/myvps3.img 启动克隆的虚拟机 # virsh start myvps3
虚拟机镜像作好后,咱们可能须要修改虚拟机的IP地址,虚拟机内部的文件等。固然能够先启动虚拟机,而后经过VNC或者SSH进去修改。不过,方便的方法时使用virt-edit命令来直接编辑虚拟机镜像文件便可。virt-edit是libguestfs-tools包提供的命令。
# sudo apt install libguestfs-tools
这个软件包专门管理虚拟机的虚拟磁盘文件,提供的工具备:
固然还有不少命令,这里就不一一列出了
# virsh undefine myvps1 # virsh pool-refresh default
在执行virsh undefine myvps1时,虚拟机的虚拟磁盘文件/var/lib/libvirt/images/myvps1.img文件不会被删除,须要手动删除。删除完毕后须要执行virsh pool-refresh default命令清楚虚拟机的缓存记录