Série de soluções de virtualização KVM Introdução à ferramenta de gerenciamento KVM-libvirt

Como uma estrela em ascensão, o KVM domina o mercado de hipervisores de nuvem pública, como um grande número de fornecedores de nuvem baseados no desenvolvimento secundário do OpenStack. O veterano comercial VMware domina o mercado de hipervisores de nuvem privada e ainda é a primeira escolha para pequenas e médias empresas construir nuvens privadas, mas atualmente também é desafiado pelo Hyper-V.

A tecnologia de virtualização de hipervisores possui muitos métodos de implementação, como KVM, QEMU, VMware, XEN, HyperV, etc., e diferentes tecnologias também tornam os drivers e APIs que eles fornecem diversos e diferentes. Com tantos hipervisores, existe uma ferramenta que forneça uma interface API unificada para gerenciar esses hipervisores de maneira uniforme? Essa é a chave para os recursos da nuvem.

O cientista da computação David Wheeler tem um ditado famoso: "Qualquer problema na ciência da computação pode ser resolvido adicionando uma camada intermediária." Então, podemos melhorar a tecnologia subjacente do Hypervisor adicionando uma camada intermediária? Proteger as diferenças e fornecer uma interface API unificada para ferramentas de gerenciamento de nível superior. A resposta é sim.

Libvirt é uma dessas ferramentas.Libvirt fornece uma camada intermediária entre o hipervisor subjacente e as ferramentas de gerenciamento de nível superior. Como camada intermediária, Libvirt encapsula uniformemente diferentes máquinas virtuais na camada inferior e fornece uma API unificada para ferramentas de gerenciamento da camada superior, realizando assim o gerenciamento de máquinas virtuais de maneira conveniente. Sua arquitetura é mostrada na Figura 1.

Insira a descrição da imagem aqui

Figura 1. Arquitetura Libvirt

Para evitar ambiguidade na terminologia utilizada, aqui estão as definições de alguns conceitos específicos utilizados na documentação da libvirt:

conceito definição
Refere-se a uma máquina física, com o hipervisor e o domínio rodando no nó;
Hipervisor Refere-se à camada de software de virtualização, também chamada de monitor de máquina virtual, que virtualiza um nó para que ele possa executar várias máquinas virtuais;
Domínio É uma instância do sistema operacional executada no hipervisor, geralmente uma máquina virtual;

O relacionamento entre nós, hipervisores e domínios pode ser representado simplesmente na Figura 2.

Insira a descrição da imagem aqui

Figura 2. Relacionamento entre nós, hipervisores e domínios

1. Introdução ao Libvirt

1.1. Software de código aberto Libvirt

Libvirt é um software gratuito e de código aberto, e a licença usada é LGPL. Os programas de software que usam a biblioteca API libvirt para chamar não precisam escolher código aberto e estar em conformidade com a licença GPL.

Libvirt é uma coleção de software que é uma API, daemon e ferramenta de gerenciamento para gerenciar plataformas de virtualização.

Libvirt pode realizar gerenciamento de máquina virtual, rede virtualizada e gerenciamento de armazenamento.

1.2. Principais objetivos da libvirt

O principal objetivo do Libvirt é fornecer uma API unificada para vários hipervisores subjacentes, para que as ferramentas de gerenciamento da camada superior possam gerenciar diversas tecnologias de virtualização diferentes de uma única maneira.

1.3. Principais componentes do libvirt

Libvirt tem três componentes principais, incluindo uma biblioteca API de linguagem C estável de longo prazo, um processo daemon (libvirtd) e uma ferramenta de linha de comando padrão (virsh).

API Libvirt é uma biblioteca de software que fornece suporte de gerenciamento de máquina virtual para outras ferramentas de gerenciamento de máquina virtual (como virsh, virt-manager, etc.).

O daemon Libvirtd é responsável por gerenciar o domínio no nó. Todas as ferramentas de gerenciamento, como virsh e virt-manager, precisam contar com o daemon libvirtd para acessar indiretamente o hipervisor e os arquivos de configuração, portanto, esse daemon deve estar em execução. Se você fechar este process , então ferramentas de gerenciamento como virsh e virt-manager não estarão disponíveis.

