OpenStack系列第一篇:深入了解虚拟化技术
VMX支持:说明VMX是CPU虚拟化的功能,只有物理机支持,虚拟机无法使用。软件虚拟化:介绍QEMU作为软件虚拟化选项,强调其性能不足,适合测试环境。
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
前言
在 OpenStack 环境中,虚拟化技术是核心基础。无论是创建虚拟机,还是管理资源,了解虚拟化技术都是至关重要的。在这篇文章中,我们将深入探讨虚拟化的基本概念、企业常用的虚拟化方案,以及如何在 KVM 上创建和管理 Ubuntu 虚拟机。本文将使用简单易懂的语言,让初学者也能轻松上手。
1. 虚拟化技术概述
- VMX支持:
VMX 是 CPU 内置的一项虚拟化功能,它可以让一台物理机像“假装”成多个虚拟机,运行在同一台硬件上。需要注意的是,只有物理机支持 VMX 功能,虚拟机中不能再次开启 VMX。你可以理解为,虚拟机中的硬件不具备真正的虚拟化能力。 - 软件虚拟化:
QEMU 是一种常见的软件虚拟化工具,它不依赖物理硬件来实现虚拟化,而是通过纯软件模拟计算机硬件资源。虽然性能相对较低,但这种虚拟化方式特别适合测试和学习环境,因为你不需要物理硬件支持虚拟化功能。
2. 企业常用虚拟化解决方案
vSphere
- ESXi:每台物理机安装 ESXi(基于 Linux),整个过程非常简单。只需要完成管理密码的设置,就能开始使用虚拟化功能。
- vCenter:vCenter 是企业级的虚拟化管理平台,它的安装较为复杂,需要配置数据库和网络设置。vCenter 提供了集中化的管理、监控和自动化功能,可以帮助 IT 团队管理大量虚拟机和物理服务器。
- 依赖项:在 Windows 环境下,vCenter Server 的安装通常需要配置外部数据库,如 PostgreSQL 或 Oracle 数据库,这一步比较繁琐,但它提供了更好的管理能力。
KVM
- 集成内核:KVM 已经被集成在 Linux 内核中,只有支持硬件虚拟化的 CPU 才能使用 KVM。
- QEMU 与 Libvirt:QEMU 负责虚拟化设备(如磁盘、声卡等),Libvirt 提供了命令行工具和 API,简化了虚拟机的创建和管理。
3. KVM组件与安装
要在 KVM 上运行虚拟机,你需要安装几个核心组件:
qemu-kvm
:主虚拟化组件。libvirt-daemon
:管理守护进程。libvirt-client
:命令行工具。libvirt-daemon-driver-qemu
:QEMU驱动。
4. 创建Ubuntu虚拟机
你可以通过以下步骤,使用 KVM 创建一个 Ubuntu 虚拟机。
-
下载镜像:
你可以从 ubuntu 镜像官方下载 -
创建虚拟硬盘:
使用 qemu-img 命令创建一个 20GB 的虚拟硬盘文件:sudo qemu-img create -f qcow2 /var/lib/libvirt/images/ubuntu-vm.qcow2 20G
这条命令会创建一个虚拟硬盘文件,供虚拟机存储操作系统和数据。
-
准备XML配置文件(
ubuntu-vm.xml
):
创建一个虚拟机的 XML 配置文件 ubuntu-vm.xml,其中包含虚拟机的内存、CPU、磁盘和网络设置:<domain type='kvm'> <name>ubuntu-vm</name> <memory unit='KiB'>2048000</memory> <vcpu placement='static'>2</vcpu> <os> <type arch='x86_64' machine='pc-i440fx-2.9'>hvm</type> <boot dev='cdrom'/> </os> <devices> <disk type='file' device='disk'> <driver name='qemu' type='qcow2'/> <source file='/var/lib/libvirt/images/ubuntu-vm.qcow2'/> <target dev='vda' bus='virtio'/> </disk> <disk type='file' device='cdrom'> <driver name='qemu' type='raw'/> <source file='/path/to/ubuntu.iso'/> <target dev='hdc' bus='ide'/> </disk> <interface type='network'> <source network='default'/> <model type='virtio'/> </interface> </devices> </domain>
这段 XML 配置定义了虚拟机的资源分配和硬件模拟。
-
定义并启动虚拟机:
使用 virsh 命令将虚拟机定义并启动:virsh define ubuntu-vm.xml virsh start ubuntu-vm
5. virsh
virsh 是一个命令行工具,用于与libvirt(Linux虚拟化管理库)进行交互,管理虚拟机(VM)和相关资源。它提供了管理虚拟机生命周期、网络、存储和快照等功能。
- 基本命令:
- 查看虚拟机列表:
virsh list
- 查看所有虚拟机:
virsh list --all
- 启动虚拟机:
virsh start <虚拟机名称>
- 关闭虚拟机:
virsh shutdown <虚拟机名称>
- 强制关闭虚拟机(非必要不要这么做):
virsh destroy <虚拟机名称>
- 重新启动虚拟机:
virsh reboot <虚拟机名称>
- 查看虚拟机列表:
- 虚拟机管理:
- 定义虚拟机(基于XML文件):
virsh define <xml文件路径>
- 删除虚拟机:
virsh undefine <虚拟机名称>
- 克隆虚拟机:
virsh clone --original <原虚拟机名称> --name <新虚拟机名称>
- 定义虚拟机(基于XML文件):
- 查看和监控:
- 查看虚拟机状态:
virsh dominfo <虚拟机名称>
- 查看虚拟机的 CPU 使用情况:
virsh cpu-stats <虚拟机名称>
- 查看虚拟机的内存使用情况:
virsh dommemstat <虚拟机名称>
- 查看虚拟机状态:
- 网络和存储:
- 列出网络接口:
virsh net-list --all
- 列出存储池:
virsh pool-list --all
- 列出网络接口:
- 控制台访问:
- 连接到虚拟机控制台:
virsh console <虚拟机名称>
- 连接到虚拟机控制台:
- 导入和导出:
- 导出虚拟机:
virsh dumpxml <虚拟机名称> > <文件名>.xml
- 从XML文件导入虚拟机:
virsh define <文件名>.xml
- 导出虚拟机:
5. qemu-img
qemu-img 是一个与QEMU虚拟化相关的工具,主要用于创建、转换、修改和管理虚拟机磁盘镜像文件。它不直接管理虚拟机的运行状态,而是针对虚拟机的磁盘操作。
- 常见镜像类型:
常见镜像类型(虚拟化用)有 RAW 和 QCOW2。 - 基本命令:
- 创建指定格式和大小的虚拟磁盘文件:
qemu-img create -f <格式> <镜像文件名> <大小>
- 查看磁盘镜像文件的详细信息:
qemu-img info <镜像文件>
- 转换镜像文件为其他格式:
qemu-img convert -f <源格式> -O <目标格式> <源镜像> <目标镜像>
- 扩展现有镜像文件的大小:
qemu-img resize <镜像文件> <新大小>
- 校验镜像文件是否有错误:
qemu-img check <镜像文件>
- 压缩镜像以节省空间(仅限 qcow2 格式):
qemu-img convert -O qcow2 -c <源镜像> <目标镜像>
- 压缩镜像以节省空间(仅限 qcow2 格式):
qemu-img convert -O qcow2 -c <源镜像> <目标镜像>
- 将快照合并回基础镜像:
qemu-img commit <镜像文件>
- 删除镜像中未使用的部分(仅限 qcow2 格式):
qemu-img amend -f qcow2 --shrink <镜像文件>
- 导入外部 ISO 或 RAW 文件:
qemu-img dd if=<输入文件> of=<镜像文件>
- 创建指定格式和大小的虚拟磁盘文件:
6.virsh 和 qemu-img 区别
virsh 和 qemu-img 都与虚拟化相关,但它们的作用、管理对象和使用场景有明显的区别。以下是它们的主要区别:
工具 | 功能 | 依赖工具 | 管理对象 |
---|---|---|---|
virsh | 管理虚拟机的生命周期和资源 | libvirt | 虚拟机、网络等 |
qemu-img | 管理虚拟机的磁盘镜像 | QEMU | 磁盘镜像文件 |
使用场景
- virsh:
管理虚拟机的运行、暂停、重启、删除等操作。 - qemu-img:
创建和管理虚拟机磁盘镜像,负责磁盘文件的格式转换、大小调整和检查。
总结:
本文通过对虚拟化技术的概述,结合企业常用的 vSphere 和 KVM 方案,帮助我们更好地理解了虚拟化在 IT 环境中的重要性。我们还动手实践了如何通过 KVM 创建 Ubuntu 虚拟机,了解了 virsh 和 qemu-img 两个工具的使用。无论是基础的虚拟化概念,还是具体的操作步骤,这些内容都为后续深入学习 OpenStack 打下了重要的技术基础。如果你是刚接触虚拟化的初学者,本文的实践部分将为你提供有价值的参考,助力你的学习之路。
更多推荐
所有评论(0)