虚拟化--KVM

Posted 还行少年

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了虚拟化--KVM相关的知识,希望对你有一定的参考价值。

一、虚拟化概述

1.虚拟化的特性

1.1 优点:

  • 集中化管理,可以远程管理,维护
  • 提高硬件利用率,虚拟化解决了物力资源利用率低,削峰填谷
  • 动态调整机器/资源配置,虚拟化把系统的应用程序和服务硬件分离、提高了灵活性
  • 高可靠性,可部署额外的功能和方案,可提高透明负载均衡、迁移、恢复复制等应用环境

1.2 缺点:

  • 前期高额费用
  • 降低硬件利用率,特定场景-例如极度吃资源的应用不一定适合虚拟化
  • 更大的错误影响面,本地物理机down机会导致虚拟机均不可用,同时可能虚拟机中文件全部损坏
  • 实施配置复杂、管理复杂
  • 一定的限制性,虚拟化技术涉及各种限制,必须与支持/兼容虚拟化的服务器、应用程序及供应商结合使用
  • 安全性,虚拟化技术自身的安全隐患

2.kvm简介

  • Kernel-based Virtual Machine的简称,是一个开源的系统虚拟化模块,是RHEL 5.4推出的最新虚拟化技术,目前红帽只支持在64位的RHEL l5.4以上运行KVM,同时硬件需要支持VT技术,必须在64位bit环境中使用KVM。
  • KVM的虚拟化需要硬件支持(如Intel VT技术或者AMD V技术)。是基于硬件的完全虚拟化。而Xen早期则是基于软件模拟的Para-Virtualization,新版本则是基于硬件支持的完全虚拟化。命令查看是否支持VT,cat /proc/cpuinfo | grep ‘vmx’
  • KVM的前身是QEMU,08年被红帽收购并获得一项技术hypervisor,不过RedHat的KVM被认为是将成为未来Linux hypervisor的主流。

3.kvm作用

  • 提高物理服务器的资源利用率
  • 可以批量部署
  • 实现实时快照技术
  • 支持克隆技术
  • 可以实现虚拟机的离线迁移和动态迁移
  • 可以将资源动态调整

4.kvm虚拟化架构的三种模式

  • 客户模式(guestOS):VM中的OS为GuestOS,客户机在操作系统中运行的模式,客户机分为内核模式和用户模式
  • 用户模式:为用户提供虚拟机管理的用户空间工具以及代表用户执行I/O,Qemu工作在此模式下
    l- inux内核模式:模拟CPU、 内存,实现客户模式切换,处理从客户模式的推出,KVM即运行在此模式下

5.kvm工作流程

  • 用户模式的Qemu利用接口libkvm通过ioctl系统调用进入内核模式。KVM驱动为虚拟机创建虚拟CPU和虚拟内存
  • 然后执行VMLAU :NCH指令进入客户模式,装载Guest OS并运行。Guest OS运行过程中如果发生异常,则暂停Guest OS的运行并保存当前状态同时退出到内核模式来处理这些异常
  • 内核模式处理这些异常时如果不需要I/o则处理完成后重新进入客户模式。如果需要I/o则进入到用户模式,则由Qemu 来处理I/O, 处理完成后进入内核模式,再进入客户模式

6.虚拟化类型

  • 全虚拟化:
    将物理硬件资源全部通过软件的方式抽象化,最后进行调用使用的方法:使用hypervisor(VMM)软件,其原理是在底层硬件和服务器之间建立一个抽象层,而基于核心的虚拟机是面向Linux系统的开源产品hypervisor(VMM)可以捕捉CPU的指令,为指令访问硬件控制器和外设充当中介。
  • 半虚拟化:
    需要修改操作系统(以软件形式模拟物理硬件功能+物理硬件资源的加强型支持)
  • 直通:直接使用物理硬件资源(需要支持,还不完善)

二、实验

实验环境
centos7.6  8G 6核 300G 

1.查看cpu是否支持虚拟化

2.创建本地yum源

[root@localhost ~]# vim /etc/fstab  //永久挂载光盘
/dev/cdrom /mnt iso9660 defaults 0 0
[root@localhost ~]# mount -a     //使配置文件生效
mount: /dev/sr0 写保护,将以只读方式挂载
[root@localhost ~]# df -h        //查看是否挂载成功
文件系统        容量  已用  可用 已用% 挂载点
/dev/sda3       293G  5.2G  288G    2% /
devtmpfs        3.8G     0  3.8G    0% /dev
tmpfs           3.9G     0  3.9G    0% /dev/shm
tmpfs           3.9G   13M  3.8G    1% /run
tmpfs           3.9G     0  3.9G    0% /sys/fs/cgroup
/dev/sda1      1014M  174M  841M   18% /boot
tmpfs           781M  4.0K  781M    1% /run/user/42
tmpfs           781M   20K  781M    1% /run/user/0
/dev/sr0        4.3G  4.3G     0  100% /mnt
[root@localhost ~]# vim /etc/ssh/sshd_config  //将dns反向解析关掉,让客户端连接服务器更快
UseDNS no    //取消DNS注释,改为NO
[root@localhost ~]# cd /etc/yum.repos.d/
[root@localhost yum.repos.d]# mkdir bak
[root@localhost yum.repos.d]# mv CentOS-* bak
[root@localhost yum.repos.d]# ls
bak  epel.repo
[root@localhost yum.repos.d]# vim epel.repo  //创建本地yum源
[local]
name=kvm
baseurl=file:///mnt
gpgcheck=0
enabled=1