Virsh é a ferramenta de linha de comando padrão para gerenciamento de máquinas virtuais no projeto de código aberto libvirt, que será apresentado em detalhes nos capítulos subsequentes.

1.4. Principais funções da libvirt

As principais funções do Libvirt incluem as cinco partes a seguir:

  1. Gerenciamento de domínio , várias operações de ciclo de vida de máquina virtual, como iniciar, parar, pausar, salvar, restaurar e migrar; operações hot-plug de vários tipos de dispositivos, incluindo discos, interfaces de rede, memória, CPUs, etc.
  2. Para conexões remotas , todas as funções do libvirt podem ser executadas na máquina que executa o daemon libvirtd, incluindo nós físicos remotos. libvirt suporta uma variedade de métodos de conexão de rede remota, como SSH, protocolos TCP, transmissão criptografada TLS, etc.
  3. Gerenciamento de armazenamento , qualquer nó executando o daemon libvirtd pode usar libvirt para gerenciar diferentes tipos de armazenamento, como criar diferentes tipos de imagens de arquivo (qcow2, vmdk, raw, qde, vmdk, etc.), montar compartilhamentos NFS e visualizar LVM existente Grupos de volumes, criação de novos grupos de volumes LVM e volumes lógicos, particionamento de dispositivos de disco, montagem de compartilhamentos iSCSI, uso de armazenamento remoto RDB compatível com sistemas Ceph, etc. Na libvirt, o gerenciamento de armazenamento também oferece suporte ao gerenciamento remoto.
  4. Gerenciamento de rede , qualquer nó executando o daemon libvirtd pode usar libvirt para gerenciar interfaces de rede físicas e lógicas, visualizar interfaces de rede existentes, configurar interfaces de rede, gerenciamento de ponte, gerenciamento de VLAN, ligação de porta, etc.
  5. Baseado em NAT virtual e redes de roteamento , qualquer nó executando o daemon libvirtd pode gerenciar e criar redes virtuais através do libvirt. A rede virtual libvirt implementa um roteador usando regras de firewall para fornecer às máquinas virtuais acesso transparente à rede host.

1.5. Vinculação da linguagem libvirt

Libvirt suporta vários pacotes de idiomas, incluindo C, C++, C#, Go, Java, OCaml, Perl, PHP, Python, Ruby, D-Bus e outras linguagens, o que é muito conveniente para desenvolvimento e integração.

1.6. Virtualização suportada por libvirt

Libvirt suporta uma variedade de tecnologias de virtualização, incluindo virtualização de plataformas como KVM, QEMU, Xen, VMware, VirtualBox e Hyper-V, bem como virtualização de contêineres como OpenVZ e LXC.

1.7. Sistemas operacionais suportados pela libvirt

Libvirt oferece suporte a uma variedade de sistemas operacionais, incluindo Linux, FreeBSD, Windows e OS-X.

2. Introdução às ferramentas de gerenciamento Libvirt

Libvirt tem sido amplamente utilizado na indústria. As ferramentas de gerenciamento baseadas na API Libvirt incluem ferramentas de linha de comando, ferramentas gráficas, ferramentas de gerenciamento da Web, ferramentas de plataforma de gerenciamento de nuvem, etc., conforme mostrado na Figura 1.

2.1. Ferramenta de linha de comando baseada na API libvirt

De acordo com o site oficial da libvirt, as estatísticas das ferramentas de linha de comando baseadas na API libvirt são mostradas na Tabela 1.

Tabela 1. Ferramentas de linha de comando baseadas na API libvirt

