介绍
KVM
KVM(Kernel-based Virtual Machine, 即内核级虚拟机) 是一个开源的系统虚拟化模块。它使用Linux自身的调度器进行管理,所以相对于Xen,其核心源码很少。
virt-manager
virt-manager是用来管理KVM虚拟机的工具
VNC
用来管理KVM虚拟机的客户端工具
安装
环境检测
安装之前我们要确认服务器的CPU是支持虚拟化的,否则是无法使用KVM的
执行以下命令后如果有内容输出就是支持,否则就是不支持!
cat /proc/cpuinfo | grep 'vmx\|svm'
安装KVM
使用yum安装
qemu-kvm:kvm核心
qemu-kvm-tools:kvm核心工具
libvirt:kvm核心工具
virt-manager:kvm管理工具
virt-install:kvm管理工具
yum -y install qemu-kvm qemu-kvm-tools libvirt virt-manager virt-install
重启
因为kvm是内核功能,所以我们需要重新启动服务器才能继续后面的操作
reboot
验证
我们通过下面的命令验证安装是否成功
[root@tongfunet]# lsmod | grep kvm kvm_intel 174250 32 kvm 570658 1 kvm_intel irqbypass 13503 3 kvm
自动启动
通过下面的命令设置kvm开机自动启动
systemctl start libvirtd systemctl enable libvirtd
配置
配置网络
安装libvirtd服务后,系统会给我们提供一个桥接网卡virbr0
[root@tongfunet]# ip a ... 4: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN qlen 1000 link/ether 52:54:00:0b:72:19 brd ff:ff:ff:ff:ff:ff inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0 valid_lft forever preferred_lft forever 5: virbr0-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast master virbr0 state DOWN qlen 1000 link/ether 52:54:00:0b:72:19 brd ff:ff:ff:ff:ff:ff
删除网络
如果要删除virbr0网络,可以安装下面的方法操作
virsh net-destroy default virsh net-undefine default systemctl restart libvirtd
安装VNC
安装VNC server
安装gnome环境
yum groupinstall "GNOME Desktop" "Graphical Administration Tools" -y yum groupinstall "X Window System" "Desktop" -y
安装tigervnc
yum install tigervnc tigervnc-server -y
设置tigervnc密码
首先是设置管理密码
然后再设置只读密码
vncpasswd
设置tigervnc服务脚本
打开 vncserver@.service,将里面的 <USER> 换成你的用来连接 VNC server 的用户,这里我们替换成 root 用户
注意如果是 root 用户,PIDFile 一行的路径要从 /home/<USER>/ 换成 /root/ 才行
[root@tongfunet]# vi /lib/systemd/system/vncserver\@.service [Unit] Description=Remote desktop service (VNC) After=syslog.target network.target [Service] Type=forking # Clean any existing files in /tmp/.X11-unix environment ExecStartPre=/bin/sh -c '/usr/bin/vncserver -kill %i > /dev/null 2>&1 || :' ExecStart=/usr/sbin/runuser -l root -c "/usr/bin/vncserver %i" PIDFile=/root/.vnc/%H%i.pid ExecStop=/bin/sh -c '/usr/bin/vncserver -kill %i > /dev/null 2>&1 || :' [Install] WantedBy=multi-user.target
启动tigervnc
systemctl start vncserver\@:1.service
设置自动启动tigervnc
systemctl enable vncserver\@:1.service
安装VNC viewer
下载VNC viewer
下载地址 https://www.realvnc.com/download/file/viewer.files/VNC-Viewer-6.18.625-Windows.exe
安装VNC viewer
双击 VNC-Viewer-6.18.625-Windows.exe 开始安装
一路 next 安装完毕!
启动VNC viewer
这玩意安装后,桌面没有图标(真有规矩~~)
在开始-》所有程序里找 RealVNC 里面的 VNC viewer
添加连接
点击File-》New connection
连接KVM
双击连接图标,输入密码,登录KVM
打开虚拟机管理器
虚拟机
基础知识
磁盘格式
特点/类型 RAW QCOW2
KVM默认 是 否
I/O效率 高 较高
占用空间 大 小
压缩 不支持 支持
增量备份 不支持 支持
快照 不支持 支持
创建虚拟机
创建磁盘
创建格式为qcow2的10G磁盘文件
[root@tongfunet]# qemu-img create -f qcow2 /data/kvm/winxp.img 20G Formatting '/u01/gnway/VM//winxpsp2.img', fmt=qcow2 size=21474836480 encryption=off cluster_size=65536 lazy_refcounts=off
查看磁盘文件状态
[root@tongfunet]# qemu-img info /data/kvm/winxp.raw image: /data/kvm/winxp.raw file format: qcow2 virtual size: 20G (21474836480 bytes) disk size: 388K cluster_size: 65536 Format specific information: compat: 1.1 lazy refcounts: false
安装Windows
通过下面的命令创建一个安装进程
virt-install \ --virt-type kvm \ --name winxp \ --memory 1024,maxmemory=2048 \ --cdrom=/data/ISO/XP/zh_win_xp_pro_x86_with_sp3_vl_incl_virtio_x14-140508_by-jdq.iso \ --boot cdrom \ --cpu core2duo \ --graphics \ --vnc \ --vncport=59732 \ --vnclisten=0.0.0.0 \ --disk path=/data/kvm/winxp.img \ --network bridge=virbr0 \ --noautoconsole \ --os-type=windows
接下来我们在windows上通过VNC viewer远程连接这个进程
然后启动远程连接
然后就可以开始安装操作系统了
安装Linux
通过下面的命令创建一个安装进程
这里我们省略了前面创建磁盘的步骤,我们使用 /data/kvm/centos.raw 磁盘安装
virt-install \ --virt-type kvm \ --name centos64 \ --memory 1024,maxmemory=2048 \ --cdrom=/data/ISO/CentOS/CentOS-6.4-x86_64-bin-DVD1.iso \ --boot cdrom \ --cpu core2duo \ --graphics \ --vnc \ --vncport=59732 \ --vnclisten=0.0.0.0 \ --disk path=/data/kvm/centos64.raw \ --noautoconsole \ --os-type=linux
virt-install参数说明
# 旧版本的写法 –name指定虚拟机名称 –memory分配内存大小。 –vcpus分配CPU核心数,最大与实体机CPU核心数相同 –disk指定虚拟机镜像,size指定分配大小单位为G。 –network网络类型,此处用的是默认,一般用的应该是bridge桥接。 –accelerate加速 –cdrom指定安装镜像iso –vnc启用VNC远程管理,一般安装系统都要启用。 –vncport指定VNC监控端口,默认端口为5900,端口不能重复。 –vnclisten指定VNC绑定IP,默认绑定127.0.0.1,这里改为0.0.0.0。 –os-type=linux,windows –os-variant=rhel6 # 新版本的写法 --name 指定虚拟机名称 --ram 虚拟机内存大小,以 MB 为单位 --vcpus 分配CPU核心数,最大与实体机CPU核心数相同 –-vnc 启用VNC远程管理,一般安装系统都要启用。 –-vncport 指定VNC监控端口,默认端口为5900,端口不能重复。 –-vnclisten 指定VNC绑定IP,默认绑定127.0.0.1,这里改为0.0.0.0。 --network 虚拟机网络配置 # 其中子选项,bridge=br0 指定桥接网卡的名称。 --os-type=linux,windows --os-variant=rhel7.2 --disk 指定虚拟机的磁盘存储位置 # size,初始磁盘大小,以 GB 为单位。 --location 指定安装介质路径,如光盘镜像的文件路径。 --graphics 图形化显示配置 # 全新安装虚拟机过程中可能会有很多交互操作,比如设置语言,初始化 root 密码等等。 # graphics 选项的作用就是配置图形化的交互方式,可以使用 vnc(一种远程桌面软件)进行链接。 # 我们这列使用命令行的方式安装,所以这里要设置为 none,但要通过 --extra-args 选项指定终端信息, # 这样才能将安装过程中的交互信息输出到当前控制台。 --extra-args 根据不同的安装方式设置不同的额外选项
查看虚拟机
查看虚拟机列表
查看虚拟机列表
virsh list
查看全部虚拟机列表
virsh list --all
控制虚拟机
启动虚拟机
virsh start [虚拟机名称]
关闭虚拟机
virsh shutdown [虚拟机名称]
强制关闭虚拟机
virsh destroy [虚拟机名称]
挂起虚拟机
virsh suspend [虚拟机名称]
恢复虚拟机
virsh resume [虚拟机名称]
开机启动虚拟机
virsh autostart [虚拟机名称]
删除虚拟机
强制停止虚拟机
删除配置文件
删除虚拟机磁盘
virsh destroy [虚拟机名称] virsh undefine [虚拟机名称] rm -f [虚拟机磁盘文件路径]
虚拟机配置文件
导出配置文件
编辑配置文件
删除配置文件
virsh dumpxml [虚拟机名称] virsh edit [虚拟机名称] virsh undefine [虚拟机名称]
虚拟机快照
虚拟机快照可以当做是一个备份理解,我们可以把每一个里程碑打一个快照,在后面的操作出现问题时候,可以随时回滚快照记录的里程碑状态重新来过。
这个和玩单机PRG游戏时候的存档/读档一个道理,Save Location(存档),Load Location(读档)。
创建快照
virsh snapshot-create-as [虚拟机名称] [快照名称] [快照描述]
查看快照列表
virsh snapshot-list [虚拟机名称]
快照回滚
virsh snapshot-revert [虚拟机名称] [快照名称]
删除快照
virsh snapshot-delete [虚拟机名称] [快照名称]
查看快照
virsh snapshot-current [虚拟机名称]
回滚快照注意事项
“当前”版本
系统默认会有一个“当前”版本,我们在此之上打快照ss1,此时运行的版本还是“当前”。如果我们还原快照ss1,此时运行的版本还是“当前”,只不过我们是把在打快照ss1之后做的操作放弃了。
回滚“当前”版本
如果要清除当前版本在打快照之后做的操作的话,并不需要去查看当前运行的快照版本,只需要将快照名称换一下即可。
virsh snapshot-revert [虚拟机名称] --current
虚拟机克隆
我们可以对制作好的虚拟机进行克隆操作,这样可以快速建立一个可以用的操作系统环境
克隆虚拟机
注意:
磁盘文件是virt-clone命令执行时候自动创建的,不能事先创建好哦
执行克隆之前需要先将虚拟机挂起或者关机,否则无法进行操作
virt-clone -o [源虚拟机名称] -n [新虚拟机名称] -f [新虚拟机磁盘文件路径]
虚拟机映射
VNC端口映射
我们建立好的虚拟机如果要在VNC viewer上操作的话需要通过虚拟机的VNC端口访问,如果开启了防火墙的话我们就需要通过添加规则开放访问权限了
示例:给端口为59732端口开放规则
iptables -I INPUT -p tcp --dport $port -j ACCEPT -m comment --comment "KVMPort"
虚拟机内服务映射
虚拟机安装完成了,我们在虚拟机里面安装了软件,软件需要对外开放访问端口,如果开启了防火墙的话我们就需要通过添加规则来开放虚拟机内的服务的端口了
示例:给IP为 192.168.122.123 的虚拟机内的 80 端口开放规则,其中 $serverIP 是宿主机对外IP地址,请根据实际情况赋值
iptables -t nat -A PREROUTING -d $serverIP -p tcp -m tcp --dport 80 -j DNAT --to-destination 192.168.122.123 -m comment --comment "KVMNatPort"