OpenStack系列第一篇:深入了解虚拟化技术与环境搭建

发布于:2024-10-09 ⋅ 阅读:(12) ⋅ 点赞:(0)

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


前言

1. 虚拟化技术概述

  • VMX支持:说明VMX是CPU虚拟化的功能,只有物理机支持,虚拟机无法使用。
  • 软件虚拟化:介绍QEMU作为软件虚拟化选项,强调其性能不足,适合测试环境。

2. 企业常用虚拟化解决方案

vSphere

  • 每台物理机安装ESXi(基于Linux),过程简单,只需设置管理密码。
  • vCenter是管理平台,安装较复杂,需要配置数据库和网络设置,提供集中管理、监控和自动化功能。
  • 依赖安装:Windows环境下需安装vCenter Server,通常需要配置外部数据库(如PostgreSQL、Oracle)。

KVM

  • KVM集成在Linux内核中,需支持硬件虚拟化的CPU。
  • QEMU负责磁盘、声卡等设备的虚拟化,Libvirt提供命令行和API接口,简化管理。

3. KVM组件与安装

  • 关键软件包
    • qemu-kvm:主虚拟化组件。
    • libvirt-daemon:管理守护进程。
    • libvirt-client:命令行工具。
    • libvirt-daemon-driver-qemu:QEMU驱动。

4. 创建Ubuntu虚拟机

ubuntu 镜像官方下载

  • 创建虚拟硬盘
    sudo qemu-img create -f qcow2 /var/lib/libvirt/images/ubuntu-vm.qcow2 20G
    
  • 准备XML配置文件ubuntu-vm.xml):
    <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>
    
  • 定义并启动虚拟机
    virsh define ubuntu-vm.xml
    virsh start ubuntu-vm
    

5. virsh

virsh 是一个命令行工具,用于与libvirt(Linux虚拟化管理库)进行交互,管理虚拟机(VM)和相关资源。它提供了管理虚拟机生命周期、网络、存储和快照等功能。

  • 主要用途

管理虚拟机生命周期:启动、暂停、重启、关闭虚拟机。
虚拟机配置:修改虚拟机的CPU、内存、磁盘等资源配置。
管理快照:创建、删除、恢复虚拟机快照。
网络和存储管理:管理虚拟网络、虚拟交换机、虚拟磁盘等资源。
连接远程虚拟机主机:通过 libvirt 可以连接本地或远程的虚拟化主机。

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

  • 主要用途

创建虚拟磁盘镜像:支持多种磁盘格式(如 qcow2、raw、vmdk)。
转换镜像格式:在不同磁盘镜像格式之间转换(如 qcow2 转 raw)。
调整镜像大小:增加或减少虚拟磁盘镜像的大小。
校验镜像文件:检查镜像文件的完整性。
压缩磁盘镜像:减少磁盘镜像占用的空间。

  • 常见镜像类型
    常见镜像类型(虚拟化用)有 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 都与虚拟化相关,但它们的作用、管理对象和使用场景有明显的区别。以下是它们的主要区别:

1. 作用层次不同:

virsh:
    用于管理虚拟机的生命周期和相关的虚拟化资源,如虚拟网络、存储池等。
    它主要依赖于libvirt,支持多种虚拟化技术(如 KVM、Xen、QEMU、LXC 等)。
    你可以使用 virsh 来启动、暂停、重启虚拟机,管理虚拟网络和存储等。

qemu-img:
    专注于虚拟机磁盘镜像的管理,如创建、转换、扩展和压缩虚拟磁盘镜像。
    它直接与磁盘镜像文件(例如 .qcow2、.raw、.vmdk)打交道,而不涉及虚拟机的运行或资源管理。
    qemu-img 并不管理虚拟机的状态,而是管理虚拟机使用的磁盘文件。

2. 管理对象不同:

virsh:
    管理的是整个虚拟化环境,包括虚拟机(VM)、虚拟网络、存储池等资源。
    它可以启动、暂停、停止、删除虚拟机,并进行快照、迁移等操作。
    
qemu-img:
    管理的是虚拟机磁盘镜像文件。它可以创建新的磁盘镜像文件、调整镜像大小、检查镜像的完整性,以及在不同的镜像格式之间转换。

3. 依赖工具不同:

virsh:
    依赖于libvirt,这是一个虚拟化 API,可以用于控制 KVM、Xen、QEMU 等多个虚拟化平台。virsh 作为 libvirt 的命令行接口,提供管理虚拟机的高层次功能。
    virsh 管理的是运行中的虚拟机和虚拟化平台的资源。

qemu-img:
    依赖于QEMU,这是一个开源的仿真器和虚拟化工具。qemu-img 是一个专门用于操作磁盘镜像文件的工具,而不是虚拟机本身的管理工具。
    qemu-img 管理的是虚拟机磁盘镜像,它不需要虚拟机运行。

4. 使用场景不同:

virsh:
    适用于管理虚拟化环境中虚拟机的生命周期,比如启动、关闭、快照和迁移等。
    例如,你使用 virsh 启动一个虚拟机,监控其状态或修改虚拟机的配置。
    
qemu-img:
    适用于管理虚拟机使用的磁盘镜像文件。典型场景包括:创建虚拟机磁盘、转换磁盘格式、压缩镜像、扩展磁盘大小等。
    例如,你需要将一个虚拟机磁盘从 qcow2 格式转换为 raw 格式时,会使用 qemu-img。

5. 例子对比:

virsh 的例子:

启动一个虚拟机:

virsh start my-vm

停止一个虚拟机:

virsh shutdown my-vm

查看所有虚拟机状态:

virsh list --all
qemu-img 的例子:

创建一个 10GB 大小的 qcow2 格式虚拟磁盘:

qemu-img create -f qcow2 mydisk.qcow2 10G

将 qcow2 格式磁盘转换为 raw 格式:

qemu-img convert -f qcow2 -O raw mydisk.qcow2 mydisk.raw

扩展磁盘大小到 20GB:

qemu-img resize mydisk.qcow2 20G

总结:

virsh 是一个管理虚拟化平台和虚拟机生命周期的工具,主要用于管理虚拟机的运行状态、配置和资源分配。

qemu-img 是一个专门用于管理虚拟机磁盘镜像的工具,侧重于磁盘的创建、转换和调整。

它们的功能互补,virsh 处理虚拟机的高层管理,而 qemu-img 则负责底层的磁盘管理。