[root@localhost yum.repos.d]# mv epel.repo local.repo
[root@localhost yum.repos.d]# yum clean all && yum repolist  //清除缓存并加载新的yum源
已加载插件:fastestmirror, langpacks
正在清理软件源: local
Cleaning up list of fastest mirrors
Other repos take up 1.2 G of disk space (use --verbose for details)
已加载插件:fastestmirror, langpacks
Determining fastest mirrors
local                                                                                                            | 3.6 kB  00:00:00     
(1/2): local/group_gz                                                                                            | 166 kB  00:00:00     
(2/2): local/primary_db                                                                                          | 3.1 MB  00:00:00     
源标识                                                             源名称                                                          状态
local                                                              kvm                                                             4,021
repolist: 4,021
[root@localhost yum.repos.d]# 

3.下载kvm所需组件

[root@localhost yum.repos.d]# yum -y install qemu-kvm-tools.x86_64 qemu-kvm virt-install qemu-img bridge-utils libvirt virt-manager
已加载插件:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
软件包 10:qemu-kvm-tools-1.5.3-160.el7.x86_64 已安装并且是最新版本    //安装KVM调试工具,可不安装
软件包 10:qemu-kvm-1.5.3-160.el7.x86_64 已安装并且是最新版本  //安装KVM模块
软件包 virt-install-1.5.0-1.el7.noarch 已安装并且是最新版本   //构建虚拟机的命令行工具
软件包 10:qemu-img-1.5.3-160.el7.x86_64 已安装并且是最新版本  //qemu组件,创建磁盘、启动虚拟机等
软件包 bridge-utils-1.5-9.el7.x86_64 已安装并且是最新版本       //网络支持工具
软件包 libvirt-4.5.0-10.el7.x86_64 已安装并且是最新版本   //虚拟机管理工具
软件包 virt-manager-1.5.0-1.el7.noarch 已安装并且是最新版本   //图形界面管理虚拟机


[root@localhost yum.repos.d]# lsmod | grep kvm   //查看kvm模块是否安装
kvm_amd              2177212  0 
kvm                   586948  1 kvm_amd
irqbypass              13503  1 kvm
[root@localhost yum.repos.d]# 

4.设置开启启动界面的显示模式

[root@localhost ~]# ln -sf /lib/systemd/system/graphical.target /etc/systemd/system/default.target

5.设置KVM网络

KVM网络的两种模式:
①NAT:默认设置,数据包由NAT方式通过主机的接口进行传送,可以访问外网,但是无法从外部访问虚拟机网络
②网桥:这种模式允许虚拟机像一台独立的主机一样拥有网络,外部的机器可以直接访问到虚拟机内部,但需要网卡支持(一般有线网卡都支持)

5.1 使用bridge网桥模式部署

[root@localhost network-scripts]# cat ifcfg-ens33 
TYPE=Ethernet
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=ens33
UUID=56ae07f6-d0ca-40c4-9450-452d3dfae832
DEVICE=ens33
ONBOOT=yes
#IPADDR=192.168.30.7
#NETMASK=255.255.255.0
#GATEWAY=192.168.30.2
#DNS1=114.114.114.114
BRIDGE=br0
[root@localhost network-scripts]# cat ifcfg-br0
TYPE=Bridge
BOOTPROTO=static
DEFROUTE=yes
PEERDNS=yes
PEERROUTES=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=br0
DEVICE=br0
ONBOOT=yes
IPADDR=192.168.30.7
NETMASK=255.255.255.0
GATEWAY=192.168.30.2

5.2 重启网卡,查看

[root@localhost network-scripts]# systemctl restart network
[root@localhost network-scripts]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master br0 state UP group default qlen 1000
    link/ether 00:0c:29:59:84:37 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::20c:29ff:fe59:8437/64 scope link 
       valid_lft forever preferred_lft forever
3: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000
    link/ether 52:54:00:1f:75:63 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
4: virbr0-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast master virbr0 state DOWN group default qlen 1000
    link/ether 52:54:00:1f:75:63 brd ff:ff:ff:ff:ff:ff
5: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether 00:0c:29:59:84:37 brd ff:ff:ff:ff:ff:ff
    inet 192.168.30.7/24 brd 192.168.30.255 scope global br0
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fe59:8437/64 scope link 
       valid_lft forever preferred_lft forever

6.KVM的部署与管理

6.1 创建kvm管理目录

[root@localhost ~]# mkdir -p /data_kvm/iso   //创建KVM存储镜像的目录
[root@localhost ~]# mkdir -p /data_kvm/store   //创建存储池的目录

6.2 上传镜像到镜像池里

[root@localhost ~]# cd /data_kvm/iso/
[root@localhost iso]# ls
CentOS-7-x86_64-DVD-1810-7.6.iso
[root@localhost iso]# ll
总用量 4481024
-rw-r--r-- 1 root root 4588568576 818 22:13 CentOS-7-x86_64-DVD-1810-7.6.iso
[root@localhost iso]# 

6.3 创建存储池





创建存储卷

6.4 创建镜像池


6.5 创建虚拟机




选择最小化安装即可





ping不通,因为kvm没有开启路由转发功能

root@localhost ~]# echo "1" > /proc/sys/net/ipv4/ip_forward  //临时开启路由转发功能


正常访问

小结

虚拟化类型
全虚拟化:将物理硬件资源全部通过软件的方式抽象化,最后进行调用
半虚拟化:需要修改操作系统(以软件形式模拟物理硬件功能+物理硬件资源的加强型支持)
直通:直接使用物理硬件资源(需要支持,还不完善)

以上是关于虚拟化--KVM的主要内容,如果未能解决你的问题,请参考以下文章

虚拟化技术kvm

KVM虚拟化平台部署及管理

kvm基本原理

KVM虚拟化知识的一些笔记

KVM虚拟化管理平台的实现

虚拟化技术之KVM平台部署及简单应用