KVM

一、KVM简介

1、概念

KVM,基于内核的虚拟机(英语:Kernel-based Virtual Machine,缩写为 KVM),是一种用于Linux内核中的虚拟化基础设施,可以将Linux内核转化为一个hypervisor。

KVM在2007年2月被导入Linux 2.6.20核心中,以可加载核心模块的方式被移植到FreeBSD及illumos上。

KVM在具备Intel VT或AMD-V功能的x86平台上运行。它也被移植到S/390,PowerPC与IA-64平台上。在Linux内核3.9版中,加入ARM架构的支持。

KVM目前由Red Hat等厂商开发,对CentOS/Fedora/RHEL等Red Hat系发行版支持极佳。

2、关于KVM

KVM是开源软件,全称是kernel-based virtual machine(基于内核的虚拟机)。

是x86架构且硬件支持虚拟化技术(如 intel VT 或 AMD-V)的Linux全虚拟化解决方案。

它包含一个为处理器提供底层虚拟化 可加载的核心模块kvm.ko(kvm-intel.ko或kvm-AMD.ko)。

KVM还需要一个经过修改的QEMU软件(qemu-kvm),作为虚拟机上层控制和界面。

KVM能在不改变linux或windows镜像的情况下同时运行多个虚拟机,(它的意思是多个虚拟机使用同一镜像)并为每一个虚拟机配置个性化硬件环境(网卡、磁盘、图形适配器……)同时KVM还能够使用ksm技术帮助宿主服务器节约内存。

在主流的Linux内核,如2.6.20以上的内核均已包含了KVM核心。

二、设置本地虚拟机环境

1、设置大一些的内存

2、修改处理器配置,添加虚拟化引擎(必须要设置)

三、安装KVM所需依赖

1、查看是否存在vmx,存在才能安装kvm虚拟机:grep -E "(vmx|svm)" /proc/cpuinfo

2、查看kvm相关工具包:yum list | grep kvm

3、安装kvm工具包:yum install -y qemu-kvm qumu-kvm-tools libvirt virt-install bridge-utils

4、安装工具包完成之后:设置开机自启动

systemctl start libvirtd

systemctl enable libvirtd

5、执行ifconfig命令:会发现kvm帮你自动创建了一个virbr0的桥接网卡,其中,192.168.122.1地址是不变的

四、创建kvm虚拟机

1、首先下载Centos7镜像,方便后面安装镜像使用

wget -c https://mirrors.aliyun.com/centos-vault/7.1.1503/isos/x86_64/CentOS-7-x86_64-DVD-1503-01.iso

2、使用tigthVNC工具连接,需要下载此工具:

下载地址:https://www.tightvnc.com/download.php

选择:Installer for Windows (64-bit

安装:

3、创建虚机镜像:qemu-img create -f raw /opt/CentOS-7-x86_64.raw 10G

 

4、安装虚虚机(注意磁盘和镜像的路径):virt-install --virt-type kvm --name CentOS-7-x86_64 --ram 2048 --cdrom=/opt/CentOS-7-x86_64-DVD-1503-01.iso --disk path=/opt/CentOS-7-x86_64.raw --network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole

6、安装操作系统:

用TightVNC工具连接:

跳出界面:移动方向键上下键选择第一个,然后按Tab键,下方出现一行内容,空一格在后面输入 net.ifnames=0 biosdevname=0

(注意:如果连接失败,需要关闭防火墙再次进行连接:systemctl stop firewalld)

以下步骤参照此文档进行安装:https://www.cnblogs.com/zhangguosheng1121/p/13521108.html

以上kvm虚拟机就安装成功。

安装成功之后,此时虚拟机是关闭的状态,不能通过TightVNC连接访问,需要开启虚机,然后再次进行TightVNC连接

五、虚机联网

1、查看所有虚拟机:virsh list --all

2、开启虚拟机:virsh start 虚拟机名称

3、TightVNC连接虚拟机,查看ip

4、设置DNS,联网

修改配置文件:vi /etc/sysconfig/network-scripts/ifcfg-eth0

重启网络:systemctl restart network

查看系统分配的ip:

修改DNS:vi /etc/resolv.conf

查看是否可以上网:ping baidu.com

安装工具:yum install net-tools

六、kvm虚拟机console登录

1、在虚机内操作:用tightVNC连接进入虚拟机

[root@kvm ~]# grubby --update-kernel=ALL --args="console=ttyS0,115200n8" 
[root@kvm ~]# reboot     # 重启

2、在宿主机内操作

[root@admin ~]# virsh console CentOS-7-x86_64
Connected to domain CentOS-7-x86_64
Escape character is ^]

