kvm教程

KVM

虚拟化

虚拟机的组成

  • 内核虚拟模块 ( KVM )

  • 系统设备仿真 ( QEMU )

  • 虚拟机管理程序 ( Libvirt )
  • 一个 XML 文件 ( 虚拟机配置声明文件)

    • 位置: /etc/libvirt/qemu
  • 一个磁盘映像文件 ( 虚拟机的硬盘 )

    • 位置: /var/lib/libvirt/images/

企业进化

  • 将任意一种形式的资源抽象成另一种形式的技术

  • 初期: cup资源不够用时,会产生蓝屏,< 当一个应用蓝屏后,其他应用也会他停止,那么就一台服务器运行一个应用,(简单的说,就是应用隔离)>

  • 进化一: 一台服务器不够用

  • 进化二: 购买服务器,< 由于一台服务器只能运行一个项目,成本高>

  • 成熟阶段: 利用KVM 虚拟化技术,既实现了应用隔离,也实现了资源利用率

虚拟化的几个重要概念

虚拟化架构


什么是KVM

  • KVM 即 Kernel-based Virtual Machine 基亍内核的虚拟机。

  • KVM,是一个开源 的系统虚拟化模块,自 Linux 2.6.20 之后集成在 Linux 的各个主要发行版本中。

  • 它使用 Linux 自身的调度器进行管理,所以相对亍 Xen,其核心源码很少。KVM 目前已成为学术界的主流 VMM(虚拟机监控器)之一。KVM 的虚拟化需要硬件支持(如* *Intel VT 技术戒者 AMD V 技术)。是基于硬件的完全虚拟化。而 Xen 早期则是基亍软件模拟的 Para-Virtualization。

KVM:

  • 是挃基亍 Linux 内核的虚拟机(Kernel-based Virtual Machine)。是第一个整合到 Linux内核的虚拟化技术。在 KVM 模型中,每一个虚拟机都是一个由 Linux 调度程序管理的标准进程,你可以在用户空间启劢客户机操作系统。
  • 一个普通的 Linux 进程有两种运行模式:内核和用户。 KVM 增加了第三种模式:客户模式(有自己的内核和用户模式)
  • KVM 支持 linux 以外的其它系统。比如:windows
QEMU:
  • 是一套由 Fabrice Bellard 所编写的以 GPL 许可证分发源码的模拟处理器,在 GNU/Linux平台上使用广泛。QEMU 具有高速度和跨平台的特性,QEMU 能模拟至接近真实电脑的速度。
  • QEMU 能模拟整个电脑系统,包括中央处理器及其他周边设备。
  • QEMU 和 vmware 一样都是支持仿真虚拟化,效率比较低。

配置 KVM 前期准备工作

KVM 实验拓扑图

环境准备

虚拟机规划

安装一台 Centos7 Linux 系统, 并开启虚拟化

注意:

**安装时不知道怎么点,百度也很难找到,怎么办? **

查看官方文档

查看是否支持虚拟化

grep -Em 1 "vmx|svm" /proc/cpuinfo

PS: svm是amdcpu,vmx是intel的cpu

装载模块

先查看是否存在模块

lsmod | grep kvm
kvm_amd              2177212  0 
kvm                   586948  1 kvm_amd
irqbypass              13503  1 kvm

如果没有模块,则执行以下操作

modprobe kvm       # 加载 kvm 模块
modprobe kvm-amd   # 加载 amd 支持模块

检验

ll /dev/kvm 
crw-------. 1 root root 10, 232 Jan 29  2022 /dev/kvm     # 出现以下结果表明 “可以运行虚拟机”

实战一: 创建虚拟机

命令行

安装程序包
yum -y install qemu-kvm      # Qemu-Kvm 命令行工具
创建软连接
- 查看命令路径
rpm -ql qemu-kvm         
/usr/libexec/qemu-kvm

- 创建软连接
ln -sv /usr/libexec/qemu-kvm /usr/bin/qemu-kvm      # 将 '/usr/libexec/qemu-kvm' 放入/usr/bin   形成快捷键