nome Definição
peixe convidado Guestfish é um shell interativo e uma ferramenta de linha de comando para inspecionar e modificar sistemas de arquivos de máquinas virtuais. Ele usa libvirt para localizar máquinas virtuais e seus discos associados.
virsh Virsh é uma ferramenta interativa de shell e script em lote que pode ser usada para gerenciamento de domínio, rede e armazenamento. Faz parte da distribuição principal da libvirt.
clone virt Permite a clonagem de imagens de disco e configurações de máquinas virtuais existentes para formar novas máquinas virtuais. Ele copia automaticamente os dados para a nova imagem de disco e atualiza o UUID, o endereço MAC e o nome na configuração.
virt-df Verifique a utilização de cada sistema de arquivos na máquina virtual. Esta ferramenta analisa o disco da máquina virtual e determina quanto espaço está sendo usado. Ela pode lidar com sistemas de arquivos Linux comuns e volumes LVM.
imagem virt Fornece um método para implantar dispositivos virtuais. Na libvirt, a configuração da máquina virtual (ou seja, domínio) é descrita em um formato XML portátil. Durante a implantação, a configuração da máquina virtual é convertida para o formato XML.
virt-install Ele fornece uma maneira conveniente e fácil de instalar máquinas virtuais, suportando configuração local através de CDs e imagens ISO, bem como configuração remota através de NFS, HTTP e FTP.
virt-top É uma ferramenta usada para exibir o status de execução e uso de recursos de máquinas virtuais, como CPU, memória, utilização de rede e disco, etc.
virt-o que Um script de shell usado para detectar tipos de plataformas de virtualização. Ele pode detectar tipos de plataformas como QEMU/KVM, VMware, Hyper-V, VirtualBox, OpenVZ/Virtuozzo, Xen, LXC, IBM PowerVM e Parallels.
etapa SystemTap é um método dinâmico para monitorar e rastrear as operações do kernel Linux em execução. A partir da versão 2.4, o aplicativo front-end stap pode coletar dados da máquina virtual por meio de libvirt.
vagabundo-libvirt Vagrant-Libvirt é um plugin do Vagrant que gerencia máquinas virtuais por meio do libvirt, uma ferramenta de linha de comando para desenvolvedores que pode implantar e reimplantar ambientes de máquinas virtuais com muita rapidez e facilidade.
virt-relâmpago Virt-Lightning usa libvirt, cloud-init e libguestfs para permitir que qualquer pessoa crie rapidamente novas máquinas virtuais.É muito parecido com o container CLI, mas com máquinas virtuais.

2.2. Ferramenta de migração baseada na API libvirt

De acordo com o site oficial da libvirt, as estatísticas das ferramentas de migração baseadas na API libvirt são mostradas na Tabela 2.

Tabela 2. Ferramentas de migração baseadas na API libvirt

nome Definição
virt-p2v A migração P2V é a migração de máquinas físicas para máquinas virtuais. Então a migração virt-p2v é a migração de uma máquina física para uma máquina virtual KVM.A ferramenta virt-p2v está incluída no libguestfs.
virt-v2v A migração V2V é a migração entre diferentes ambientes de virtualização. Em seguida, a migração virt-v2v é máquina virtual (Xen, VMware) -> máquina virtual KVM, e a ferramenta virt-p2v está incluída no libguestfs.
vmware2libvirt Parte do pacote virt-goodies, vmware2libvirt é um script Python para migrar imagens VMware para libvirt.

2.3. Ferramentas gráficas baseadas na API libvirt

De acordo com o site oficial da libvirt, as estatísticas das ferramentas gráficas baseadas na API libvirt são mostradas na Tabela 3.

Tabela 3. Ferramentas gráficas baseadas na API libvirt

nome Definição
gerenciador de virt É uma ferramenta geral de gerenciamento de desktop que pode gerenciar máquinas virtuais através de acesso local e remoto.É usado principalmente em cenários pessoais e de pequenos escritórios e pode gerenciar de 10 a 20 hosts e máquinas virtuais do host.
virt-v2v A migração V2V é a migração entre diferentes ambientes de virtualização. Em seguida, a migração virt-v2v é máquina virtual (Xen, VMware) -> máquina virtual KVM, e a ferramenta virt-p2v está incluída no libguestfs.
visualizador virtual É uma ferramenta de interface gráfica para exibição de máquinas virtuais, que usa o protocolo GTK-VNC ou SPICE-GTK e usa a API libvirt para consultar as informações do servidor VNC ou SPICE da máquina virtual. É frequentemente usado para substituir os visualizadores de clientes VNC tradicionais, porque o último geralmente não suporta criptografia SSL/TLS com autorização de autenticação x509, enquanto o virt-viewer suporta.
gerenciador qt-virt GUI Qt para criar e controlar uma VM, outra entidade virtual (também conhecida como rede, armazenamento, interface, segredo, filtro de rede). Visualizador LXC/SPICE/VNC integrado para acessar o console de texto associado a uma máquina virtual ou contêiner.
qt-remote-viewer 用于访问远程桌面或虚拟机的Qt VNC/SPICE查看器。