CentOS Linux 7 (Core)
Kernel 3.10.0-229.el7.x86_64 on an x86_64

zgskvm login: root
Password: 
Last failed login: Fri Jul 24 08:34:51 CST 2020 on ttyS0
There was 1 failed login attempt since the last successful login.
Last login: Thu Jul 23 17:55:36 on ttyS0

报错解决:

退出虚拟机:快捷键: ctrl+]

七、virsh基本命令

虚拟机管理常用命令

1、备份虚机:virsh dumpxml 虚机名称 > 备份文件名字

2、关闭虚机:virsh shutdown 虚机名称

大前提:使用shutdown关闭虚拟机时,kvm虚拟机需要安装acpid服务,注意是在虚拟机里面安装,不是在宿主机上。

yum install -y acpid
service acpid start

强制关机虚拟机:virsh destroy 虚拟机名称

3、删除虚机:virsh undefine 虚机名称

4、恢复虚机:virsh define 备份文件

 5、暂停虚机与恢复暂停的虚机:

6、设置虚拟机自启动:virsh autostart 虚拟机名称

7、关闭虚拟机自启动:virsh auotstart --disable 虚拟机名称

8、获取当前路径:virsh pwd

 9、查看kvm虚拟机vnc端口号:virsh vncdisplay CentOS-7-x86_64

 10、虚拟机xml配置文件路径:/etc/libvirt/qemu

 11、虚拟机默认磁盘路径:/var/lib/libvirt/images,当然可以自己定义磁盘存放路径

八、KVM存储池和存储卷管理

默认储存池路径:/var/lib/libvirt/images

 创建基于文件夹的储存池(目录)

定义储存池与其目录:virsh pool-define-as vmdisk --type dir --target /data/vmfs

创建已定义的储存池:virsh pool-build vmdisk

查看已定义的储存池(储存池没有激活无法使用):virsh pool-list --all

激活并自动启动已经定义的储存池:

激活: virsh pool-start vmdisk

自启动: virsh pool-autostart vmdisk

在储存池中创建储存卷: virsh vol-create-as vmdisk 01_CCJ.qcow2 2G --format qcow2

 

删除储存池中创建的储存卷: virsh vol-delete --pool vmdisk 01_CCJ.qcow2

关闭储存池:virsh pool-destroy vmdisk

 

获取储存池:virsh pool-list --all

获取储存池信息:virsh pool-info opt

删除储存池:virsh pool-delete vmdisk

取消定义的储存池:virsh pool-undefine vmdisk

获取储存池uuid:virsh pool-uuid vmdisk

编辑储存池配置:virsh pool-edit vmdisk

九、KVM虚拟机磁盘、快照与克隆

1、磁盘镜像文件格式

raw:原始格斯,性能最好,但是不支持快照,创建时会立刻分配空间,不管有没有用到这么多的空间

qcow2:性能上不如raw,但是可以支持快照。创建时只是承诺给你分配空间,只有当你需要空间的时候,才会给你空间,最多只会给你承诺空间的大小,这样可以避免空间浪费

cow(copy on write-写时拷贝)

2、磁盘管理

查看已经创建磁盘信息:qemu-img info CentOS-7-x86_64.raw

检查磁盘有没有问题:qemu-img check CentOS-7-x86_64.qcow2

创建一块qcow2格式的虚拟硬盘:qemu-img create -f qcow2 /opt/CentOS-7-x86_64.qcow2 10G

raw转qcow2格式:(需要注意磁盘镜像文件的路径,转换之前需要创建一块qcow2格式的磁盘,如上)

qemu-img convert -f raw -O qcow2 CentOS-7-x86_64.raw CentOS-7-x86_64.qcow2

转换完成之后,需要更改此虚拟机的配置文件,编辑:virsh edit CentOS-7-x86_64,如下:

 

注意:修改之后需要重新启动kvm虚拟机

