kvm

https://blog.csdn.net/chengyinwu/article/details/103281476 有待整理

kvm集群管理 ovirt 、 proxmox

一、简单介绍

KVM(Kernel-based Virtual Machine)是内核级虚拟化技术

1、kvm和qemu

kvm硬件虚拟化(CPU和内存) ,qemu软件虚拟化 。二者相辅相成,QEMU通过KVM达到了硬件虚拟化的速度,而KVM则通过QEMU来模拟设备。对于KVM来说,其匹配的用户空间工具并不仅仅只有QEMU,还有其他的,比如RedHat开发的libvirt、virsh、virt-manager等,QEMU并不是KVM的唯一选择

2、kvm和docker

Docker 项目的目标是实现轻量级的操作系统虚拟化解决方案,但它本质上是进程隔离(namespace)和资源限制(cgroups),严格来说不算是虚拟化技术。

作为一种新兴的虚拟化方式,Docker 跟传统的虚拟化方式相比具有众多的优势。

二、KVM 安装配置

1、环境准备

关闭Selinux & 防火墙
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
sed -i '/SELINUX/s/enforcing/disabled/' /etc/selinux/config
设置Yum源 curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo yum makecache
查看是否支持虚拟化 cat /proc/cpuinfo | grep -E 'vmx|svm'
查看KVM 驱动是否加载 lsmod | grep kvm
如果没有加载kvm驱动,利用命令加载驱动 modprobe -a kvm modprobe -a kvm_intel

2、安装kvm及相关组件

安装所需工具包qemu-kvmlibrvirtvirt-manager

在安装之前我们最好更新一下软件包
yum update -y

安装qemu-kvm
yum install -y qemu-kvm

安装libvirt
yum install -y libvirt
[root@abcdocker.com ~]# systemctl restart libvirtd 
[root@abcdocker.com ~]# systemctl enable libvirtd 
#libvirt 用来管理kvm

安装virt-manager工具
yum install -y virt-manager

解决字符集问题(CRT会出现)
yum install dejavu-lgc-sans-fonts

或者一条通配符
# yum install *qemu*  *virt*  librbd1-devel  -y

3、查看版本(编译安装的较新)

# /usr/libexec/qemu-kvm -version
QEMU emulator version 2.12.0 (qemu-kvm-ev-2.12.0-33.1.el7)
Copyright (c) 2003-2017 Fabrice Bellard and the QEMU Project developers

# qemu-img --help | grep version
qemu-img version 2.12.0 (qemu-kvm-ev-2.12.0-33.1.el7)
    '-V', '--version'    output version information and exit
       conversion. If the number of bytes is 0, the source will not be scanned for

4、相关工具

libvirt:操作和管理KVM虚机的虚拟化 API,使用 C 语言编写,可以由 Python,Ruby, Perl, PHP, Java 等语言调用。可以操作包括 KVM,vmware,XEN,Hyper-v, LXC 等 Hypervisor。
Virsh:基于 libvirt 的 命令行工具 (CLI)
Virt-Manager:基于 libvirt 的 GUI 工具
virt-v2v:虚机格式迁移工具
virt-* 工具:包括 Virt-install (创建KVM虚机的命令行工具), Virt-viewer (连接到虚机屏幕的工具),Virt-clone(虚机克隆工具),virt-top 等
sVirt:安全工具

三、KVM 网络

1、KVM 客户机网络连接有两种方式:

(1)用户模式(NAT):这种方式是默认网络,数据包由NAT方式通过主机的接口进行传送,可以访问外网,但是无法从外网访问虚拟机网络

(2)桥接模式(Bridge):这种模式允许虚拟机像一台独立的主机一样拥有网络,外部的主机可以直接访问到虚拟机内部

2、配置桥接网络

IP地址 说明 备注 10.4.82.220 本机IP 10.4.82.200 网关地址 10.4.82.116 虚拟机IP

1.编辑宿主机网卡

[root@YZSJHL82-220 ~]#  vim /etc/sysconfig/network-scripts/ifcfg-ens33
DEVICE=em1
ONBOOT=yes
HWADDR=B4:99:BA:B1:24:57
TYPE=Ethernet
BOOTPROTO=static
BRIDGE=br0
## 注释网络配置,添加BRIDGE=br0

2.添加bro虚拟网卡

# vim /etc/sysconfig/network-scripts/ifcfg-br0
DEVICE=br0
BOOTPROTO=none
ONBOOT=yes
TYPE=Bridge
IPADDR=10.4.82.220
NETMASK=255.255.255.0
GATEWAY=10.4.82.200

##添加网络配置,TPYE设置为Bridge

3. 重启网卡

# systemctl restart network

如果重启网卡有报错,内容如下

Linux : Bridge support not available: brctl not found

请安装br网卡依赖包

yum install bridge-utils -y

4.查看IP地址

此时ens33物理网卡应该没有IP,IP应该都在br0网卡上