2.4. IaaS云计算管理平台工具

根据libvirt官方网站的显示,基于libvirt API的IaaS云计算管理平台工具统计如表4所示。

表4. 基于libvirt API的IaaS云计算管理平台工具

名称 释义
Cracow Cloud One CC1系统为私有云计算提供了完整的解决方案。带有管理模块和简单安装程序的直观Web访问界面使您可以轻松受益于私有云计算技术。
Eucalyptus Eucalyptus 是一个开源的,与AWS兼容的,本地部署的IaaS云软件平台。Eucalyptus使用libvirt 虚拟化 API直接与 Xen 和 KVM 管理程序交互。
Nimbus Nimbus是一个开源工具包,专注于为科学界提供IaaS功能,它使用libvirt与所有KVM和Xen虚拟机进行通信。
Snooze Snooze是一个开源的、可扩展的、自动化的、节能的虚拟机管理框架,主要用于私有云。Snooze使用libvirt API实现虚拟机的监控、实时迁移和生命周期管理。
OpenStack CC1系统为私有云计算提供了完整的解决方案。带有管理模块和简单安装程序的直观Web访问界面使您可以轻松受益于私有云计算技术。
Cracow Cloud One OpenStack是一个“云操作系统”,可用于公共云和私有云。它的各个部分负责计算、存储和网络资源,并使用仪表板与用户交互。计算部分使用libvirt来实现 虚拟机的监控、生命周期等的管理。
KubeVirt KubeVirt是个Kubernetes的一个虚拟机管理插件,使其在原本调度容器之余能够并行调度传统虚拟机。
Cherrypop Cherrypop是一个去中心化的云软件,节点自动检测其他节点并自动分配虚拟机和工作负载,宿主机也没有最低限制,非常适合在低端服务器架设云。
ZStack ZStack是一款开源IaaS软件,旨在通过使用API自动管理数据中心内的所有资源(计算、存储、网络等),从而符合软件定义数据中心的原则。ZStack 在管理方面的主要优势是可扩展性、性能和快速、用户友好的部署。

2.5. 软件库工具

根据libvirt官方网站的显示,基于libvirt API的软件库工具统计如表5所示。

表5. 基于libvirt API的库工具

名称 释义
libguestfs Libguestfs是用于访问和修改虚拟机磁盘镜像的一组工具集,它提供了访问和编辑虚拟机中的文件、脚本化修改虚拟机中的信息、监控磁盘使用和空闲的统计信息、P2V、V2V等丰富的功能。
libvirt-sandbox 一个库和命令行工具,用于简化虚拟化沙箱的创建,目前支持 KVM、QEMU 或 LXC 作为后端,与 systemd 的集成有助于对 apache 等系统服务进行沙箱化。
Ruby Libvirt Object bindings 允许使用简单的 ruby 对象来操作管理程序、访客、存储、网络等。它基于本地 ruby 绑定。

2.6. 监控工具

根据libvirt官方网站的显示,基于libvirt API的监控工具统计如表6所示。

表6. 基于libvirt API的监控工具

名称 释义
collectd Libvirt-plugin是collectd的一部分,并收集统计虚拟机操作系统信息。通过这种方式,可以搜集每个虚拟机的CPU、网络接口和块设备使用情况,而无需在虚拟机系统上安装collectd。
host sFlow Host sFlow是一个在KVM管理程序上运行的轻量级代理,它链接到libvirt库并导出所有虚拟机的标准化CPU、内存、网络和磁盘指标。
munin Guido Günther提供的插件允许使用Munin监控各种事物,例如网络和阻止 I/O。
nagios-virt Nagios-virt是一个配置工具,用于向Nagios添加对虚拟化域的监控。您可以使用此工具为Xen或QEMU/KVM虚拟机设置新的Nagios安装,或者与现有的Nagios 安装集成。
PCP PCP libvirt PMDA(插件)是PCP工具包的一部分,提供虚拟机管理程序和虚拟机信息以及完整的虚拟机性能指标集。它支持每个虚拟机的pCPU、vCPU、内存、块设备、网络接口和性能事件指标。

