Loading

kvm

安装kvm

概述

KVM(Kernel-based Virtual Machine, 即内核级虚拟机) 是一个开源的系统虚拟化模块。它使用Linux自身的调度器进行管理,所以相对于Xen,其核心
源码很少。目前KVM已成为学术界的主流VMM之一,它包含一个为处理器提供底层虚拟化 可加载的核心模块kvm.ko(kvm-intel.ko 或 kvm-amd.ko)。kvm
还需要一个经过修改的QEMU 软件(qemu-kvm),作为虚拟机上层控制和界面。KVM的虚拟化需要硬件支持(如 Intel VT技术或者AMD V技术)。是基于硬件的
完全虚拟化。 KVM可以运行多个其本身运行未改动的镜像的虚拟机,例如Windows,Mac OS X ,每个虚拟机都有各自的虚拟硬件,比如网卡、硬盘核图形适配
器等。

KVM和QEMU的关系
QEMU是个独立的虚拟化解决方案,从这个角度它并不依赖KVM。而KVM是另一套虚拟化解决方案,不过因为这个方案实际上只实现了内核中对处理器(Intel VT)
, AMD SVM)虚拟化特性的支持,换言之,它缺乏设备虚拟化以及相应的用户空间管理虚拟机的工具,所以它借用了QEMU的代码并加以精简,连同KVM一起构成了
另一个独立的虚拟化解决方案:KVM+QEMU。

组件

qemu-kvm 主要的KVM程序包
python-virtinst 创建虚拟机所需要的命令行工具和程序库
virt-manager GUI虚拟机管理工具
virt-top 虚拟机统计命令
virt-viewer GUI连接程序,连接到已配置好的虚拟机
libvirt C语言工具包,提供libvirt服务
libvirt-client 虚拟客户机提供的C语言工具包
virt-install 基于libvirt服务的虚拟机创建命令
bridge-utils 创建和管理桥接设备的工具

安装kvm

1)检查cpu是否支持虚拟化

[root@kevin ~]# grep vmx /proc/cpuinfo

如果有vmx信息输出,就说明支持VT;如果没有任何的输出,说明你的cpu不支持,将无法使用KVM虚拟机

2)确保BIOS里开启虚拟化功能,即查看是否加载KVM模块

[root@kevin ~]# lsmod | grep kvm
kvm_intel             170086  0
kvm                   566340  1 kvm_intel
irqbypass              13503  1 kvm
=========================================================
如果没有加载,运行以下命令:
[root@kevin ~]# modprobe kvm
[root@kevin ~]# modprobe kvm-intel
[root@kevin ~]# lsmod | grep kvm
kvm_intel             170086  0
kvm                   566340  1 kvm_intel
irqbypass              13503  1 kvm
=========================================================

内核模块导出了一个名为/dev/kvm的设备,这个设备将虚拟机的的地址空间独立于内核或者任何应用程序的地址空间。

[root@kevin ~]# ll /dev/kvm
crw-rw-rw-. 1 root kvm 10, 232 1月  29 11:56 /dev/kvm

3)桥接网络
如果没有brctl命令(用来管理网桥的工具),则需要安装bridge-utils

[root@kevin ~]# yum -y install bridge-utils
[root@kevin ~]# systemctl restart network

配置KVM的网桥模式

[root@kevin ~]# cd /etc/sysconfig/network-scripts/
[root@openstack network-scripts]# cp ifcfg-eno1 ifcfg-br0
[root@openstack network-scripts]# cat ifcfg-br0
TYPE="Bridge"                                        //这一行修改为Bridge
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="none"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="no"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="br0"                                           //修改设备名称为br0
#UUID="fdbad04f-dae3-440e-8a8b-01d6a7bc9fe0"         //这一行注释
DEVICE="br0"                                         //修改设备为br0
ONBOOT="yes"
IPADDR="192.168.10.210"
PREFIX="24"
GATEWAY="192.168.10.1"
DNS1="8.8.8.8"
 
[root@openstack network-scripts]# cat ifcfg-eno1
TYPE="Ethernet"
BRIDGE=br0                                           //添加这一行
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="none"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="no"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="eno1"
UUID="fdbad04f-dae3-440e-8a8b-01d6a7bc9fe0"
DEVICE="eno1"
ONBOOT="yes"
#IPADDR="192.168.10.210"                          //注释掉这几行
#PREFIX="24"
#GATEWAY="192.168.10.1"
#DNS1="8.8.8.8"
 
 
 #########################示例配置文件#########################
 ##网卡
cd /etc/sysconfig/network-scripts/
cat  ifcfg-eth1
TYPE=Ethernet
#添加类型
BRIDGE=br0 
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=eth1
UUID=f7920a47-e843-4c67-a85a-03081cb69305
DEVICE=eth1
ONBOOT=yes
#IPADDR=10.20.200.4
#PREFIX=16

 
 
 ##网桥
#原来网卡的基础上修改
cat  ifcfg-br0 
TYPE="Bridge"    #类型
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME="br0"  ##name
#UUID=f7920a47-e843-4c67-a85a-03081cb69305   ##注释掉
DEVICE=br0   ##device
ONBOOT=yes
IPADDR=10.20.200.4
PREFIX=16

 
 
 #############################################################

重启网卡服务

[root@openstack network-scripts]# systemctl restart network

查看网卡

[root@openstack network-scripts]# brctl show
bridge name bridge id   STP enabled interfaces
br0   8000.0894ef518b22 no    eno1
virbr0    8000.52540095d7c2 yes   virbr0-nic