查看映像文件
ls /var/lib/libvirt/images/     # 映像文件路径
cirros-0.3.4-x86_64-disk.img        # 使用此镜像运行虚拟机
使用qemu-img info命令查看虚拟磁盘映像文件信息
qemu-img info /image/kvm/cirros-0.3.4-x86_64-disk.img 

image: /image/kvm/cirros-0.3.4-x86_64-disk.img
file format: qcow2
virtual size: 39M (41126400 bytes)
disk size: 13M
cluster_size: 65536
Format specific information:
    compat: 0.10
创建虚拟机
qemu-kvm -m 128 -smp 2 -name cirros -hda /image/kvm/cirros-0.3.4-x86_64-disk.img 
VNC server running on `::1:5900'

-m   :  指定虚拟内存 (MB)
-smp :  指定虚拟CPU个数
-name:  指定虚拟机名字
-hda :  指定硬盘
访问虚拟机 < 通过VNC>
复制一个终端
下载软件
yum -y install tigervnc

会产生一个 'vncviewer' 命令
在桌面界面打开
vncviewer:5900

sudo su -     # 进入root用户

图形化工具

安装相关软件

< libvirtd —— 虚拟化平台 >
yum -y install qemu-kvm libvirt virt-manager virt-install virt-viewer
libvirt         # 虚拟机管理工具
virt-manager    # 图形化管理工具
virt-install    # 命令行
virt-viewer     # 图形化远程连接虚拟机工具
- 查看命令路径
rpm -ql qemu-kvm         
/usr/libexec/qemu-kvm

- 创建软连接
ln -sv /usr/libexec/qemu-kvm /usr/bin/qemu-kvm      # 将 '/usr/libexec/qemu-kvm' 放入/usr/bin   形成快捷键

设置开机自启

systemctl start libvirtd
systemctl enable libvirtd   
# 查看是否开启成功
systemctl is-enabled libvirtd 
enabled

进入图形化界面操作,并启动一台虚拟机

virt-manager      # 打开图形化界面

查看运行的虚拟机

virsh list
Id    名称                         状态
----------------------------------------------------
5     centos7.0                      running

实战二: 配置 KVM 网络桥接功能

什么是桥接

  • **网桥介绍****: 我们经常所说的 Bridge 设备其实就是网桥设备,也就相当亍现在的二层交换机,用亍连接

  • 同一网段内的所有机器,所以我们的目的就是将网络设备 eth0 添加到 br0,此时 br0 就成为了所谓的交换机设备,我们物理机的 eth0 也是连接在上面的。

  • 添加桥接设备 br0:相当亍一个二层交换机

安装桥设备工具:

yum -y install bridge-utils-1.5-9.el7.x86_64

eth0绑到br0桥设备上:

cd /etc/sysconfig/network-scripts/
cp ifcfg-eth0 /opt/             # 备份 eth0


network-scripts]# vim ifcfg-eth0 #编辑配置文件为以下内容
……    # 删除
IPADDR=10.0.0.6
PREFIX=24
GATEWAY=10.0.0.2
DNS1=114.114.114.114
……
BRIDGE="br0" #在文件最后插入这一行
生成桥设备的配置文件:
network-scripts]# vim ifcfg-br0 #创建 ifcfg-br0 文件,并写入以下内容
DEVICE="br0"
NM_CONTROLLED="yes" 
ONBOOT="yes"
TYPE="Bridge"
BOOTPROTO=none
IPADDR=10.0.0.6
PREFIX=24
GATEWAY=10.0.0.2
DNS1=114.114.114.114
注:TYPE="Bridge" , B要大写

重启服务

systemctl  restart network

测试 br0:

ifconfig 
ping baidu.com

查看桥接信息

network-scripts]# brctl show
bridge name     bridge id               STP enabled     interfaces
br0             8000.000c2948cbaf       no              eth0
                                                     vnet1
virbr0          8000.5254000d84e6       yes             virbr0-nic
posted @ 2022-09-14 09:09  Docker-沫老师  阅读(688)  评论(0)    收藏  举报