一.kvm简介
KVM(Kernel-based Virtual Machine)即基于内核的虚拟机,是一种开源的Linux内核虚拟化技术,它使得Linux内核本身变成了一个hypervisor(虚拟机管理程序)。以下从基本原理、特点、部署与使用、应用场景几个方面进行介绍:
### 基本原理
- 内核集成:KVM集成到Linux内核中,从Linux 2.6.20版本开始就成为了Linux内核的一部分。当启用KVM模块后,Linux内核就具备了虚拟化的能力,可以创建和管理虚拟机。
- 硬件辅助:KVM依赖于硬件虚拟化扩展,如Intel的VT-x和AMD的AMD-V。这些扩展提供了特殊的CPU指令和模式,使得虚拟机可以更高效地运行。当一个虚拟机运行时,CPU会在不同的模式之间切换,分别处理虚拟机的用户空间和内核空间操作。
- 用户空间工具:KVM本身只提供了虚拟化的核心功能,还需要用户空间的工具来创建、管理和监控虚拟机。常见的用户空间工具包括QEMU(Quick Emulator),它为KVM提供了设备模拟和I/O虚拟化的功能。
### 特点
- 开源免费:KVM是开源软件,遵循GPL(GNU通用公共许可证),用户可以自由使用、修改和分发,降低了使用成本。
- 高性能:由于KVM直接集成到Linux内核中,并且借助硬件虚拟化技术,它能够提供接近物理机的性能。虚拟机可以直接访问硬件资源,减少了中间层的开销。
- 兼容性好:KVM可以运行多种操作系统作为虚拟机的客户机,如Linux、Windows等。它支持广泛的硬件设备模拟,使得虚拟机可以像物理机一样使用各种设备。
- 易于管理:可以使用多种工具来管理KVM虚拟机,如virsh(命令行工具)、virt-manager(图形化管理工具)等,方便用户进行虚拟机的创建、启动、停止、删除等操作。
### 部署与使用
#### 环境准备
- 确保服务器的CPU支持硬件虚拟化扩展(VT-x或AMD-V),并在BIOS中启用该功能。
- 安装支持KVM的Linux发行版,如CentOS、Ubuntu等。
#### 安装KVM及相关工具
以CentOS为例,可以使用以下命令安装KVM及相关组件:
yum install qemu-kvm libvirt libvirt-python libguestfs-tools virt-install
#### 创建和管理虚拟机
- 创建虚拟机:可以使用virt-install命令创建虚拟机,例如创建一个基于CentOS 7的虚拟机:
virt-install --name centos7-vm --ram 2048 --vcpus 2 --disk path=/var/lib/libvirt/images/centos7-vm.qcow2,size=20 --cdrom /path/to/centos7.iso
- 管理虚拟机:使用virsh命令可以对虚拟机进行管理,如启动虚拟机:
virsh start centos7-vm
### 应用场景
- 服务器整合:将多个物理服务器上的应用程序整合到一个物理服务器上的多个虚拟机中,提高硬件资源的利用率,降低能源消耗和管理成本。
- 开发和测试环境:为开发人员和测试人员提供独立的、可重复使用的虚拟机环境,方便进行软件的开发、测试和调试,避免不同项目之间的相互影响。
- 云计算:作为云计算平台的底层虚拟化技术,KVM可以为云服务提供商提供高效、稳定的虚拟机资源,支持大规模的云计算服务。
- 如何在 CentOS 7 系统上安装和配置 KVM
在 CentOS 7 系统上安装和配置 KVM 可按以下步骤进行:
### 1. 检查硬件虚拟化支持
确保你的 CPU 支持硬件虚拟化(Intel VT-x 或 AMD-V),并在 BIOS 中启用该功能。可以通过以下命令检查:
egrep -c '(vmx|svm)' /proc/cpuinfo
如果输出结果大于 0,则表示 CPU 支持硬件虚拟化。
### 2. 安装 KVM 及相关工具
使用以下命令安装 KVM 及其相关依赖包:
yum install qemu-kvm libvirt libvirt-python libguestfs-tools virt-install
- qemu-kvm:KVM 的核心组件,提供硬件模拟和虚拟化功能。
- libvirt:用于管理虚拟机的工具包。
- libvirt-python:Python 绑定库,方便通过 Python 脚本管理虚拟机。
- libguestfs-tools:用于操作虚拟机磁盘镜像的工具。
- virt-install:用于创建虚拟机的命令行工具。
### 3. 启动并设置 libvirtd 服务
安装完成后,启动 libvirtd 服务并设置为开机自启:
systemctl start libvirtd
systemctl enable libvirtd
### 4. 验证 KVM 安装
可以使用以下命令验证 KVM 是否正确安装:
lsmod | grep kvm
如果输出包含 kvm_intel(Intel CPU)或 kvm_amd(AMD CPU),则表示 KVM 模块已成功加载。
### 5. 网络配置(可选)
KVM 默认使用 NAT 网络,如果你需要其他网络配置,如桥接网络,可以进行如下操作:
#### 创建桥接网络
安装 bridge-utils 工具:
yum install bridge-utils
编辑网络配置文件,例如将 eth0 配置为桥接模式:
# 编辑网卡配置文件
vi /etc/sysconfig/network-scripts/ifcfg-eth0
将内容修改为:
plaintext
DEVICE=eth0
TYPE=Ethernet
BOOTPROTO=none
ONBOOT=yes
BRIDGE=br0
创建桥接网络配置文件:
vi /etc/sysconfig/network-scripts/ifcfg-br0
添加以下内容:
plaintext
DEVICE=br0
TYPE=Bridge
BOOTPROTO=dhcp
ONBOOT=yes
重启网络服务:
systemctl restart network
### 6. 创建虚拟机
使用 virt-install 命令创建虚拟机,以下是一个创建基于 CentOS 7 ISO 镜像的虚拟机示例:
virt-install \
--name centos7-vm \
--ram 2048 \
--vcpus 2 \
--disk path=/var/lib/libvirt/images/centos7-vm.qcow2,size=20 \
--cdrom /path/to/centos7.iso \
--network bridge=br0 \
--graphics vnc,listen=0.0.0.0 \
--noautoconsole
--name:虚拟机的名称。
--ram:分配给虚拟机的内存大小(单位:MB)。
--vcpus:分配给虚拟机的 CPU 核心数。
--disk:指定虚拟机磁盘镜像的路径和大小。
--cdrom:指定用于安装操作系统的 ISO 镜像路径。
--network:指定网络连接方式,这里使用桥接网络 br0。
--graphics:配置图形显示方式,这里使用 VNC 远程连接。
--noautoconsole:不自动连接到虚拟机控制台。
### 7. 管理虚拟机
可以使用 virsh 命令管理虚拟机,例如:
- 启动虚拟机:
virsh start centos7-vm
停止虚拟机:
virsh shutdown centos7-vm
删除虚拟机:
virsh destroy centos7-vm
virsh undefine centos7-vm
### 8. 远程连接虚拟机
如果在创建虚拟机时使用了 VNC 图形显示方式,可以使用 VNC 客户端(如 TigerVNC、RealVNC 等)连接到虚拟机的 VNC 端口进行操作系统安装和配置。默认情况下,VNC 端口从 5900 开始递增,例如第一个虚拟机的 VNC 端口为 5900,第二个为 5901 等。