2.7. Web管理工具

根据libvirt官方网站的显示,基于libvirt API的Web管理工具统计如表7所示。

表7. 基于libvirt API的Web管理工具

名称 释义
AbiCloud AbiCloud是一个开源云平台管理器,允许在您的数据中心轻松部署私有云。AbiCloud的主要区别之一是用于管理基础架构的丰富的网络界面,您只需拖放 虚拟机即可部署新服务。
Kimchi Kimchi是一个基于HTML5的KVM管理工具。它旨在尽可能简单地使用KVM并创建您的第一个虚拟机。Kimchi通过libvirt管理KVM虚拟机,使用支持HTML5的浏览器通过Web访问管理界面。
oVirt oVirt是一个私有云平台软件,提供了中型规模集群主机管理能力,可做服务器虚拟化,也可桌面虚拟化。
VMmanager VMmanager是一种用于虚拟化管理的软件解决方案,可用于托管虚拟机和构建云。VMmanager不仅可以管理一台服务器,还可以管理大型虚拟机管理程序集群。它提供了许多功能,例如允许在集群节点之间进行负载平衡的实时迁移、监控 CPU、内存。
mist.io Mist.io是一个开源项目和服务,可以帮助您以统一的方式管理您的虚拟机,为您的所有基础架构(多个公共云提供商、基于OpenStack的公共/私有云、Docker 服务器、裸机服务器和现在的 KVM 管理程序)。
Ravada Ravada是用于管理虚拟桌面基础架构(VDI)的开源工具。它非常容易安装和使用。按照文档,您将在几分钟内准备好部署虚拟机。对用户的唯一要求是Web浏览器和轻量级远程查看器。

3. Libvirt API介绍

Libvirt的核心功能就是提供一套统一的API用来管理虚拟机,libvirt API主要划分为五个大类,如图3所示。

Insira a descrição da imagem aqui

Figura 3. Tipos de API libvirt

  • virConnectPtr
    indica o estabelecimento de uma conexão com o hipervisor. Ao chamar a função virConnectOpen, a conexão é estabelecida com o hipervisor. Após a conexão ser estabelecida, a máquina virtual do hipervisor pode ser gerenciada. A conexão com a API do hipervisor é um pré-requisito para o uso de todas as outras APIs.
  • virConnectPtr
    representa um domínio ativo ou definido (ou seja, existe como um arquivo de configuração permanente e armazenamento, mas não está atualmente em execução no nó). Para gerenciar um domínio, você deve primeiro obter o objeto de domínio virConnectPtr e, em seguida, operar o domínio. Depois de obter o objeto de domínio virConnectPtr, você pode realizar consultas de domínio, controle do ciclo de vida do domínio e outras operações.
  • virNetworkPtr
    representa uma rede ativa ou definida (ou seja, existe como um arquivo de configuração permanente e armazenamento, mas não está ativa no momento). A libvirt primeiro precisa criar um objeto virNetworkPtr antes de poder consultar ou controlar a rede virtual.
  • virStorageVolPtr
    representa um volume de armazenamento, geralmente um dispositivo de bloco de domínio, ou seja, um arquivo de imagem. O gerenciamento de volumes de armazenamento pela libvirt é principalmente o gerenciamento de arquivos de imagem de domínio.Os formatos desses arquivos de imagem incluem raw, qcow2, vmdk, qed, etc. Para gerenciar volumes de armazenamento com libvirt, primeiro você precisa criar o objeto de volume de armazenamento virStorageVolPtr e, em seguida, consultá-lo ou controlá-lo.
  • virStoragePoolPtr
    representa um conjunto de armazenamento, que é uma área lógica usada para alocar e armazenar volumes de armazenamento. O gerenciamento de pools de armazenamento da Libvirt inclui o gerenciamento de sistemas de arquivos básicos locais, sistemas de arquivos compartilhados em rede comum, sistemas de arquivos compartilhados iSCSI, partições LVM, etc. libvirt precisa ser baseado no objeto do conjunto de armazenamento virStoragePoolPtr para executar operações de consulta e controle.

Acho que você gosta

Origin blog.csdn.net/jianghu0755/article/details/129776841
Recomendado
Clasificación