同福

【Linux】KVM学习笔记

介绍

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

打开虚拟机管理器

1a94fdfdda6ded4c.jpg

虚拟机

基础知识

磁盘格式

特点/类型       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远程连接这个进程

111.jpg

然后启动远程连接

222.jpg

然后就可以开始安装操作系统了

333.jpg

安装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"

虚拟机迁移