提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

在 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 <新虚拟机名称>
      
  • 查看和监控
    • 查看虚拟机状态:
      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虚拟化相关的工具,主要用于创建、转换、修改和管理虚拟机磁盘镜像文件。它不直接管理虚拟机的运行状态,而是针对虚拟机的磁盘操作。

  • 常见镜像类型
    常见镜像类型(虚拟化用)有 RAWQCOW2
  • 基本命令
    • 创建指定格式和大小的虚拟磁盘文件:
      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 虚拟机,了解了 virshqemu-img 两个工具的使用。无论是基础的虚拟化概念,还是具体的操作步骤,这些内容都为后续深入学习 OpenStack 打下了重要的技术基础。如果你是刚接触虚拟化的初学者,本文的实践部分将为你提供有价值的参考,助力你的学习之路。

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