5、配置虚拟机ip

# cat /etc/sysconfig/network-scripts/ifcfg-eth0 
HWADDR=52:54:00:ED:7A:16
TYPE=Ethernet
BOOTPROTO=none
DEFROUTE=yes
PEERDNS=yes
NAME=eth0
UUID=1c1d3828-0adb-4d1a-ada5-80eda0646952
ONBOOT=yes
IPADDR=10.4.82.113
NETMASK=255.255.255.0
GATEWAY=10.4.82.200   #和宿主机的网关一样
DNS1=114.114.114.114

四、制作快照

命令行方式(磁盘格式为qcow2才支持快照)
虚拟机创建快照:
# virsh snapshot-create-as vm8 vm8.snap1(vm8为虚拟机)
# virsh snapshot-create centos7.0  (不如上面的方便)
已生成域快照 1583311966

# virsh snapshot-list centos7.0   查看当前快照
 名称               生成时间              状态
------------------------------------------------------------
 centos7.sanp1        2020-03-03 16:13:43 +0800 shutoff
 centos7.snap2        2020-03-03 16:26:07 +0800 shutoff

# qemu-img info /var/lib/libvirt/images/centos7.0.qcow2  (查看虚拟机信息)
image: /var/lib/libvirt/images/centos7.0.qcow2
file format: qcow2
virtual size: 10G (10737418240 bytes)
disk size: 11G
cluster_size: 65536
Snapshot list:
ID        TAG                 VM SIZE                DATE       VM CLOCK
1         centos7.sanp1             0 2020-03-03 16:13:44   00:00:00.000
2         centos7.snap2             0 2020-03-03 16:26:07   00:00:00.000
3         1583311966             364M 2020-03-04 16:52:46   00:39:42.734
Format specific information:
    compat: 1.1
    lazy refcounts: true

关闭虚拟机,恢复到第一个快照
# virsh shutdown vm8
# virsh snapshot-revert vm8 vm8.snap1
# virsh snapshot-delete test01 1560191837     #删除快照

五、kvm常用指令和文件夹

# virt-manage  调用图形管理界面

查看kvm支持的os版本:
# man virt-install 

# osinfo-query os | grep centos
# virsh -h                #查看命令帮助
# ls /etc/libvirt/qemu               #查看KVM的配置文件存放目录
networks  test01.xml (test01.xml是虚拟机系统实例的配置文件)
# virsh list --all               #查看虚拟机状态
 Id    名称                         状态
----------------------------------------------------
 2     test01                         running
# virsh shutdown test01              #关闭虚拟机
# virsh start test01                 #开启虚拟机
# virsh destroy test01               #强制关机
# virsh create /etc/libvirt/qemu/test01.xml             #通过配置文件启动虚拟机
# virsh suspend test01                 #挂起虚拟机
# virsh resume test01                  #从挂起状态恢复运行虚拟机
# virsh autostart test01               #设置虚拟机伴随宿主机自动启动

#虚拟机的删除与添加:
[root@localhost ~]# virsh dumpxml test01 > /etc/libvirt/qemu/test02.xml            #导出虚拟机配置
#删除虚拟机:
[root@localhost ~]# virsh  shutdown test01   
[root@localhost ~]# virsh  undefine test01
[root@localhost ~]# virsh list --all             #查看虚拟机是否被删除
 Id    名称                         状态
----------------------------------------------------

#通过备份的配置文件重新定义虚拟机:
[root@localhost ~]# cd /etc/libvirt/qemu/
[root@localhost qemu]# mv test02.xml test01.xml
[root@localhost qemu]# virsh define test01.xml

 #修改虚拟机配置(内存大小等)信息:
# vim /etc/libvirt/qemu/test01.xml
# virt-df -h test01         #在宿主机上查看虚拟机磁盘信息

克隆虚拟机:
# virt-clone -o test01 -n test02 -f /kvm/store/test02.qcow2
#将test01克隆为test02
[root@localhost qemu]# virsh list --all                 #查看现有虚拟机
 Id    名称                         状态
----------------------------------------------------
 -     test01                         关闭
 -     test02                         关闭

转化格式
qemu-img convert -c -O qcow2 test.raw test.qcow2

改变镜像文件大小(raw和qcow2都可以支持resize)
qemu-img resize test.raw +1GB

六、 使用iso制作qcow2镜像

https://www.cnblogs.com/elvi/p/8001298.htm 制作windos镜像

首选创建虚拟磁盘

#qemu-img create -f qcow2 CentOS-6.3-x86_64.qcow2 10G

其次从iso启动镜像

#virt-install  --name centos-7.4 --ram 1024 --cdrom=CentOS-7.4-x86_64-bin-DVD1.iso --disk CentOS-7.4-x86_64.qcow2,format=qcow2 --graphics vnc,listen=0.0.0.0 --noautoconsole --os-type=linux --os-variant=rhel6 --check all=off

报错