这样就完成了格式的转换,方便进行快照等一系列操作。

3、快照管理(raw格式无法创建快照,安装时是raw格式,需要转换成qcow2格式,参照上述方法转换格式)

查看快照命令:virsh --help | grep snap

创建快照:virsh snapshot-create CentOS-7-x86_64

查看主机快照列表:virsh snapshot-list  CentOS-7-x86_64

查看快照信息: virsh snapshot-info CentOS-7-x86_64 --snapshotname  1595568232

还原快照: virsh snapshot-revert CentOS-7-x86_64 --snapshotname 1595568708

删除快照:virsh snapshot-delete CentOS-7-x86_64 --snapshotname  1595568232

查看快照配置文件位置:cd /var/lib/libvirt/qemu/snapshot

4、kvm虚拟机克隆

复制一个虚拟机,需修改如 MAC 地址,名称等所有主机端唯一的配置。虚拟机的内容并没有改变:virt-clone 不修改任何客户机系统内部的配置,它只复制磁盘和主机端的修改。

virt-clone -o CentOS-7-x86_64 -n CentOS-7 -f /var/lib/libvirt/images/CentOS-7.qcow2

注:-o:original 后面跟要克隆的虚拟机名字

  -n:name 克隆后虚拟机的名字

  -f:file 指定镜像存放的路径

查看原虚拟机与克隆之后的虚拟机xml文件的不同:

 

十、kvm虚拟机网络管理:设置桥接

1、设置桥接网络

[root@kvm-test ~]# systemctl stop NetworkManager     # 停止此服务
[root@kvm-test ~]# virsh iface-bridge ens33 br0      # 执行此命令时,若提示以下信息,不用在意,因为其已经存在了
使用附加设备 br0 生成桥接 ens33 失败
已启动桥接接口 br0
Created bridge br0 with attached device ens33 Bridge interface br0 started

2、查看宿主机网桥:eth0绑定到br0上

3、查看配置文件

cat /etc/sysconfig/network-scripts/ifcfg-eth0

DEVICE=eth0
ONBOOT=yes
BRIDGE="br0"
NM_CONTROLLED=no
TYPE=Ethernet

cat /etc/sysconfig/network-scripts/ifcfg-br0

DEVICE="br0"
ONBOOT="yes"
TYPE="Bridge"
BOOTPROTO="none"
IPADDR="10.0.0.200"
NETMASK="255.255.255.0"
GATEWAY="10.0.0.2"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
DHCPV6C="no"
STP="on"
DELAY="0"
BOOTPROTO=static
NM_CONTROLLED=no

4、修改kvm虚拟机网络配置:改成桥接模式

virsh edit CentOS-7-x86_64

5、修改kvm虚拟机网卡配置文件:vnc登录进去

vi /etc/sysconfig/network-scripts/ifcfg-eth0

TYPE=Ethernet
BOOTPROTO=static
DEFROUTE=yes
PEERDNS=no
PEERROUTES=yes
IPV4_FAILURE_FATAL=no
#IPV6INIT=yes
#IPV6_AUTOCONF=yes
#IPV6_DEFROUTE=yes
#IPV6_PEERDNS=yes
#IPV6_PEERROUTES=yes
#IPV6_FAILURE_FATAL=no
NAME=eth0
#UUID=4a1784c8-64bd-43c4-bc17-fe080d6d788c
DEVICE=eth0
ONBOOT=yes
IPADDR=10.0.0.60
NETMASK=255.255.255.0
GATEWAY=10.0.0.2
DNS1=8.8.8.8
DNS2=114.114.114.114

重启网络:systemctl restart network

测试:可以ping通网关,可以访问百度,可以使用secureCRT进行连接,则虚拟网桥搭建成功。

 十一、安装virt-manager

https://www.cnblogs.com/zhangguosheng1121/p/13521108.html

十二、执行python脚本

#bin/bash
import libvirt
conn = libvirt.open("qemu:///system")     

for id in conn.listDomainsID():
        dom = conn.lookupByID(id)
        infos = dom.info()
        print ''
        print 'ID = %d'%id
        print 'Name = %s'%dom.name()
        print 'Statu = %d' %infos[0]
        print ''

原文地址:https://www.cnblogs.com/zhangguosheng1121/p/13355625.html