查看ip信息

[root@openstack network-scripts]# ifconfig |head -20

这里安装必要的非图形即可

4)安装libvirt及kvm
libvirt是管理虚拟机的API库,不仅支持KVM虚拟机,也可以管理Xen等方案下的虚拟机。

[root@kevin ~]#  yum -y install libcanberra-gtk2 qemu-kvm.x86_64 qemu-kvm-tools.x86_64  libvirt.x86_64 libvirt-cim.x86_64 libvirt-client.x86_64
libvirt-java.noarch  libvirt-python.x86_64 libiscsi-1.7.0-5.el6.x86_64  dbus-devel  virt-clone tunctl virt-manager libvirt libvirt-python python-virtinst

由于要用virt-manager图形化安装虚拟机,所以还需要安装X-window(这个在前面部署VNC环境里就已经安装了)

[root@kevin ~]# yum groupinstall "X Window System"

安装中文字符,解决界面乱码问题

[root@kevin ~]# yum install -y dejavu-lgc-sans-fonts
[root@kevin ~]# yum groupinstall -y "Fonts"

启用libvirt

[root@kevin ~]# systemctl enable libvirtd
[root@kevin ~]# systemctl start libvirtd

创建磁盘并查看

qemu-img create -f qcow2      kvm-test.qcow2  10G
qemu-img info  kvm-test.qcow2

修改kvm配置文件使程序使用root用户启动

vim  /etc/libvirt/qemu.conf

systemctl  restart libvirtd  ##启动服务
```bash
##创建命令
```bash
virt-install --name=study01 --memory=512,maxmemory=1024 --vcpus=1,maxvcpus=2 --os-type=linux  --location=/root/CentOS-7-x86_64-Minimal-1810.iso --disk path=/root/kvm-test.qcow2,size=10 --bridge=br0 --graphics=none --console=pty,target_type=serial  --extra-args="console=tty0 console=ttyS0"

执行后需要填写安装系统的选项
命令说明:

--name 指定虚拟机的名称
--memory 指定分配给虚拟机的内存资源大小
maxmemory 指定可调节的最大内存资源大小,因为KVM支持热调整虚拟机的资源
--vcpus 指定分配给虚拟机的CPU核心数量
maxvcpus 指定可调节的最大CPU核心数量
--os-type 指定虚拟机安装的操作系统类型
--os-variant 指定系统的发行版本
--location 指定ISO镜像文件所在的路径,支持使用网络资源路径,也就是说可以使用URL
--disk path 指定虚拟硬盘所存放的路径及名称,size 则是指定该硬盘的可用大小,单位是G
--bridge 指定使用哪一个桥接网卡,也就是说使用桥接的网络模式
--graphics 指定是否开启图形
--console 定义终端的属性,target_type 则是定义终端的类型
--extra-args 定义终端额外的参数

查看运行的虚拟机:

virsh list --all

常用命令url
https://www.cnblogs.com/kevingrace/p/5570504.html

vnc 配置
https://www.cnblogs.com/kevingrace/p/5821450.html

安装kvm
https://www.cnblogs.com/kevingrace/p/8377645.html
https://blog.csdn.net/dhRainer/article/details/83411555
https://blog.csdn.net/andy9900010/article/details/106108362

虚拟机迁移
https://blog.csdn.net/swimming_in_IT_/article/details/53914197

kvm 使用
Kvm虚拟机默认配置文件位置
/etc/libvirt/qemu

virsh list ##正在运行的虚拟机
virsh list --all ##所有
virsh start CentOS6.5 ##启动虚机 名字
virsh shutdown CentOS6.5 ##关闭
virsh destroy CentOS6.5 ##强制关闭
virsh undefine CentOS6.5 ##移除
virsh autostart CentOS6.5 ##设置开机自启动

#默认情况下virsh工具不能对linux虚拟机进行关机操作
#linux操作系统需要开启与启动acpid服务。在安装KVM linux虚拟机必须配置此服务。
# yum -y install acpid
# /etc/init.d/acpid start

通过配置文件启动虚拟机

virsh create /etc/libvirt/qemu/CentOS6.5.xml 

virsh suspend CentOS6.5 #挂起虚机
virsh resume CentOS6.5  #恢复虚机

重命名虚机
停止虚拟机
[root@kvm qemu]# virsh shutdown CentOS6u5

导出虚拟机的配置文件

[root@kvm qemu]# pwd
/etc/libvirt/qemu
[root@kvm qemu-img]# virsh dumpxml CentOS6u5 > test-CentOS6u5.xml

更改配置文件
[root@kvm qemu]# sed -i 's/CentOS6u5/test-CentOS6u5/g' test-CentOS6u5.xml
注 可以不用更改镜像名

移除原有的虚拟机
[root@kvm qemu]# virsh undefine CentOS6u5

加载新建的虚拟机
[root@kvm qemu]# virsh define test-CentOS6u5.xml

启动虚拟机
[root@kvm qemu]# virsh start test-CentOS6u5

虚拟机创建快照
https://blog.csdn.net/demonson/article/details/84140143

通过vnc 连接
https://www.cnblogs.com/linuxprobe/p/5724546.html
根据虚机生成xml 文件
virsh domxml-to-native qemu-argv –xml xxx.xml

https://blog.51cto.com/brighttime/2176928

posted @ 2020-10-10 16:16  Lust4Life  阅读(178)  评论(0)    收藏  举报