开始安装......
ERROR    Cannot access storage file '/root/CentOS-7.4-x86_64.qcow2' (as uid:107, gid:107): 权限不够
域安装失败,您可以运行下列命令重启您的域:
'virsh start virsh --connect qemu:///system start centos-7.4'

解决:

sed -i 's/#vnc_listen = "0.0.0.0"/vnc_listen = "0.0.0.0"/g' /etc/libvirt/qemu.conf
sed -i 's/#group = "root"/group = "root"/g' /etc/libvirt/qemu.conf
sed -i 's/#user = "root"/user = "root"/g' /etc/libvirt/qemu.conf
service libvirtd restart
#virt-install  --name Windows2008_x64 --ram 2048 --cdrom=win2008_x64fre_server_eval_zh-cn-GRMSXEVAL_CN_DVD.iso --disk Windows2008_x64.qcow2,format=qcow2 --graphics vnc,listen=0.0.0.0 --noautoconsole --os-type=windows --os-variant=win2k8 --check all=off

查看vnc端口

 #virsh vncdisplay centos-6.3

使用vnc去连接安装系统

最后关闭系统后就可以使用QCOW2的镜像了

七、创建kvm虚拟机的三种方式

1 使用 virt-install 命令

 virt-install \ 
--name=guest1-rhel5-64 \ --file=/var/lib/libvirt/images/guest1-rhel5-64.dsk \
--file-size=8 \
--nonsparse --graphics spice \ 
--vcpus=2 --ram=2048 \
--location=http://example1.com/installation_tree/RHEL5.6-Serverx86_64/os \ 
--network bridge=br0 \ 
--os-type=linux \ 
--os-variant=rhel5.4 

2 使用 virt-manager 工具

不做介绍

3 使用 qemu-img 和 qemu-kvm 命令行方式安装

(1)创建一个空的qcow2格式的镜像文件

qemu-img create -f qcow2 windows-master.qcow2 10G 

(2)启动一个虚机,将系统安装盘挂到 cdrom,安装操作系统

qemu-kvm  -hda  windows-master.qcow2  -m 512 -boot d  -cdrom /home/user/isos/en_winxp_pro_with_sp2.iso 

(3)现在你就拥有了一个带操作系统的镜像文件。你可以以它为模板创建新的镜像文件。使用模板的好处是,它会被设置为只读所以可以免于破坏。

qemu-img create -b windows-master.qcow2 -f  qcow2   windows-clone.qcow2 

(4)新的镜像文件上启动虚机了

https://www.sohu.com/a/312683006_120115703 问题解决方法

ln -s /usr/libexec/qemu-kvm /usr/sbin/  (可执行文件软连接)
qemu-kvm -hda windows-clone.qcow2 -m 400

4、virsh命令创建虚拟机

1、使用dd创建虚拟机硬盘

dd if=/dev/zero  of=centos.img  bs=2k  seek=4096k count=1
2、新建一个xml文件,里面存放虚拟机的配置信息,有内存、cpu、硬盘位置、光驱、VNC等配置
<domain type="kvm">
    <name>centos</name>  <!--虚拟机名称-->
    <memory unit="MiB">1024</memory>   <!--最大内存,单位k-->
    <currentMemory unit="MiB">1024</currentMemory>  <!--可用内存,单位k-->
    <vcpu>2</vcpu>   <!--//虚拟cpu个数-->
    <os>
        <type arch="x86_64" machine="pc">hvm</type>
        <boot dev="hd" /> <!-- 硬盘启动 -->
        <boot dev="cdrom" />     <!--//光盘启动-->
    </os>
    <features>
        <acpi />
        <apic />
        <pae />
    </features>
    <clock offset="localtime" />
    <on_poweroff>destroy</on_poweroff>
    <on_reboot>restart</on_reboot>
    <on_crash>destroy</on_crash>
    <devices>
        <emulator>/usr/libexec/qemu-kvm</emulator>
        <disk type="file" device="disk">
            <driver name="qemu" type="qcow2" />
            <source file="/var/lib/libvirt/images/test.qcow2" />        <!--目的镜像路径-->
            <target dev="hda" bus="ide" />
        </disk>
        <disk type="file" device="cdrom">
            <source file="/var/lib/libvirt/images/ubuntu.iso" />        <!--光盘镜像路径 -->
            <target dev="hdb" bus="ide" />
        </disk>
        <interface type="bridge">       <!--虚拟机网络连接方式-->
            <source bridge="br0" />      <!--当前主机网桥的名称-->
        </interface>
        <input type="mouse" bus="ps2" />
        <!--vnc方式登录,端口号自动分配,自动加1,可以通过virsh vncdisplay来查询-->
        <graphics type="vnc" port="-1" autoport="yes" listen="0.0.0.0" keymap="en-us" />
    </devices>
</domain>

3、创建虚拟机

virsh define centos.xml###将配置导入到虚拟机

virsh start centos#### 启动虚拟机