Red Hat Training

A Red Hat training course is available for RHEL 8

Configurando e gerenciando a virtualização

Red Hat Enterprise Linux 8

Configurando seu host, criando e administrando máquinas virtuais, e compreendendo os recursos de virtualização no Red Hat Enterprise Linux 8

Resumo

Este documento descreve como gerenciar a virtualização no Red Hat Enterprise Linux 8 (RHEL 8). Além de informações gerais sobre virtualização, ele descreve como gerenciar a virtualização usando utilitários de linha de comando, bem como o uso do console web.

Tornando o código aberto mais inclusivo

A Red Hat tem o compromisso de substituir a linguagem problemática em nosso código, documentação e propriedades da web. Estamos começando com estes quatro termos: master, slave, blacklist e whitelist. Por causa da enormidade deste esforço, estas mudanças serão implementadas gradualmente ao longo de vários lançamentos futuros. Para mais detalhes, veja a mensagem de nosso CTO Chris Wright.

Fornecendo feedback sobre a documentação da Red Hat

Agradecemos sua contribuição em nossa documentação. Por favor, diga-nos como podemos melhorá-la. Para fazer isso:

  • Para comentários simples sobre passagens específicas:

    1. Certifique-se de que você está visualizando a documentação no formato Multi-page HTML. Além disso, certifique-se de ver o botão Feedback no canto superior direito do documento.
    2. Use o cursor do mouse para destacar a parte do texto que você deseja comentar.
    3. Clique no pop-up Add Feedback que aparece abaixo do texto destacado.
    4. Siga as instruções apresentadas.
  • Para enviar comentários mais complexos, crie um bilhete Bugzilla:

    1. Ir para o site da Bugzilla.
    2. Como Componente, use Documentation.
    3. Preencha o campo Description com sua sugestão de melhoria. Inclua um link para a(s) parte(s) relevante(s) da documentação.
    4. Clique em Submit Bug.

Capítulo 1. Virtualização no RHEL 8 - uma visão geral

Se você não está familiarizado com o conceito de virtualização ou sua implementação no Linux, as seguintes seções fornecem uma visão geral da virtualização no RHEL 8: seus conceitos básicos, vantagens, componentes e outras possíveis soluções de virtualização fornecidas pela Red Hat.

1.1. O que é a virtualização?

A RHEL 8 fornece a funcionalidade virtualization, que permite a uma máquina rodando RHEL 8 a host várias máquinas virtuais (VMs), também conhecidas como guests. As VMs utilizam o hardware físico e os recursos computacionais do host para executar um sistema operacional separado e virtualizado (guest OS) como um processo de espaço do usuário no sistema operacional do host.

Em outras palavras, a virtualização torna possível ter sistemas operacionais dentro de sistemas operacionais.

As VMs permitem que você teste com segurança configurações e recursos de software, execute software legado ou otimize a eficiência da carga de trabalho de seu hardware. Para mais informações sobre os benefícios, veja Seção 1.2, “Vantagens da virtualização”.

Para mais informações sobre o que é a virtualização, consulte o Portal do Cliente da Red Hat.

Para experimentar a virtualização no RHEL 8, ver Capítulo 2, Começando com a virtualização.

Nota

Além da virtualização RHEL 8, a Red Hat oferece uma série de soluções especializadas de virtualização, cada uma com um foco e características diferentes para o usuário. Para mais informações, veja Seção 1.5, “Soluções de virtualização da Red Hat”.

1.2. Vantagens da virtualização

O uso de máquinas virtuais (VMs) tem os seguintes benefícios em comparação com o uso de máquinas físicas:

  • Flexible and fine-grained allocation of resources

    Uma VM funciona em uma máquina host, que normalmente é física, e o hardware físico também pode ser designado para que o sistema operacional convidado possa ser utilizado. Entretanto, a alocação de recursos físicos para a VM é feita no nível de software, e é, portanto, muito flexível. Uma VM usa uma fração configurável da memória do host, CPUs, ou espaço de armazenamento, e essa configuração pode especificar pedidos de recursos muito finos.

    Por exemplo, o que o SO convidado vê como seu disco pode ser representado como um arquivo no sistema de arquivo hospedeiro, e o tamanho desse disco é menos restrito do que os tamanhos disponíveis para discos físicos.

  • Software-controlled configurations

    Toda a configuração de uma VM é salva como dados no host, e está sob controle de software. Portanto, uma VM pode ser facilmente criada, removida, clonada, migrada, operada remotamente ou conectada ao armazenamento remoto.

  • Separation from the host

    Um sistema operacional convidado é executado em um núcleo virtualizado, separado do sistema operacional hospedeiro. Isto significa que qualquer sistema operacional pode ser instalado em uma VM, e mesmo que o sistema operacional convidado se torne instável ou seja comprometido, o host não é afetado de forma alguma.

  • Space and cost efficiency

    Uma única máquina física pode hospedar um grande número de VMs. Portanto, ela evita a necessidade de várias máquinas físicas para realizar as mesmas tarefas, e assim diminui os requisitos de espaço, potência e manutenção associados ao hardware físico.

  • Software compatibility

    Como uma VM pode usar um SO diferente de seu host, a virtualização torna possível executar aplicações que não foram originalmente lançadas para seu SO host. Por exemplo, usando um SO convidado RHEL 6, você pode executar aplicativos liberados para o RHEL 6 em um sistema host RHEL 8.

    Nota

    Nem todos os sistemas operacionais são suportados como um sistema operacional convidado em um host RHEL 8. Para obter detalhes, consulte Seção 20.2, “Características recomendadas na virtualização RHEL 8”.

1.3. Componentes de máquinas virtuais e sua interação

A virtualização no RHEL 8 consiste nos seguintes componentes principais de software:

Hypervisor

A base da criação de máquinas virtuais (VMs) no RHEL 8 é o hypervisor, uma camada de software que controla o hardware e permite executar múltiplos sistemas operacionais em uma máquina host.

O hipervisor inclui o módulo Kernel-based Virtual Machine (KVM) e drivers do kernel de virtualização, tais como virtio e vfio. Estes componentes garantem que o kernel Linux na máquina host fornece recursos de virtualização para o software do espaço do usuário.

Em nível de espaço do usuário, o emulador QEMU simula uma plataforma de hardware virtualizada completa na qual o sistema operacional convidado pode rodar, e gerencia como os recursos são alocados no host e apresentados ao convidado.

Além disso, o pacote de software libvirt serve como uma camada de gerenciamento e comunicação, tornando a QEMU mais fácil de interagir, aplicando regras de segurança, e fornecendo uma série de ferramentas adicionais para configurar e executar VMs.

Configuração em XML

Um arquivo de configuração XML baseado em host (também conhecido como um arquivo domain XML ) determina todas as configurações e dispositivos em uma VM específica. A configuração inclui:

  • Metadados como o nome do VM, fuso horário, e outras informações sobre o VM.
  • Uma descrição dos dispositivos na VM, incluindo CPUs virtuais (vCPUS), dispositivos de armazenamento, dispositivos de entrada/saída, placas de interface de rede, e outros hardwares, reais e virtuais.
  • Configurações da VM, como a quantidade máxima de memória que ela pode usar, configurações de reinício e outras configurações sobre o comportamento da VM.

Para mais informações sobre o conteúdo de uma configuração XML, veja exemplo de configuração VM XML.

Interação dos componentes

Quando uma VM é iniciada, o hipervisor usa a configuração XML para criar uma instância da VM como um processo de espaço do usuário no host. O hipervisor também torna o processo da VM acessível às interfaces baseadas no host, tais como virsh, virt-install e guestfish utilitários, ou a GUI do console web.

Quando estas ferramentas de virtualização são utilizadas, a libvirt traduz suas contribuições em instruções para a QEMU. A QEMU comunica as instruções à KVM, o que garante que o núcleo atribua adequadamente os recursos necessários para executar as instruções. Como resultado, QEMU pode executar as mudanças de espaço do usuário correspondentes, tais como criar ou modificar uma VM, ou executar uma ação no sistema operacional convidado da VM.

Nota

Embora o QEMU seja um componente essencial da arquitetura, ele não se destina a ser usado diretamente nos sistemas RHEL 8, devido a preocupações com a segurança. Portanto, o uso dos comandos qemu-* não é suportado pela Red Hat, e é altamente recomendável interagir com QEMU usando libvirt.

Para mais informações sobre as interfaces baseadas em host, veja Seção 1.4, “Ferramentas e interfaces para o gerenciamento da virtualização”.

Figura 1.1. Arquitetura de virtualização RHEL 8

virt architecture

1.4. Ferramentas e interfaces para o gerenciamento da virtualização

Você pode gerenciar a virtualização no RHEL 8 usando a interface de linha de comando (CLI) ou várias interfaces gráficas de usuário (GUIs).

Interface de linha de comando

O CLI é o método mais poderoso de gerenciar a virtualização no RHEL 8. Os comandos proeminentes do CLI para gerenciamento de máquinas virtuais (VM) incluem:

  • virsh - Uma versátil linha de comando de virtualização utilitária e shell com uma grande variedade de propósitos, dependendo dos argumentos fornecidos. Por exemplo:

    • Iniciando e desligando uma VM - virsh start e virsh shutdown
    • Listagem das VMs disponíveis - virsh list
    • Criação de um VM a partir de um arquivo de configuração - virsh create
    • Entrando em uma concha de virtualização - virsh

    Para mais informações, consulte a página de manual virsh(1).

  • virt-install - Um utilitário CLI para a criação de novas VMs. Para mais informações, consulte a página de manual virt-install(1).
  • virt-xml - Um utilitário para editar a configuração de uma VM.
  • guestfish - Um utilitário para examinar e modificar as imagens de disco VM. Para mais informações, consulte a página de manual guestfish(1).

Interfaces gráficas

Você pode usar as seguintes GUIs para gerenciar a virtualização no RHEL 8:

  • O RHEL 8 web console, também conhecido como Cockpit, oferece uma interface gráfica de usuário remotamente acessível e fácil de usar para o gerenciamento de VMs e hosts de virtualização.

    Para instruções sobre o gerenciamento básico de virtualização com o console web, veja Capítulo 5, Gerenciamento de máquinas virtuais no console web.

  • O aplicativo Virtual Machine Manager (virt-manager) fornece uma GUI especializada para o gerenciamento de VMs e hospedeiros de virtualização.

    Importante

    Apesar de ainda ser apoiado no RHEL 8, virt-manager foi depreciado. O console web pretende se tornar seu substituto em um lançamento subseqüente. É, portanto, recomendado que você se familiarize com o console web para gerenciar a virtualização em uma GUI.

    Entretanto, no RHEL 8, algumas características podem ser acessíveis apenas a partir do site virt-manager ou da linha de comando. Para detalhes, veja Seção 5.4, “Diferenças entre os recursos de virtualização no Virtual Machine Manager e no console web”.

  • O aplicativo Gnome Boxes é uma interface gráfica leve para visualizar e acessar VMs e sistemas remotos. O Gnome Boxes é projetado principalmente para uso em sistemas desktop.

    Importante

    Gnome Boxes é fornecido como parte do ambiente desktop GNOME e é suportado no RHEL 8, mas a Red Hat recomenda que você use o console web para gerenciar a virtualização em uma GUI.

Recursos adicionais

1.5. Soluções de virtualização da Red Hat

Os seguintes produtos da Red Hat são construídos sobre os recursos de virtualização RHEL 8 e expandem os recursos de virtualização KVM disponíveis no RHEL 8. Além disso, muitas limitações da virtualização RHEL 8 não se aplicam a esses produtos:

Virtualização da Red Hat (RHV)

A RHV foi projetada para escalabilidade e desempenho de classe empresarial, e permite o gerenciamento de toda sua infra-estrutura virtual, incluindo hosts, máquinas virtuais, redes, armazenamento e usuários a partir de uma interface gráfica centralizada.

A Virtualização da Red Hat pode ser utilizada por empresas que executam grandes implantações ou aplicações de missão crítica. Exemplos de grandes implantações adequadas para a Virtualização da Red Hat incluem bancos de dados, plataformas comerciais e sistemas de mensagens que devem funcionar continuamente sem nenhum tempo de inatividade.

Para mais informações sobre a Virtualização da Red Hat, consulte o Portal do Cliente da Red Hat ou o conjunto de documentação sobre a Virtualização da Red Hat.

Para baixar uma versão de avaliação de 60 dias da Red Hat Virtualization totalmente suportada, veja https://access.redhat.com/products/red-hat-virtualization/evaluation

Plataforma Red Hat OpenStack (RHOSP)

A Plataforma OpenStack da Red Hat oferece uma base integrada para criar, implantar e escalar uma nuvem OpenStack segura e confiável, pública ou privada.

Para maiores informações sobre a Plataforma OpenStack da Red Hat, veja o Portal do Cliente da Red Hat ou o conjunto de documentação da Plataforma OpenStack da Red Hat.

Nota

Para detalhes sobre recursos de virtualização não suportados na RHEL, mas suportados na RHV ou RHOSP, veja Seção 20.3, “Características não suportadas na virtualização RHEL 8”.

Além disso, produtos específicos da Red Hat fornecem operating-system-level virtualization, também conhecidos como containerization:

  • Os contêineres são instâncias isoladas do sistema operacional hospedeiro e operam em cima de um núcleo de sistema operacional existente. Para mais informações sobre os contêineres, consulte o Portal do Cliente da Red Hat.
  • Os recipientes não têm a versatilidade da virtualização da KVM, mas são mais leves e flexíveis de manusear. Para uma comparação mais detalhada, veja a Introdução aos Containers Linux.

Capítulo 2. Começando com a virtualização

Para começar a utilizar a virtualização no RHEL 8, siga os passos abaixo. O método padrão para isso é usar a interface de linha de comando (CLI), mas para conveniência do usuário, alguns dos passos podem ser completados na GUI do console web.

Nota

O console web atualmente fornece apenas um subconjunto de funções de gerenciamento de VM, portanto, o uso da linha de comando é recomendado para o uso avançado de virtualização no RHEL 8.

2.1. Possibilitando a virtualização

Para utilizar a virtualização no RHEL 8, você deve habilitar o módulo de virtualização, instalar pacotes de virtualização e garantir que seu sistema esteja configurado para hospedar máquinas virtuais (VMs).

Pré-requisitos

  • O Red Hat Enterprise Linux 8 está instalado e registrado em sua máquina host.
  • Seu sistema atende aos seguintes requisitos de hardware para funcionar como um host de virtualização:

    • A arquitetura de sua máquina host suporta a virtualização da KVM.
    • Os seguintes recursos mínimos do sistema estão disponíveis:

      • 6 GB de espaço livre em disco para o host, mais outros 6 GB para cada VM pretendido.
      • 2 GB de RAM para o host, mais outros 2 GB para cada VM pretendido.

Procedimento

  1. Instale os pacotes no módulo de virtualização RHEL 8:

    # yum module install virt
  2. Instale os pacotes virt-install e virt-viewer:

    # yum install virt-install virt-viewer
  3. Iniciar o serviço libvirtd.

    # systemctl start libvirtd
  4. Verifique se seu sistema está preparado para ser um host de virtualização:

    # virt-host-validate
    [...]
    QEMU: Checking for device assignment IOMMU support         : PASS
    QEMU: Checking if IOMMU is enabled by kernel               : WARN (IOMMU appears to be disabled in kernel. Add intel_iommu=on to kernel cmdline arguments)
    LXC: Checking for Linux >= 2.6.26                          : PASS
    [...]
    LXC: Checking for cgroup 'blkio' controller mount-point    : PASS
    LXC: Checking if device /sys/fs/fuse/connections exists    : FAIL (Load the 'fuse' module to enable /proc/ overrides)
  5. Se todos os cheques virt-host-validate retornarem um valor PASS, seu sistema está preparado para a criação de VMs.

    Se algum dos cheques devolver um valor FAIL, siga as instruções exibidas para corrigir o problema.

    Se algum dos cheques retornar um valor WARN, considere seguir as instruções exibidas para melhorar as capacidades de virtualização.

Informações adicionais

  • Note que se a virtualização não for suportada por sua CPU hospedeira, virt-host-validate gera a seguinte saída:

    QEMU: Verificação da virtualização do hardware: FAIL (Somente CPUs emuladas estão disponíveis, o desempenho será significativamente limitado)

    Entretanto, a tentativa de criar VMs em um sistema hospedeiro desse tipo falhará, ao invés de ter problemas de desempenho.

2.2. Criando máquinas virtuais

Para criar uma máquina virtual (VM) no RHEL 8, use a interface de linha de comando ou o console web RHEL 8.

Pré-requisitos

  • A virtualização é instalada e ativada em seu sistema.
  • Você tem quantidade suficiente de recursos do sistema para alocar para suas VMs, tais como espaço em disco, RAM ou CPUs. Os valores recomendados podem variar significativamente dependendo das tarefas pretendidas e da carga de trabalho das VMs.

    Atenção

    A instalação a partir de um CD-ROM ou DVD-ROM host não é possível no RHEL 8. Se você selecionar um CD-ROM ou DVD-ROM como fonte de instalação ao usar qualquer método de instalação VM disponível no RHEL 8, a instalação falhará. Para mais informações, consulte a Base de Conhecimento da Red Hat.

2.2.1. Criação de máquinas virtuais usando a interface de linha de comando

Para criar uma máquina virtual (VM) em seu host RHEL 8 usando o utilitário virt-install, siga as instruções abaixo.

Pré-requisitos

  • A virtualização é ativada em seu sistema hospedeiro.
  • Uma fonte de instalação de sistema operacional (SO) está disponível localmente ou em uma rede. Esta pode ser uma das seguintes:

    • Uma imagem ISO de um meio de instalação
    • Uma imagem em disco de uma instalação de VM existente
  • Opcional: Um arquivo Kickstart pode ser fornecido para uma configuração mais rápida e fácil da instalação.

Procedimento

Para criar uma VM e iniciar sua instalação do SO, use o comando virt-install, juntamente com os seguintes argumentos obrigatórios:

  • O nome da nova máquina
  • A quantidade de memória alocada
  • O número de CPUs virtuais alocadas (vCPUs)
  • O tipo e o tamanho do armazenamento alocado
  • O tipo e a localização da fonte de instalação do sistema operacional

Com base no método de instalação escolhido, as opções e valores necessários podem variar. Veja abaixo os exemplos:

  • O seguinte cria uma VM chamada demo-guest1 que instala o sistema operacional Windows 10 a partir de uma imagem ISO armazenada localmente no arquivo /home/username/Downloads/Win10install.iso. Esta VM também é alocada com 2048 MiB de RAM e 2 vCPUs, e um disco virtual de 80 GiB qcow2 é configurado automaticamente para a VM.

    # virt-install --name demo-guest1 --memory 2048 --vcpus 2 --disk size=80 --os-variant win10 --cdrom /home/username/Downloads/Win10install.iso
  • A seguir, cria-se uma VM chamada demo-guest2 que usa a imagem /home/username/Downloads/rhel8.iso para executar um SO RHEL 8 a partir de um CD ao vivo. Nenhum espaço em disco é atribuído a esta VM, portanto, as alterações feitas durante a sessão não serão preservadas. Além disso, a VM é alocada com 4096 MiB de RAM e 4 vCPUs.

    # virt-install --name demo-guest2 --memory 4096 --vcpus 4 --disk none --livecd --os-variant rhel8.0 --cdrom /home/username/Downloads/rhel8.iso
  • O seguinte cria uma RHEL 8 VM chamada demo-guest3 que se conecta a uma imagem de disco existente, /home/username/backup/disk.qcow2. Isto é semelhante a mover fisicamente um disco rígido entre máquinas, portanto o sistema operacional e os dados disponíveis para o Demo-guest3 são determinados pela forma como a imagem foi tratada anteriormente. Além disso, esta VM é alocada com 2048 MiB de RAM e 2 vCPUs.

    # virt-install --name demo-guest3 --memory 2048 --vcpus 2 --os-variant rhel8.0 --import --disk /home/username/backup/disk.qcow2

    Note que a opção --os-variant é altamente recomendada ao importar uma imagem de disco. Se ela não for fornecida, o desempenho do VM criado será afetado negativamente.

  • O seguinte cria uma VM chamada demo-guest4 que se instala a partir do http://example.com/OS-install URL. Para que a instalação comece com sucesso, a URL deve conter uma árvore de instalação do sistema operacional em funcionamento. Além disso, o sistema operacional é configurado automaticamente usando o arquivo kickstart /home/username/ks.cfg. Esta VM também é alocada com 2048 MiB de RAM, 2 vCPUs, e um disco virtual de 160 GiB qcow2.

    # virt-install --name demo-guest4 --memory 2048 --vcpus 2 --disk size=160 --os-variant rhel8.0 --location http://example.com/OS-install --initrd-inject /home/username/ks.cfg --extra-args="ks=file:/ks.cfg console=tty0 console=ttyS0,115200n8"
  • A seguir, cria-se uma VM chamada demo-guest5 que instala a partir de um arquivo de imagem RHEL8.iso em modo somente texto, sem gráficos. Ela conecta o console convidado ao console serial. A VM tem 16384 MiB de memória, 16 vCPUs, e 280 GiB de disco. Este tipo de instalação é útil quando se conecta a um host através de um link de rede lento.

    # virt-install --name demo-guest5 --memory 16384 --vcpus 16 --disk size=280 --os-variant rhel8.0 --location RHEL8.iso --graphics none --extra-args='console=ttyS0'
  • O seguinte cria uma VM chamada demo-guest6, que tem a mesma configuração do demo-guest5 , mas reside no host remoto 10.0.0.1.

    # virt-install --connect qemu ssh://root@10.0.0.1/system --name demo-guest6 --memory 16384 --vcpus 16 --disk size=280 --os-variant rhel8.0 --location RHEL8.iso --graphics none --extra-args='console=ttyS0'

Se a VM for criada com sucesso, uma janela do visualizador de vírus se abre com um console gráfico da VM e inicia a instalação do sistema operacional convidado.

Solução de problemas

  • Se virt-install falhar com um erro cannot find default network:

    1. Certifique-se de que o pacote libvirt-daemon-config-network esteja instalado:

      # yum info libvirt-daemon-config-network
      Installed Packages
      Name         : libvirt-daemon-config-network
      [...]
    2. Verifique se a rede padrão libvirt está ativa e configurada para iniciar automaticamente:

      # virsh net-list --all
       Name      State    Autostart   Persistent
      --------------------------------------------
       default   active   yes         yes
    3. Se não for, ative a rede padrão e configure-a para inicialização automática:

      # virsh net-autostart default
      Network default marked as autostarted
      
      # virsh net-start default
      Network default started
      1. Se a ativação da rede padrão falhar com o seguinte erro, o pacote libvirt-daemon-config-network não foi instalado corretamente.

        error: failed to get network 'default'
        error: Network not found: no network with matching name 'default'

        Para corrigir isso, reinstale libvirt-daemon-config-network.

        # yum reinstall libvirt-daemon-config-network
      2. Se a ativação da rede padrão falhar com um erro semelhante ao seguinte, ocorreu um conflito entre a subrede padrão da rede e uma interface existente no host.

        error: Failed to start network default
        error: internal error: Network is already in use by interface ens2

        Para corrigir isso, use o comando virsh net-edit default e altere os valores de 192.168.122.* na configuração para uma sub-rede que ainda não esteja em uso no host.

Recursos adicionais

  • Várias outras opções podem ser especificadas para virt-install para configurar ainda mais a VM e sua instalação do sistema operacional. Para detalhes, consulte a página de manual virt-install.
  • Se você já tem uma VM funcional, você pode cloná-la para criar rapidamente uma nova VM com a mesma configuração e dados. Para maiores detalhes, veja Capítulo 8, Clonagem de máquinas virtuais.

2.2.2. Criação de máquinas virtuais e instalação de sistemas operacionais convidados usando o console web

Para gerenciar máquinas virtuais (VMs) em uma GUI em um host RHEL 8, use o console web. As seções seguintes fornecem informações sobre como usar o console web RHEL 8 para criar máquinas virtuais e instalar sistemas operacionais convidados nelas.

2.2.2.1. Criação de máquinas virtuais utilizando o console web

Para criar uma máquina virtual (VM) na máquina host à qual o console web está conectado, siga as instruções abaixo.

Pré-requisitos

  • Para usar o console web para gerenciar as VMs, instale o plug-in de VM do console web.
  • Você tem quantidade suficiente de recursos do sistema para alocar para suas VMs, tais como espaço em disco, RAM ou CPUs. Os valores recomendados podem variar significativamente dependendo das tarefas pretendidas e da carga de trabalho das VMs.

Procedimento

  1. Na interface das máquinas virtuais do console web, clique Create VM.

    Aparece o diálogo Criar Nova Máquina Virtual.

    cockpit create new vm
  2. Digite a configuração básica da VM que você deseja criar.

    • Name - O nome do VM.
    • Installation Type - A instalação pode usar um meio de instalação local, uma URL, uma inicialização de rede PXE, ou baixar um SO de um conjunto limitado de sistemas operacionais.
    • Operating System - O sistema operacional da VM. Note que a Red Hat fornece suporte apenas para um conjunto limitado de sistemas operacionais convidados.
    • Storage - O tipo de armazenamento com o qual configurar a VM.
    • Size - A quantidade de espaço de armazenamento com o qual se pode configurar a VM.
    • Memory - A quantidade de memória com a qual se pode configurar o VM.
    • Run unattended installation - Se a instalação deve ou não ser executada sem supervisão.
    • Immediately Start VM - Se a VM começará ou não imediatamente após a sua criação.
  3. Clique em Criar.

    O VM é criado. Se a caixa de seleção Immediately Start VM estiver selecionada, a VM iniciará imediatamente e começará a instalação do sistema operacional convidado.

Recursos adicionais

2.2.2.2. Criação de máquinas virtuais através da importação de imagens de disco usando o console web

Para criar uma máquina virtual (VM), importando uma imagem em disco de uma instalação existente de uma VM, siga as instruções abaixo.

Pré-requisitos

  • Para usar o console web para gerenciar as VMs, instale o plug-in de VM do console web.
  • Você tem quantidade suficiente de recursos do sistema para alocar para suas VMs, tais como espaço em disco, RAM ou CPUs. Os valores recomendados podem variar significativamente dependendo das tarefas pretendidas e da carga de trabalho das VMs.
  • Certifique-se de ter uma imagem em disco de uma instalação de VM existente

Procedimento

  1. Na interface das máquinas virtuais do console web, clique Import VM.

    Aparece o diálogo Importar uma máquina virtual.

    cockpit import vm
  2. Digite a configuração básica da VM que você deseja criar.

    • Name - O nome do VM.
    • Connection - O tipo de conexão, sistema ou sessão de libvirt.
    • Installation Source - A imagem em disco existente de uma VM no sistema host.
    • Operating System - O sistema operacional da VM. Note que a Red Hat fornece suporte apenas para um conjunto limitado de sistemas operacionais convidados.
    • Memory - A quantidade de memória com a qual se pode configurar o VM.
    • Immediately Start VM - Se a VM começará ou não imediatamente após a sua criação.
  3. Clique em Importar.

2.2.2.3. Instalação de sistemas operacionais convidados usando o console web

A primeira vez que uma máquina virtual (VM) é carregada, você deve instalar um sistema operacional na VM.

Nota

Se a caixa de seleção Immediately Start VM no diálogo Criar Nova Máquina Virtual for marcada, a rotina de instalação do sistema operacional será iniciada automaticamente quando a VM for criada.

Pré-requisitos

Procedimento

  1. Na interface das Máquinas Virtuais, clique na linha da VM na qual você deseja instalar um sistema operacional convidado.

    A linha se expande para revelar o painel Overview com informações básicas sobre a VM selecionada e controles para instalação e exclusão da VM.

    cockpit UEFI overview
  2. Optional: Alterar o firmware.

    Nota

    Você pode alterar o firmware somente se não tiver selecionado a caixa de seleção Immediately Start VM no diálogo Create New Virtual Machine, e o sistema operacional ainda não tiver sido instalado na VM.

    1. Clique no firmware destacado.

      cockpit vm overview
    2. Na janela Change Firmware, selecione o firmware desejado.

      cockpit vm firmware
    3. Clique em Salvar.
  3. Clique em Instalar.

    A rotina de instalação do sistema operacional é executada no console da VM.

Solução de problemas

  • Se a rotina de instalação falhar, a VM deve ser apagada e recriada.

2.3. Inicialização de máquinas virtuais

Para iniciar uma máquina virtual (VM) no RHEL 8, você pode usar a interface de linha de comando ou o GUI do console web.

Pré-requisitos

2.3.1. Iniciando uma máquina virtual usando a interface de linha de comando

Você pode usar a interface de linha de comando para iniciar uma máquina virtual de desligamento (VM) ou restaurar uma VM salva. Siga o procedimento abaixo.

Pré-requisitos

  • Um VM inativo que já está definido.
  • O nome do VM.
  • Para VMs remotas:

    • O endereço IP do host onde a VM está localizada.
    • Privilégios de acesso à raiz para o anfitrião.

Procedimento

  • Para uma VM local, use o utilitário virsh start.

    Por exemplo, o seguinte comando inicia o demo-guest1 VM.

    # virsh start demo-guest1
    Domain demo-guest1 started
  • Para uma VM localizada em um host remoto, use o utilitário virsh start junto com a conexão SSH QEMU com o host.

    Por exemplo, o seguinte comando inicia o VM demo-guest1 no host 192.168.123.123.

    # virsh -c qemu+ssh://root@192.168.123.123/system start demo-guest1
    
    root@192.168.123.123's password:
    Last login: Mon Feb 18 07:28:55 2019
    
    Domain demo-guest1 started

Recursos adicionais

  • Para mais argumentos virsh start, use virsh start --help.
  • Para simplificar o gerenciamento de VM em hosts remotos, veja modificando sua configuração de libvirt e SSH.
  • Você pode usar o utilitário virsh autostart para configurar uma VM para iniciar automaticamente quando o host iniciar. Para mais informações sobre o autostart, consulte a página de ajuda virsh autostart.

2.3.2. Inicialização de máquinas virtuais usando o console web

Se uma máquina virtual (VM) estiver no estado shut off, você pode iniciá-la usando o console web RHEL 8.

Pré-requisitos

Procedimento

  1. Na interface das Máquinas Virtuais, clique na linha da VM que você deseja iniciar.

    A linha se expande para revelar o painel Overview com informações básicas sobre o VM selecionado e controles para desligar e excluir o VM.

  2. Clique em Run.

    A VM inicia, e você pode se conectar a seu console ou saída gráfica.

  3. Optional: Para configurar a VM para iniciar automaticamente quando o host iniciar, clique na caixa de seleção Autostart.

Recursos adicionais

2.4. Conexão com máquinas virtuais

Para interagir com uma máquina virtual (VM) no RHEL 8, você precisa se conectar a ela, fazendo uma das seguintes ações:

Se as VMs às quais você está se conectando estiverem em um host remoto em vez de um host local, você pode opcionalmente configurar seu sistema para um acesso mais conveniente aos hosts remotos.

Pré-requisitos

2.4.1. Interagindo com máquinas virtuais usando o console web

Para interagir com uma máquina virtual (VM) no console web RHEL 8, você precisa se conectar ao console da VM. Estes incluem tanto os consoles gráficos quanto os consoles seriais.

2.4.1.1. Visualização do console gráfico da máquina virtual no console web

Usando a interface do console da máquina virtual (VM), você pode visualizar a saída gráfica de uma VM selecionada no console web RHEL 8.

Pré-requisitos

Procedimento

  1. Na interface das Máquinas Virtuais, clique na linha da VM cujo console gráfico você deseja visualizar.

    A linha se expande para revelar o painel Overview com informações básicas sobre o VM selecionado e controles para desligar e excluir o VM.

  2. Clique em Consoles.

    O console gráfico aparece na interface web.

cockpit graphical console in cockpit

Você pode interagir com o console VM usando o mouse e o teclado da mesma forma que interage com uma máquina real. A exibição no console da VM reflete as atividades que estão sendo realizadas na VM.

Nota

O host no qual o console web está rodando pode interceptar combinações chave específicas, tais como Ctrl+Alt+Delimpedindo que eles sejam enviados ao VM.

Para enviar tais combinações de teclas, clique no menu Enviar tecla e selecione a seqüência de teclas a ser enviada.

Por exemplo, para enviar o Ctrl+Alt+Del para o VM, clique no menu Send key e selecione a entrada do menu Ctrl Alt Del.

Recursos adicionais

2.4.1.2. Visualização do console gráfico em um visualizador remoto usando o console web

Você pode visualizar o console gráfico de uma máquina virtual selecionada (VM) em um visualizador remoto, como um visualizador de virtudes. Para instruções, veja abaixo.

Nota

Você pode lançar o Virt Viewer de dentro do console web. Outros visualizadores remotos VNC e SPICE podem ser lançados manualmente.

Pré-requisitos

  • Para usar o console web para gerenciar as VMs, instale o plug-in de VM do console web.
  • Garantir que tanto o host quanto a VM suportem uma interface gráfica.
  • Antes que você possa visualizar o console gráfico no Virt Viewer, o Virt Viewer deve ser instalado na máquina à qual o console web está conectado.

    Para visualizar informações sobre a instalação do Virt Viewer, selecione o Graphics Console em Desktop Viewer Console Type e clique em More Information na janela Consoles.

    cockpit install vv info
Nota

Algumas extensões e plug-ins do navegador não permitem que o console web abra o Virt Viewer.

Procedimento

  1. Na interface das Máquinas Virtuais, clique na linha da VM cujo console gráfico você deseja visualizar.

    A linha se expande para revelar o painel Overview com informações básicas sobre o VM selecionado e controles para desligar e excluir o VM.

  2. Clique em Consoles.

    O console gráfico aparece na interface web.

  3. Selecione o tipo de Console Gráfico no Desktop Viewer Console.

    cockpit launch graphical console in vv
  4. Clique em Launch Remote Viewer.

    O console gráfico aparece no Virt Viewer.

    virt viewer GUI

Você pode interagir com o console VM usando o mouse e o teclado da mesma forma que interage com uma máquina real. A exibição no console da VM reflete as atividades que estão sendo realizadas na VM.

Nota

O servidor no qual o console web está rodando pode interceptar combinações específicas de teclas, tais como Ctrl+Alt+Delimpedindo que eles sejam enviados ao VM.

Para enviar tais combinações de teclas, clique no menu Enviar tecla e selecione a seqüência de teclas a ser enviada.

Por exemplo, para enviar o Ctrl+Alt+Del para o VM, clique no menu Send key e selecione a entrada do menu Ctrl Alt Del.

Solução de problemas

  • Se o lançamento de um console gráfico de visualização remota no console web não funcionar ou não for ótimo, você pode usar a informação Manual Connection, exibida no lado direito do painel do Console Gráfico.

    cockpit manual viewer info

    Digite as informações em um aplicativo SPICE ou VNC viewer, como o Virt Viewer.

Recursos adicionais

2.4.1.3. Visualização do console serial da máquina virtual no console web

Você pode visualizar o console serial de uma máquina virtual selecionada (VM) no console web RHEL 8. Isto é útil quando a máquina host ou a VM não está configurada com uma interface gráfica.

Pré-requisitos

Procedimento

  1. No painel Máquinas Virtuais, clique na linha da VM cujo console serial você deseja visualizar.

    A linha se expande para revelar o painel Overview com informações básicas sobre o VM selecionado e controles para desligar e excluir o VM.

  2. Clique em Consoles.

    O console gráfico aparece na interface web.

  3. Selecione o Tipo de Console Serial.

    O console serial aparece na interface web.

    cockpit serial console in cockpit

Você pode desconectar e reconectar o console serial da VM.

  • Para desconectar o console serial da VM, clique em Desconectar.
  • Para reconectar o console serial à VM, clique em Reconectar.

Recursos adicionais

2.4.2. Abrindo um console gráfico de máquina virtual usando o Virt Viewer

Para conectar-se a um console gráfico de uma máquina virtual KVM (VM) e abri-lo no aplicativo de desktop Virt Viewer, siga o procedimento abaixo.

Pré-requisitos

  • Seu sistema, assim como o VM ao qual você está se conectando, deve suportar displays gráficos.
  • Se o VM alvo estiver localizado em um host remoto, são necessários privilégios de conexão e acesso root ao host.
  • Optional: Se o VM alvo estiver localizado em um host remoto, configure seu libvirt e SSH para um acesso mais conveniente a hosts remotos.

Procedimento

  • Para conectar-se a uma VM local, use o seguinte comando e substitua guest-name pelo nome da VM à qual você deseja conectar-se:

    # virt-viewer guest-name
  • Para conectar-se a uma VM remota, use o comando virt-viewer com o protocolo SSH. Por exemplo, o seguinte comando se conecta como root a uma VM chamada guest-name, localizada no sistema remoto 10.0.0.1. A conexão também requer autenticação como root para o 10.0.0.1.

    # virt-viewer --direct --connect qemu+ssh://root@10.0.0.1/system guest-name
    root@10.0.0.1's password:

Se a conexão funcionar corretamente, a tela da VM é mostrada na janela Virt Viewer.

Virt Viewer displaying a RHEL 7 guest OS

Você pode interagir com o console VM usando o mouse e o teclado da mesma forma que interage com uma máquina real. A exibição no console da VM reflete as atividades que estão sendo realizadas na VM.

Recursos adicionais

2.4.3. Conexão a uma máquina virtual usando SSH

Para interagir com o terminal de uma máquina virtual (VM) usando o protocolo de conexão SSH, siga o procedimento abaixo:

Pré-requisitos

  • Você tem privilégios de conexão de rede e acesso root ao VM alvo.
  • Se o VM alvo estiver localizado em um host remoto, você também tem privilégios de conexão e acesso root a esse host.
  • O componente libvirt-nss está instalado e habilitado no host da VM. Se não estiver, faça o seguinte:

    1. Instale o pacote libvirt-nss:

      # yum install libvirt-nss
    2. Edite o arquivo /etc/nsswitch.conf e adicione libvirt_guest à linha hosts:

      [...]
      passwd:      compat
      shadow:      compat
      group:       compat
      hosts:       files libvirt_guest dns
      [...]

Procedimento

  1. Optional: Ao conectar-se a uma VM remota, SSH em seu host físico primeiro. O exemplo a seguir demonstra a conexão a uma máquina host 10.0.0.1 usando suas credenciais de raiz:

    # ssh root@10.0.0.1
    root@10.0.0.1's password:
    Last login: Mon Sep 24 12:05:36 2018
    root~#
  2. Use o nome da VM e as credenciais de acesso do usuário para se conectar a ela. Por exemplo, o seguinte se conecta com o "testguest1 VM usando suas credenciais de raiz:

    # ssh root@testguest1
    root@testguest1's password:
    Last login: Wed Sep 12 12:05:36 2018
    root~]#

Solução de problemas

  • Se você não souber o nome da VM, você pode listar todas as VMs disponíveis no host usando o comando virsh list --all:

    # virsh list --all
    Id    Name                           State
    ----------------------------------------------------
    2     testguest1                    running
    -     testguest2                    shut off

2.4.4. Abertura de um console serial de máquina virtual

Usando o comando virsh console, é possível conectar-se ao console serial de uma máquina virtual (VM).

Isto é útil quando o VM:

  • Não fornece protocolos VNC ou SPICE, e portanto não oferece exibição de vídeo para ferramentas GUI.
  • Não possui uma conexão de rede e, portanto, não pode ser interagido com o uso do SSH.

Pré-requisitos

  • A VM deve ter o console serial configurado em sua linha de comando do kernel. Para verificar isto, a saída do comando cat /proc/cmdline na VM deve incluir console=ttyS0. Por exemplo:

    # cat /proc/cmdline
    BOOT_IMAGE=/vmlinuz-3.10.0-948.el7.x86_64 root=/dev/mapper/rhel-root ro console=tty0 console=ttyS0,9600n8 rd.lvm.lv=rhel/root rd.lvm.lv=rhel/swap rhgb

    Se o console serial não for configurado corretamente em uma VM, usando virsh console para se conectar à VM o conectará a um console de convidado não responsivo. Entretanto, você ainda pode sair do console não-responsivo usando o atalho Ctrl ].

  • Para configurar o console serial na VM, faça o seguinte:

    1. No VM, edite o arquivo /etc/default/grub e adicione console=ttyS0 à linha que começa com GRUB_CMDLINE_LINUX.
    2. Limpe as opções do núcleo que podem impedir que suas mudanças tenham efeito.

      # grub2-editenv - unset kernelopts
    3. Recarregar a configuração do Grub:

      # grub2-mkconfig -o /boot/grub2/grub.cfg
      Generating grub configuration file ...
      Found linux image: /boot/vmlinuz-3.10.0-948.el7.x86_64
      Found initrd image: /boot/initramfs-3.10.0-948.el7.x86_64.img
      [...]
      done
    4. Reinicie o VM.

Procedimento

  1. Em seu sistema hospedeiro, use o comando virsh console. O exemplo a seguir se conecta com o VM guest1, se o driver libvirt suportar o manuseio seguro do console:

    # virsh console guest1 --safe
    Connected to domain guest1
    Escape character is ^]
    
    Subscription-name
    Kernel 3.10.0-948.el7.x86_64 on an x86_64
    
    localhost login:
  2. Você pode interagir com o console virsh da mesma forma que com uma interface padrão de linha de comando.

Recursos adicionais

  • Para mais informações sobre o console serial da VM, consulte a página de homem virsh.

2.4.5. Configuração de fácil acesso a hosts de virtualização remota

Ao gerenciar VMs em um sistema host remoto usando utilitários libvirt, é recomendável usar a sintaxe -c qemu ssh://root@hostname/system. Por exemplo, usar o comando virsh list como root no host 10.0.0.1:

# virsh -c qemu+ssh://root@10.0.0.1/system list

root@10.0.0.1's password:
Last login: Mon Feb 18 07:28:55 2019

Id   Name              State
---------------------------------
1    remote-guest      running

Entretanto, por conveniência, você pode remover a necessidade de especificar os detalhes da conexão por completo modificando sua configuração SSH e libvirt. Por exemplo, você será capaz de fazer:

# virsh -c remote-host list

root@10.0.0.1's password:
Last login: Mon Feb 18 07:28:55 2019

Id   Name              State
---------------------------------
1    remote-guest      running

Para permitir esta melhoria, siga as instruções abaixo.

Procedimento

  1. Editar ou criar o arquivo ~/.ssh/config e adicionar o seguinte a ele, onde host-alias é um nome abreviado associado a um host remoto específico, e hosturl é o endereço URL do host.

    Host host-alias
            User                    root
            Hostname                hosturl

    Por exemplo, o seguinte estabelece o nome alternativo tyrannosaurus para root@10.0.0.1:

    Host tyrannosaurus
            User                    root
            Hostname                10.0.0.1
  2. Edite ou crie o arquivo /etc/libvirt/libvirt.conf e adicione o seguinte, onde qemu-host-alias é um apelido de host alias que QEMU e libvirt utilities associarão com o host pretendido:

    uri_aliases = [
      "qemu-host-alias=qemu+ssh://host-alias/system",
    ]

    Por exemplo, o seguinte utiliza o alias tyrannosaurus configurado na etapa anterior para configurar o alias t-rex, que significa qemu ssh://10.0.0.1/system:

    uri_aliases = [
      "t-rex=qemu+ssh://tyrannosaurus/system",
    ]
  3. Como resultado, você pode gerenciar VMs remotas usando utilitários baseados em libvírus no sistema local com um -c qemu-host-alias parâmetro. Isto executa automaticamente os comandos sobre o SSH no host remoto.

    Por exemplo, as seguintes listas de VMs no host remoto 10.0.0.1, cuja conexão foi configurada como t-rex nas etapas anteriores:

    $ virsh -c t-rex list
    
    root@10.0.0.1's password:
    Last login: Mon Feb 18 07:28:55 2019
    
    Id   Name              State
    ---------------------------------
    1    velociraptor      running
  4. Optional: Se você quiser usar utilitários de libvirt exclusivamente em um único host remoto, você também pode definir uma conexão específica como alvo padrão para utilitários baseados em libvirt. Para fazer isso, edite o arquivo /etc/libvirt/libvirt.conf e defina o valor do parâmetro uri_default para qemu-host-alias. Por exemplo, o seguinte usa o apelido de host t-rex configurado nas etapas anteriores como alvo padrão da libvirt.

    # These can be used in cases when no URI is supplied by the application
    # (@uri_default also prevents probing of the hypervisor driver).
    #
    uri_default = "t-rex"

    Como resultado, todos os comandos baseados em libvírus serão executados automaticamente no host remoto especificado.

    $ virsh list
    root@10.0.0.1's password:
    Last login: Mon Feb 18 07:28:55 2019
    
    Id   Name              State
    ---------------------------------
    1    velociraptor      running

    No entanto, isto não é recomendado se você também quiser gerenciar VMs em seu host local ou em hosts remotos diferentes.

Recursos adicionais

2.5. Desligamento de máquinas virtuais

Para desligar uma máquina virtual em execução no Red Hat Enterprise Linux 8, use a interface de linha de comando ou o GUI do console web.

2.5.1. Desligamento de uma máquina virtual utilizando a interface de linha de comando

Para desativar uma máquina virtual (VM) responsiva, faça uma das seguintes ações:

  • Use um comando de desligamento apropriado para o sistema operacional convidado enquanto estiver conectado ao convidado.
  • Use o comando virsh shutdown no host:

    • Se o VM estiver em um host local:

      # virsh shutdown demo-guest1
      Domain demo-guest1 is being shutdown
    • Se o VM estiver em um host remoto, neste exemplo 10.0.0.1:

      # virsh -c qemu+ssh://root@10.0.0.1/system shutdown demo-guest1
      
      root@10.0.0.1's password:
      Last login: Mon Feb 18 07:28:55 2019
      Domain demo-guest1 is being shutdown

Para forçar um convidado a desligar, por exemplo, se ele não responder, use o comando virsh destroy no host:

# virsh destroy demo-guest1
Domain demo-guest1 destroyed
Nota

O comando virsh destroy não apaga ou remove a configuração da VM ou imagens de disco. Ele apenas destrói a instância da VM em execução. Entretanto, em casos raros, este comando pode causar corrupção do sistema de arquivos da VM, portanto, o uso do virsh destroy só é recomendado se todos os outros métodos de desligamento falharam.

2.5.2. Desligamento e reinício de máquinas virtuais usando o console web

Usando o console web RHEL 8, você pode desligar ou reiniciar máquinas virtuais em funcionamento. Você também pode enviar uma interrupção não-máscara para uma máquina virtual não-responsável.

2.5.2.1. Desligamento de máquinas virtuais no console web

Se uma máquina virtual (VM) estiver no estado running, você pode desligá-la usando o console web RHEL 8.

Pré-requisitos

Procedimento

  1. Na interface das Máquinas Virtuais, clique na linha da VM que você deseja desligar.

    A linha se expande para revelar o painel Overview com informações básicas sobre o VM selecionado e controles para desligar e excluir o VM.

  2. Clique em Shut Down.

    A VM se desliga.

Solução de problemas

Recursos adicionais

2.5.2.2. Reinicialização de máquinas virtuais usando o console web

Se uma máquina virtual (VM) estiver no estado running, você pode reiniciá-la usando o console web RHEL 8.

Pré-requisitos

Procedimento

  1. Na interface das Máquinas Virtuais, clique na linha da VM que você deseja reiniciar.

    A linha se expande para revelar o painel Overview com informações básicas sobre o VM selecionado e controles para desligar e excluir o VM.

  2. Clique em Reiniciar.

    A VM se desliga e reinicia.

Solução de problemas

Recursos adicionais

2.5.2.3. Envio de interrupções não-máscaras para VMs usando o console web

O envio de uma interrupção não-máscara (NMI) pode fazer com que uma máquina virtual em funcionamento (VM) não responda ou se desligue. Por exemplo, você pode enviar a Ctrl+Alt+Del NMI para uma VM que não está respondendo à entrada padrão.

Pré-requisitos

Procedimento

  1. Na interface das Máquinas Virtuais, clique na linha da VM para a qual você deseja enviar uma MNI.

    A linha se expande para revelar o painel Overview com informações básicas sobre o VM selecionado e controles para desligar e excluir o VM.

  2. Clique no botão Menu ao lado do botão Shut Down e selecione Send Non-Maskable Interrupt (Enviar Interrupção Não-Máscara).

    Um MNI é enviado para o VM.

Recursos adicionais

2.6. Eliminação de máquinas virtuais

Para apagar máquinas virtuais no Red Hat Enterprise Linux 8, use a interface de linha de comando ou o GUI do console web.

2.6.1. Eliminação de máquinas virtuais usando a interface de linha de comando

Para excluir uma máquina virtual (VM), você pode remover sua configuração XML e arquivos de armazenamento associados do host usando a linha de comando. Siga o procedimento abaixo:

Pré-requisitos

  • Faça o backup de dados importantes do VM.
  • Desligue o VM.
  • Certifique-se de que nenhuma outra VM utilize o mesmo armazenamento associado.

Procedimento

  • Use o utilitário virsh undefine.

    Por exemplo, o seguinte comando remove a VM guest1, seus volumes de armazenamento associados e a RAM não volátil, se houver.

    # virsh undefine guest1 --remove-all-storage --nvram
    Domain guest1 has been undefined
    Volume 'vda'(/home/images/guest1.qcow2) removed.

Recursos adicionais

  • Para outros argumentos virsh undefine, use virsh undefine --help ou consulte a página de manual virsh.

2.6.2. Eliminação de máquinas virtuais usando o console web

Para excluir uma máquina virtual (VM) e seus arquivos de armazenamento associados do host ao qual o console web RHEL 8 está conectado, siga o procedimento abaixo:

Pré-requisitos

  • Para usar o console web para gerenciar as VMs, instale o plug-in de VM do console web.
  • Faça o backup de dados importantes do VM.
  • Desligue o VM.
  • Certifique-se de que nenhuma outra VM utilize o mesmo armazenamento associado.

Procedimento

  1. Na interface das Máquinas Virtuais, clique no botão Menu da VM que você deseja excluir.

    Um menu suspenso aparece com controles para várias operações de VM.

    cockpit VM operations
  2. Clique em Excluir.

    Aparece um diálogo de confirmação.

    cockpit vm delete confirm
  3. Optional: Para excluir todos ou alguns dos arquivos de armazenamento associados à VM, selecione as caixas de seleção ao lado dos arquivos de armazenamento que você deseja excluir.
  4. Clique em Excluir.

    O VM e quaisquer arquivos de armazenamento selecionados são excluídos.

Capítulo 3. Começando com a virtualização no IBM POWER

Você pode usar a virtualização KVM ao usar o RHEL 8 em hardware IBM POWER8 ou POWER9. Entretanto, habilitar o KVM hypervisor em seu sistema requer passos extras em comparação à virtualização nas arquiteturas AMD64 e Intel64. Alguns recursos de virtualização RHEL 8 também possuem funcionalidades diferentes ou restritas no IBM POWER.

Além das informações nas seções seguintes, o uso da virtualização no IBM POWER funciona da mesma forma que no AMD64 e Intel 64. Portanto, você pode ver outra documentação de virtualização RHEL 8 para mais informações ao usar a virtualização no IBM POWER.

3.1. Possibilitando a virtualização no IBM POWER

Para configurar um KVM hypervisor e criar máquinas virtuais (VMs) em um sistema IBM POWER8 ou IBM POWER9 rodando o RHEL 8, siga as instruções abaixo.

Pré-requisitos

  • O RHEL 8 é instalado e registrado em sua máquina host.
  • Os seguintes recursos mínimos do sistema estão disponíveis:

    • 6 GB de espaço livre em disco para o host, mais outros 6 GB para cada VM pretendido.
    • 2 GB de RAM para o host, mais outros 2 GB para cada VM pretendido.
  • Seu tipo de máquina CPU deve suportar a virtualização do IBM POWER.

    Para verificar isso, consulte as informações da plataforma em seu arquivo /proc/cpuinfo.

    # grep ^platform /proc/cpuinfo/
    platform        : PowerNV

    Se a saída deste comando inclui a entrada PowerNV, você está executando um tipo de máquina PowerNV e pode usar a virtualização no IBM POWER.

Procedimento

  1. Carregar o módulo de kernel KVM-HV

    # modprobe kvm_hv
  2. Verificar se o módulo KVM kernel está carregado

    # lsmod | grep kvm

    Se o KVM for carregado com sucesso, a saída deste comando inclui kvm_hv.

  3. Instalar os pacotes no módulo de virtualização:

    # yum module install virt
  4. Instale o pacote virt-install:

    # yum install virt-install
  5. Iniciar o serviço libvirtd.

    # systemctl start libvirtd
  6. Verifique se seu sistema está preparado para ser um host de virtualização:

    # virt-host-validate
    [...]
    QEMU: Checking if device /dev/vhost-net exists                          : PASS
    QEMU: Checking if device /dev/net/tun exists                            : PASS
    QEMU: Checking for cgroup 'memory' controller support                   : PASS
    QEMU: Checking for cgroup 'memory' controller mount-point               : PASS
    [...]
    QEMU: Checking for cgroup 'blkio' controller support                    : PASS
    QEMU: Checking for cgroup 'blkio' controller mount-point                : PASS
    QEMU: Checking if IOMMU is enabled by kernel                            : PASS
  7. Se todos os cheques virt-host-validate retornarem um valor PASS, seu sistema está preparado para a criação de VMs.

    Se algum dos cheques devolver um valor FAIL, siga as instruções exibidas para corrigir o problema.

    Se algum dos cheques retornar um valor WARN, considere seguir as instruções exibidas para melhorar as capacidades de virtualização.

Informações adicionais

  • Note que se a virtualização não for suportada por sua CPU hospedeira, virt-host-validate gera a seguinte saída:

    QEMU: Verificação da virtualização do hardware: FAIL (Somente CPUs emuladas estão disponíveis, o desempenho será significativamente limitado)

    Entretanto, a tentativa de criar VMs em um sistema hospedeiro desse tipo falhará, ao invés de ter problemas de desempenho.

3.2. Como a virtualização no IBM POWER difere da AMD64 e Intel 64

A virtualização da KVM na RHEL 8 em sistemas IBM POWER é diferente da KVM em sistemas AMD64 e Intel 64 em uma série de aspectos, notadamente:

Requisitos de memória
As VMs na IBM POWER consomem mais memória. Portanto, a alocação mínima recomendada de memória para uma máquina virtual (VM) em um host IBM POWER é de 2GB de RAM.
Protocolos de exibição

O protocolo SPICE não é suportado nos sistemas IBM POWER. Para exibir a saída gráfica de uma VM, use o protocolo VNC. Além disso, somente os seguintes dispositivos de placas gráficas virtuais são suportados:

  • vga - suportado apenas no modo -vga std e não no modo -vga cirrus.
  • virtio-vga
  • virtio-gpu
SMBIOS
A configuração do SMBIOS não está disponível.
Erros de alocação de memória

POWER8 VMs, incluindo VMs em modo de compatibilidade, podem falhar com um erro semelhante a:

qemu-kvm: Falha na alocação do KVM HPT da ordem 33 (tente um maxmem? menor): Não é possível alocar memória

Isto é significativamente mais provável que ocorra em VMs que usam RHEL 7.3 e anteriores como sistema operacional convidado.

Para solucionar o problema, aumente o pool de memória CMA disponível para a tabela de páginas de hashed do convidado (HPT), acrescentando kvm_cma_resv_ratio=memory para a linha de comando do kernel do host, onde memory é a porcentagem da memória do host que deve ser reservada para o pool CMA (padrão a 5).

Grandes páginas

Páginas enormes transparentes (THPs) não oferecem nenhum benefício notável de desempenho em VMs IBM POWER8. Entretanto, as VMs IBM POWER9 podem se beneficiar dos THPs, como esperado.

Além disso, o tamanho das páginas enormes estáticas nos sistemas IBM POWER8 são 16 MiB e 16 GiB, em oposição a 2 MiB e 1 GiB no AMD64, Intel 64, e IBM POWER9. Como conseqüência, para migrar uma VM configurada com páginas enormes estáticas de um host IBM POWER8 para um host IBM POWER9, você deve primeiro configurar 1GiB de páginas enormes na VM.

kvm-clock
O serviço kvm-clock não tem que ser configurado para gerenciamento de tempo em VMs no IBM POWER9.
pvpanic

Os sistemas IBM POWER9 não suportam o dispositivo pvpanic. Entretanto, uma funcionalidade equivalente está disponível e ativada por padrão nesta arquitetura. Para ativá-la em uma VM, use o elemento de configuração <on_crash> XML com o valor preserve.

Além disso, certifique-se de remover o elemento <panic> da seção <devices>, pois sua presença pode levar a VM a falhar no boot em sistemas IBM POWER.

Hospedeiro com uma única rosca
Nos sistemas IBM POWER8, a máquina host deve rodar em single-threaded mode para suportar as VMs. Isto é configurado automaticamente se os pacotes qemu-kvm forem instalados. Entretanto, as VMs rodando em hosts com rosca única ainda podem usar várias roscas.
Dispositivos periféricos

Vários dispositivos periféricos suportados em sistemas AMD64 e Intel 64 não são suportados em sistemas IBM POWER, ou um dispositivo diferente é suportado como um substituto.

  • Os dispositivos utilizados na hierarquia PCI-E, incluindo ioh3420 e xio3130-downstream, não são suportados. Esta funcionalidade é substituída por múltiplas pontes de raiz independentes da PCI fornecidas pelo dispositivo spapr-pci-host-bridge.
  • Os controladores UHCI e EHCI PCI não são suportados. Use controladores OHCI e XHCI em seu lugar.
  • Os dispositivos IDE, incluindo o CD-ROM IDE virtual (ide-cd) e o disco IDE virtual (ide-hd), não são suportados. Utilize os dispositivos virtio-scsi e virtio-blk em seu lugar.
  • Os PCIs emulados (rtl8139) não são suportados. Use o dispositivo virtio-net em seu lugar.
  • Os dispositivos de som, incluindo intel-hda, hda-output, e AC97, não são suportados.
  • Os dispositivos de redirecionamento USB, incluindo usb-redir e usb-tablet, não são suportados.
v2v e p2v
Os utilitários virt-v2v e virt-p2v são suportados somente na arquitetura AMD64 e Intel 64, e não são fornecidos no IBM POWER.

Fontes adicionais

Capítulo 4. Começando com a virtualização no IBM Z

Você pode usar a virtualização KVM ao usar o RHEL 8 no hardware IBM Z. Entretanto, habilitar o KVM hypervisor em seu sistema requer passos extras em comparação à virtualização nas arquiteturas AMD64 e Intel 64. Certos recursos de virtualização RHEL 8 também têm funcionalidades diferentes ou restritas no IBM Z.

Além das informações nas seções seguintes, o uso da virtualização no IBM Z funciona da mesma forma que no AMD64 e Intel 64. Portanto, você pode ver outra documentação de virtualização RHEL 8 para mais informações ao usar a virtualização no IBM Z.

4.1. Possibilitando a virtualização na IBM Z

Para configurar um hipervisor KVM e criar máquinas virtuais (VMs) em um sistema IBM Z rodando RHEL 8, siga as instruções abaixo.

Pré-requisitos

  • O RHEL 8 é instalado e registrado em sua máquina host.
  • Os seguintes recursos mínimos do sistema estão disponíveis:

    • 6 GB de espaço livre em disco para o host, mais outros 6 GB para cada VM pretendido.
    • 2 GB de RAM para o host, mais outros 2 GB para cada VM pretendido.
  • Seu sistema host IBM Z está usando uma CPU z13 ou posterior.
  • O RHEL 8 é instalado em uma divisória lógica (LPAR). Além disso, a LPAR suporta as funções de virtualização do start-interpretive execution (SIE).

    Para verificar isso, procure sie em seu arquivo /proc/cpuinfo.

    # grep sie /proc/cpuinfo/
    features        : esan3 zarch stfle msa ldisp eimm dfp edat etf3eh highgprs te sie

Procedimento

  1. Carregar o módulo KVM kernel:

    # modprobe kvm
  2. Verificar se o módulo KVM do kernel está carregado:

    # lsmod | grep kvm

    Se o KVM for carregado com sucesso, a saída deste comando inclui kvm:

  3. Instalar os pacotes no módulo de virtualização:

    # yum module install virt
  4. Instale o pacote virt-install:

    # yum install virt-install
  5. Iniciar o serviço libvirtd.

    # systemctl start libvirtd
  6. Verifique se seu sistema está preparado para ser um host de virtualização:

    # virt-host-validate
    [...]
    QEMU: Checking if device /dev/kvm is accessible                : PASS
    QEMU: Checking if device /dev/vhost-net exists                 : PASS
    QEMU: Checking if device /dev/net/tun exists                   : PASS
    QEMU: Checking for cgroup 'memory' controller support          : PASS
    QEMU: Checking for cgroup 'memory' controller mount-point      : PASS
    [...]
  7. Se todos os cheques virt-host-validate retornarem um valor PASS, seu sistema está preparado para a criação de VMs.

    Se algum dos cheques devolver um valor FAIL, siga as instruções exibidas para corrigir o problema.

    Se algum dos cheques retornar um valor WARN, considere seguir as instruções exibidas para melhorar as capacidades de virtualização.

Informações adicionais

  • Note que se a virtualização não for suportada por sua CPU hospedeira, virt-host-validate gera a seguinte saída:

    QEMU: Verificação da virtualização do hardware: FAIL (Somente CPUs emuladas estão disponíveis, o desempenho será significativamente limitado)

    Entretanto, a tentativa de criar VMs em um sistema hospedeiro desse tipo falhará, ao invés de ter problemas de desempenho.

4.2. Como a virtualização na IBM Z difere da AMD64 e Intel 64

A virtualização da KVM na RHEL 8 em sistemas IBM Z difere da KVM em sistemas AMD64 e Intel 64 nos seguintes:

Sem saída gráfica
A exibição da saída gráfica da VM não é possível quando se conecta à VM usando o protocolo VNC. Isto ocorre porque o utilitário gnome-desktop não é suportado no IBM Z. Além disso, o protocolo de exibição SPICE não funciona no IBM Z.
Dispositivos PCI e USB

Os dispositivos PCI e USB virtuais não são suportados no IBM Z. Isso também significa que virtio-*-pci dispositivos não têm suporte, e virtio-*-ccw devem ser usados dispositivos em seu lugar. Por exemplo, use virtio-net-ccw ao invés de virtio-net-pci.

Note que a fixação direta de dispositivos PCI, também conhecida como PCI passthrough, é suportada.

SO convidado suportado
A Red Hat só suporta VMs hospedadas no IBM Z se eles usarem RHEL 7 ou RHEL 8 como sistema operacional convidado.
Pedido de inicialização do dispositivo

IBM Z não suporta o <boot dev='device'> Elemento de configuração XML. Para definir a ordem de inicialização do dispositivo, use o elemento de configuração <boot order='number'> elemento na seção <devices> do XML. Por exemplo, o elemento XML:

<disk type='file' device='disk'>
  <driver name='qemu' type='qcow2'/>
  <source file='/path/to/qcow2'/>
  <target dev='vda' bus='virtio'/>
  <address type='ccw' cssid='0xfe' ssid='0x0' devno='0x0000'/>
  <boot order='2'>
</disk>
Nota

Usando <boot order='number'> para gerenciamento de pedidos de inicialização também é preferível nos hosts AMD64 e Intel 64.

Plug quente de memória
Adicionar memória a uma VM em execução não é possível na IBM Z. Note que remover memória de uma VM em execução (memory hot unplug) também não é possível na IBM Z, assim como na AMD64 e Intel 64.
Topologia NUMA
A topologia de acesso de memória não uniforme (NUMA) para CPUs não é suportada por libvirt no IBM Z. Portanto, o ajuste do desempenho de vCPU usando NUMA não é possível nesses sistemas.
vfio-ap
As VMs em um host IBM Z podem usar a passagem do dispositivo criptográfico vfio-ap, que não é suportada em nenhuma outra arquitetura.
SMBIOS
A configuração do SMBIOS não está disponível no IBM Z.
Dispositivos de vigilância

Se utilizar dispositivos de vigilância em seu VM em um host IBM Z, utilize o modelo diag288. Por exemplo, o modelo :

<devices>
  <watchdog model='diag288' action='poweroff'/>
</devices>
kvm-clock
O serviço kvm-clock é específico para sistemas AMD64 e Intel 64, e não precisa ser configurado para gerenciamento de tempo de VM no IBM Z.
v2v e p2v
Os utilitários virt-v2v e virt-p2v são suportados somente na arquitetura AMD64 e Intel 64, e não são fornecidos na IBM Z.
Virtualização aninhada
A criação de VMs aninhadas requer configurações diferentes no IBM Z do que no AMD64 e Intel 64. Para detalhes, veja Capítulo 18, Criando máquinas virtuais aninhadas.

Fontes adicionais

Capítulo 5. Gerenciamento de máquinas virtuais no console web

Gerencie suas máquinas virtuais em um console web RHEL 8 e aprenda sobre as capacidades de gerenciamento de virtualização.

Para gerenciar máquinas virtuais em uma interface gráfica em um host RHEL 8, você pode usar o painel Virtual Machines no console web RHEL 8.

web console overview

5.1. Visão geral do gerenciamento de máquinas virtuais usando o console web

O console web RHEL 8 é uma interface baseada na web para a administração do sistema. Como uma de suas características, o console web fornece uma visão gráfica das máquinas virtuais (VMs) no sistema host, e torna possível criar, acessar e configurar estas VMs.

Note que para usar o console web para gerenciar suas VMs no RHEL 8, você deve primeiro instalar um plug-in de console web para virtualização.

Próximos passos

5.2. Configuração do console web para gerenciar máquinas virtuais

Antes de utilizar o console web RHEL 8 para gerenciar máquinas virtuais (VMs), você deve instalar o plug-in da máquina virtual do console web no host.

Pré-requisitos

  • Certifique-se de que o console web esteja instalado e habilitado em sua máquina.

    # systemctl status cockpit.socket
    cockpit.socket - Cockpit Web Service Socket
    Loaded: loaded (/usr/lib/systemd/system/cockpit.socket
    [...]

    Se este comando retornar Unit cockpit.socket could not be found, siga o documento Instalando o console web para habilitar o console web.

Procedimento

  • Instale o plug-in cockpit-machines.

    # yum install cockpit-machines

Verificação

  • Se a instalação for bem sucedida, as Máquinas Virtuais aparecem no menu lateral do console web.

    cockpit vms info

Recursos adicionais

5.3. Recursos de gerenciamento de máquinas virtuais disponíveis no console web

Usando o console web RHEL 8, você pode realizar as seguintes ações para gerenciar as máquinas virtuais (VMs) em seu sistema.

5.4. Diferenças entre os recursos de virtualização no Virtual Machine Manager e no console web

O aplicativo Virtual Machine Manager (virt-manager) é suportado no RHEL 8, mas foi depreciado. O console web tem a intenção de se tornar seu substituto em um lançamento principal subseqüente. É, portanto, recomendado que você se familiarize com o console web para gerenciar a virtualização em uma GUI.

Entretanto, no RHEL 8, algumas tarefas de gerenciamento de VMs só podem ser realizadas em virt-manager ou na linha de comando. A tabela a seguir destaca as características que estão disponíveis em virt-manager mas não disponíveis no console web RHEL 8.0.

Se uma característica estiver disponível em uma versão menor posterior do RHEL 8, a versão mínima do RHEL 8 aparece na coluna Support in web console introduced.

Tabela 5.2. Tarefas de gerenciamento de VM que não podem ser realizadas utilizando o console web no RHEL 8.0

TarefaIntrodução do suporte em console webMétodo alternativo usando CLI

Configurando uma máquina virtual para começar quando as botas do host

RHEL 8.1

virsh autostart

Suspender uma máquina virtual

RHEL 8.1

virsh suspend

Retomar uma máquina virtual suspensa

RHEL 8.1

virsh resume

Criação de pools de armazenamento de diretório do sistema de arquivos

RHEL 8.1

virsh pool-define-as

Criação de pools de armazenamento NFS

RHEL 8.1

virsh pool-define-as

Criação de pools de armazenamento de dispositivos físicos em disco

RHEL 8.1

virsh pool-define-as

Criação de grupos de armazenamento de volume LVM

RHEL 8.1

virsh pool-define-as

Criação de pools de armazenamento baseados em divisórias

CURRENTLY UNAVAILABLE

virsh pool-define-as

Criação de pools de armazenamento baseados em GlusterFS

CURRENTLY UNAVAILABLE

virsh pool-define-as

Criação de pools de armazenamento baseados em vHBA com dispositivos SCSI

CURRENTLY UNAVAILABLE

virsh pool-define-as

Criação de pools de armazenamento Multipath-based

CURRENTLY UNAVAILABLE

virsh pool-define-as

Criação de pools de armazenagem com base em RBD

CURRENTLY UNAVAILABLE

virsh pool-define-as

Criação de um novo volume de armazenamento

RHEL 8.1

virsh vol-create

Adicionando uma nova rede virtual

RHEL 8.1

virsh net-create ou virsh net-define

Eliminação de uma rede virtual

RHEL 8.1

virsh net-undefine

Criando uma ponte da interface de uma máquina host para uma máquina virtual

CURRENTLY UNAVAILABLE

virsh iface-bridge

Criando um instantâneo

CURRENTLY UNAVAILABLE

virsh snapshot-create-as

Revertendo para um instantâneo

CURRENTLY UNAVAILABLE

virsh snapshot-revert

Eliminação de um instantâneo

CURRENTLY UNAVAILABLE

virsh snapshot-delete

Clonagem de uma máquina virtual

CURRENTLY UNAVAILABLE

virt-clone

Migração de uma máquina virtual para outra máquina host

CURRENTLY UNAVAILABLE

virsh migrate

Recursos adicionais

Capítulo 6. Visualização de informações sobre máquinas virtuais

Quando você precisa ajustar ou solucionar qualquer aspecto de sua implantação de virtualização no RHEL 8, o primeiro passo a ser dado normalmente é visualizar informações sobre o estado atual e a configuração de suas máquinas virtuais. Para fazer isso, você pode usar a interface de linha de comando ou o console web. Você também pode visualizar as informações na configuração XML da VM.

6.1. Visualização de informações de máquinas virtuais usando a interface de linha de comando

Para obter informações sobre máquinas virtuais (VMs) em seu host e suas configurações, use um ou mais dos seguintes comandos.

Procedimento

  • Para obter uma lista de VMs em seu host:

    # virsh list --all
    Id   Name              State
    ----------------------------------
    1    testguest1             running
    -    testguest2             shut off
    -    testguest3             shut off
    -    testguest4             shut off
  • Para obter informações básicas sobre um VM específico:

    # virsh dominfo testguest1
    Id:             1
    Name:           testguest1
    UUID:           a973666f-2f6e-415a-8949-75a7a98569e1
    OS Type:        hvm
    State:          running
    CPU(s):         2
    CPU time:       188.3s
    Max memory:     4194304 KiB
    Used memory:    4194304 KiB
    Persistent:     yes
    Autostart:      disable
    Managed save:   no
    Security model: selinux
    Security DOI:   0
    Security label: system_u:system_r:svirt_t:s0:c486,c538 (enforcing)
  • Para obter a configuração XML completa de uma VM específica:

    # virsh dumpxml testguest2
    
    <domain type='kvm' id='1'>
      <name>testguest2</name>
      <uuid>a973434f-2f6e-4ěša-8949-76a7a98569e1</uuid>
      <metadata>
    [...]
  • Para informações sobre os discos de uma VM e outros dispositivos de bloco:

    # virsh domblklist testguest3
     Target   Source
    ---------------------------------------------------------------
     vda      /var/lib/libvirt/images/testguest3.qcow2
     sda      -
     sdb      /home/username/Downloads/virt-p2v-1.36.10-1.el7.iso

    Para instruções sobre como gerenciar o armazenamento de uma VM, veja Capítulo 11, Gerenciamento de armazenamento para máquinas virtuais.

  • Para obter informações sobre os sistemas de arquivos de uma VM e seus pontos de montagem:

    # virsh domfsinfo testguest3
    Mountpoint   Name   Type   Target
    ------------------------------------
     /            dm-0   xfs
     /boot        vda1   xfs

6.2. Visualização de informações de máquinas virtuais usando o console web

Usando o console web RHEL 8, você pode visualizar informações sobre o armazenamento virtual e as VMs às quais o console web está conectado.

6.2.1. Visualizando uma visão geral da virtualização no console web

O procedimento a seguir descreve como visualizar uma visão geral das máquinas virtuais (VMs) e o armazenamento virtual disponível ao qual a sessão do console web está conectada.

Pré-requisitos

Procedimento

  • Clique em Virtual Machines no menu lateral do console web.

    Aparece uma caixa de diálogo com informações sobre o armazenamento disponível e as VMs às quais o console web está conectado.

cockpit vms info

As informações incluem o seguinte:

  • Storage Pools - O número de pools de armazenamento que podem ser acessados pelo console web e seu estado.
  • Networks - O número de redes que podem ser acessadas pelo console web e seu estado.
  • Name - O nome do VM.
  • Connection - O tipo de conexão, sistema ou sessão de libvirt.
  • State - O estado do VM.

Recursos adicionais

6.2.2. Visualização das informações do pool de armazenamento usando o console web

O procedimento a seguir descreve como visualizar informações detalhadas sobre os pools de armazenamento da máquina virtual (VM) que a sessão do console web pode acessar.

Pré-requisitos

Procedimento

  1. Clique em Piscinas de Armazenamento na parte superior da interface das Máquinas Virtuais. A janela Piscinas de Armazenamento aparece, mostrando uma lista de pools de armazenamento configurados.

    web console storage pools window

    As informações incluem o seguinte:

    • Name - O nome do pool de armazenagem.
    • Size - O tamanho do pool de armazenagem.
    • Connection - A conexão utilizada para acessar o pool de armazenamento.
    • State - O estado do pool de armazenagem.
  2. Clique na linha do depósito cujas informações você deseja ver.

    A linha se expande para revelar o painel de Visão Geral com as seguintes informações sobre o pool de armazenamento selecionado:

    • Path - O caminho para o pool de armazenagem.
    • Persistent - Se o pool de armazenagem é persistente ou não.
    • Autostart - Quer o pool de armazenagem comece ou não automaticamente.
    • Type - O tipo de piscina de armazenagem.
    web console storage pool overview
  3. Para ver uma lista dos volumes de armazenamento criados a partir do pool de armazenamento, clique em Volumes de Armazenamento.

    Aparece o painel de Volumes de Armazenamento, mostrando uma lista de volumes de armazenamento configurados com seus tamanhos e a quantidade de espaço utilizada.

    web console storage pool storage volumes

Recursos adicionais

6.2.3. Visualização de informações básicas da máquina virtual no console web

O seguinte descreve como visualizar informações básicas sobre uma máquina virtual selecionada (VM) à qual a sessão do console web está conectada.

Pré-requisitos

Procedimento

  1. Clique em Virtual Machines no menu lateral do console web.
  2. Clique na fila do VM cujas informações você deseja ver.

    A linha se expande para revelar o painel Overview com informações básicas sobre o VM selecionado e controles para desligar e excluir o VM.

  3. Se outra aba for selecionada, clique em Visão Geral.

    cockpit basic vm info

As informações incluem os seguintes detalhes gerais da VM:

  • Memory - A quantidade de memória atribuída ao VM.
  • vCPUs - O número de CPUs virtuais configuradas para a VM.
  • CPU Type - A arquitetura das CPUs virtuais configuradas para a VM.
  • Boot Order - A ordem de inicialização configurada para a VM.
  • Autostart - Se o autostart está ou não habilitado para a VM.

As informações também incluem os seguintes detalhes do hipervisor:

  • Emulated Machine - O tipo de máquina emulada pela VM.
  • Firmware - O firmware da VM.

Recursos adicionais

6.2.4. Visualização do uso de recursos da máquina virtual no console web

O procedimento a seguir descreve como visualizar a memória e as informações de uso da CPU virtual sobre uma máquina virtual selecionada (VM) à qual a sessão do console web está conectada.

Pré-requisitos

Procedimento

  1. Na interface das Máquinas Virtuais, clique na linha da VM cujas informações você deseja ver.

    A linha se expande para revelar o painel Overview com informações básicas sobre o VM selecionado e controles para desligar e excluir o VM.

  2. Clique em Usage (Uso).

    O painel de Uso aparece com informações sobre a memória e o uso da CPU virtual da VM.

cockpit resource usage

Recursos adicionais

6.2.5. Visualização das informações do disco da máquina virtual no console web

O procedimento a seguir descreve como visualizar as informações em disco de uma máquina virtual (VM) à qual a sessão do console web está conectada.

Pré-requisitos

Para usar o console web para gerenciar as VMs, instale o plug-in de VM do console web.

Procedimento

  1. Clique na fila do VM cujas informações você deseja ver.

    A linha se expande para revelar o painel Overview com informações básicas sobre o VM selecionado e controles para desligar e excluir o VM.

  2. Clique em Discos.

    O painel de discos aparece com informações sobre os discos designados para a VM.

cockpit disk info

As informações incluem o seguinte:

  • Device - O tipo de dispositivo do disco.
  • Used - A quantidade do disco que é utilizada.
  • Capacity - O tamanho do disco.
  • Bus - O tipo de ônibus do disco.
  • Access - Se o disco é gravável ou somente leitura.
  • Source - O dispositivo ou arquivo em disco.

Recursos adicionais

6.2.6. Visualização e edição de informações da interface de rede virtual no console web

Usando o console web RHEL 8, você pode visualizar e modificar as interfaces de rede virtual em uma máquina virtual selecionada (VM):

Pré-requisitos

Procedimento

  1. Na interface das Máquinas Virtuais, clique na linha da VM cujas informações você deseja ver.

    A linha se expande para revelar o painel Overview com informações básicas sobre o VM selecionado e controles para desligar e excluir o VM.

  2. Clique em Interfaces de rede.

    O painel Interfaces de Redes aparece com informações sobre a interface de rede virtual configurada para a VM.

    cockpit vNIC info

    As informações incluem o seguinte:

    • Type - O tipo de interface de rede para a VM. Os tipos incluem rede virtual, ponte para LAN, e conexão direta.

      Nota

      Conexão Ethernet genérica não é suportada no RHEL 8.2.

    • Model type - O modelo da interface da rede virtual.
    • MAC Address - O endereço MAC da interface da rede virtual.
    • IP Address - O endereço IP da interface da rede virtual.
    • Source - A fonte da interface da rede. Isto depende do tipo de rede.
    • State - O estado da interface da rede virtual.
  3. Para editar as configurações da interface de rede virtual, clique em Editar. O diálogo Configurações da interface de rede virtual é aberto.

    web console virtual network if settings
  4. Alterar o tipo de interface, fonte ou modelo.
  5. Clique em Salvar. A interface da rede é modificada.

    Nota

    As mudanças nas configurações da interface de rede virtual entram em vigor somente após o reinício da VM.

Recursos adicionais

6.3. Exemplo de configuração de XML de máquina virtual

A configuração XML de uma VM, também chamada de domain XML, determina as configurações e componentes da VM. A tabela a seguir mostra seções de uma amostra da configuração XML de uma máquina virtual (VM) e explica o conteúdo.

Para obter a configuração XML de uma VM, você pode usar o comando virsh dumpxml seguido do nome da VM.

# virsh dumpxml testguest1

Tabela 6.1. Exemplo de configuração XML

Seção XML de domínioDescrição
<domain type='kvm'>
 <name>Testguest1</name>
 <uuid>ec6fbaa1-3eb4-49da-bf61-bb02fbec4967</uuid>
 <memory unit='KiB'>1048576</memory>
 <currentMemory unit='KiB'>1048576</currentMemory>

Esta é uma máquina virtual KVM chamada Testguest1, com 1024 MiB de RAM alocada.

 <vcpu placement='static'>1</vcpu>

A VM é alocada com uma única CPU virtual (vCPU).

Para informações sobre a configuração de vCPUs, veja Seção 16.5, “Otimizando o desempenho da CPU da máquina virtual”.

 <os>
  <type arch='x86_64' machine='pc-q35-4.1'>hvm</type>
  <boot dev='hd'/>
 </os>

A arquitetura da máquina está ajustada à arquitetura AMD64 e Intel 64, e usa o tipo de máquina Intel Q35 para determinar a compatibilidade dos recursos. O sistema operacional está configurado para ser inicializado a partir do disco rígido.

Para informações sobre como criar uma VM com um sistema operacional instalado, veja Seção 2.2.2, “Criação de máquinas virtuais e instalação de sistemas operacionais convidados usando o console web”.

 <features>
  <acpi/>
  <apic/>
  <vmport state='off'/>
 </features>

Os recursos do hipervisor acpi e apic estão desativados e a porta VMWare IO está desligada.

 <cpu mode='host-model' check='partial'>

As definições de CPU do host a partir das capacidades XML (obtidas com virsh capabilities) são automaticamente copiadas para a configuração XML da VM. Portanto, quando a VM é inicializada, libvirt escolhe um modelo de CPU que é similar à CPU do host, e então adiciona características extras para aproximar o modelo do host o mais próximo possível.

 <clock offset='utc'>
  <timer name='rtc' tickpolicy='catchup'/>
  <timer name='pit' tickpolicy='delay'/>
  <timer name='hpet' present='no'/>
 </clock>

O relógio de hardware virtual da VM usa o fuso horário UTC. Além disso, três temporizadores diferentes são configurados para sincronização com o hipervisor QEMU.

 <on_poweroff>destroy</on_poweroff>
 <on_reboot>restart</on_reboot>
 <on_crash>destroy</on_crash>

Quando a VM desliga, ou seu sistema operacional termina inesperadamente, libvirt termina a VM e libera todos os seus recursos alocados. Quando a VM é reinicializada, libvirt a reinicia com a mesma configuração.

 <pm>
  <suspend-to-mem enabled='no'/>
  <suspend-to-disk enabled='no'/>
 </pm>

Os estados S3 e S4 ACPI do sono estão desativados para esta VM.

 <devices>
  <emulator>/usr/bin/qemu-kvm</emulator>
  <disk type='file' device='disk'>
   <driver name='qemu' type='qcow2'/>
   <source file='/var/lib/libvirt/images/Testguest.qcow2'/>
   <target dev='hda' bus='ide'/>
   <address type='drive' controller='0' bus='0' target='0' unit='0'/>
  </disk>
  <disk type='file' device='cdrom'>
   <driver name='qemu' type='raw'/>
   <target dev='hdb' bus='ide'/>
   <readonly/>
   <address type='drive' controller='0' bus='0' target='0' unit='1'/>
  </disk>

A VM usa o arquivo binário /usr/bin/qemu-kvm para emulação. Além disso, ele tem dois discos anexados. O primeiro disco é um disco rígido virtualizado baseado no /var/lib/libvirt/images/Testguest.qcow2 armazenado no host, e seu nome de dispositivo lógico está definido para hda.

  <controller type='usb' index='0' model='qemu-xhci' ports='15'>
   <address type='pci' domain='0x0000' bus='0x02' slot='0x00' function='0x0'/>
  </controller>
  <controller type='sata' index='0'>
   <address type='pci' domain='0x0000' bus='0x00' slot='0x1f' function='0x2'/>
  </controller>
  <controller type='pci' index='0' model='pcie-root'/>
  <controller type='pci' index='1' model='pcie-root-port'>
   <model name='pcie-root-port'/>
   <target chassis='1' port='0x10'/>
    <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0' multifunction='on'/>
  </controller>
  <controller type='pci' index='2' model='pcie-root-port'>
   <model name='pcie-root-port'/>
   <target chassis='2' port='0x11'/>
    <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x1'/>
  </controller>
  <controller type='pci' index='3' model='pcie-root-port'>
   <model name='pcie-root-port'/>
   <target chassis='3' port='0x12'/>
    <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x2'/>
  </controller>
  <controller type='pci' index='4' model='pcie-root-port'>
   <model name='pcie-root-port'/>
   <target chassis='4' port='0x13'/>
    <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x3'/>
  </controller>
  <controller type='pci' index='5' model='pcie-root-port'>
   <model name='pcie-root-port'/>
   <target chassis='5' port='0x14'/>
     <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x4'/>
  </controller>
  <controller type='pci' index='6' model='pcie-root-port'>
   <model name='pcie-root-port'/>
   <target chassis='6' port='0x15'/>
    <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x5'/>
  </controller>
  <controller type='pci' index='7' model='pcie-root-port'>
   <model name='pcie-root-port'/>
   <target chassis='7' port='0x16'/>
   <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x6'/>
  </controller>
  <controller type='virtio-serial' index='0'>
   <address type='pci' domain='0x0000' bus='0x03' slot='0x00' function='0x0'/>
  </controller>

A VM usa um único controlador para anexar dispositivos USB, e um controlador raiz para dispositivos PCI-Express (PCIe). Além disso, está disponível uma controladora virtio-serial, que permite que a VM interaja com o host de diversas maneiras, como o console serial.

Para mais informações sobre dispositivos virtuais, veja Seção 10.5, “Tipos de dispositivos virtuais”.

 <interface type='network'>
  <mac address='52:54:00:65:29:21'/>
  <source network='default'/>
  <model type='rtl8139'/>
  <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
 </interface>

Uma interface de rede é estabelecida na VM que utiliza a rede virtual default e o modelo de dispositivo de rede rtl8139.

Para informações sobre como configurar a interface de rede, veja Seção 16.6, “Otimizando o desempenho da rede de máquinas virtuais”.

  <serial type='pty'>
   <target type='isa-serial' port='0'>
    <model name='isa-serial'/>
   </target>
  </serial>
  <console type='pty'>
   <target type='serial' port='0'/>
  </console>
  <channel type='unix'>
   <target type='virtio' name='org.qemu.guest_agent.0'/>
   <address type='virtio-serial' controller='0' bus='0' port='1'/>
  </channel>
  <channel type='spicevmc'>
   <target type='virtio' name='com.redhat.spice.0'/>
    <address type='virtio-serial' controller='0' bus='0' port='2'/>
  </channel>

Um console serial pty é instalado na VM, o que permite a comunicação rudimentar da VM com o host. O console utiliza o canal UNIX na porta 1, e o paravirtualizado SPICE na porta 2. Isto é configurado automaticamente e não é recomendável alterar estas configurações.

Para mais informações sobre como interagir com VMs, veja Seção 2.4.1, “Interagindo com máquinas virtuais usando o console web”.

  <input type='tablet' bus='usb'>
   <address type='usb' bus='0' port='1'/>
  </input>
  <input type='mouse' bus='ps2'/>
  <input type='keyboard' bus='ps2'/>

A VM usa uma porta virtual usb, que é configurada para receber a entrada do tablet, e uma porta virtual ps2 configurada para receber a entrada do mouse e do teclado. Esta é configurada automaticamente e não é recomendável alterar estas configurações.

  <graphics type='spice' autoport='yes' listen='127.0.0.1'>
   <listen type='address' address='127.0.0.1'/>
   <image compression='off'/>
  </graphics>
  <graphics type='vnc' port='-1' autoport='yes' listen='127.0.0.1'>
   <listen type='address' address='127.0.0.1'/>
  </graphics>

A VM usa os protocolos vnc e SPICE para renderizar sua saída gráfica, e a compressão de imagem é desligada.

  <sound model='ich6'>
   <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
  </sound>
  <video>
   <model type='qxl' ram='65536' vram='65536' vgamem='16384' heads='1' primary='yes'/>
   <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
  </video>

Um dispositivo de som ICH6 HDA é configurado para a VM, e o dispositivo paravirtualizado QEMU QXL é configurado como o acelerador de vídeo. Isto é configurado automaticamente e não é recomendável alterar estas configurações.

  <redirdev bus='usb' type='spicevmc'>
   <address type='usb' bus='0' port='1'/>
  </redirdev>
  <redirdev bus='usb' type='spicevmc'>
   <address type='usb' bus='0' port='2'/>
  </redirdev>
  <memballoon model='virtio'>
   <address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/>
  </memballoon>
 </devices>
</domain>

A VM tem dois redirecionadores para anexar dispositivos USB remotamente, e o balonamento de memória é ligado. Isto é configurado automaticamente e não é recomendável alterar estas configurações.

Capítulo 7. Salvando e restaurando máquinas virtuais

Para liberar os recursos do sistema, você pode desligar uma máquina virtual (VM) rodando nesse sistema. Entretanto, quando você precisar da VM novamente, você deve inicializar o sistema operacional (SO) convidado e reiniciar as aplicações, o que pode levar um tempo considerável. Para reduzir este tempo de inatividade e permitir que a carga de trabalho da VM comece a funcionar mais cedo, você pode usar o recurso de salvar e restaurar para evitar o desligamento do SO e a seqüência de inicialização totalmente.

Esta seção fornece informações sobre como salvar VMs, bem como sobre como restaurá-las ao mesmo estado sem um boot-up completo de VMs.

7.1. Como funciona a economia e a restauração de máquinas virtuais

Salvar uma máquina virtual (VM) salva sua memória e o estado do dispositivo no disco do host, e pára imediatamente o processo da VM. Você pode salvar uma VM que esteja em estado de funcionamento ou em pausa, e ao ser restaurada, a VM retornará a esse estado.

Este processo libera recursos de RAM e CPU no sistema hospedeiro em troca de espaço em disco, o que pode melhorar o desempenho do sistema hospedeiro. Quando a VM é restaurada, porque o sistema operacional convidado não precisa ser inicializado, o longo período de inicialização também é evitado.

Para salvar uma VM, você pode usar a interface de linha de comando (CLI). Para instruções, consulte Salvando máquinas virtuais usando a interface de linha de comando.

Para restaurar uma VM, você pode usar o CLI ou o GUI do console web.

7.2. Salvando uma máquina virtual usando a interface de linha de comando

Para salvar uma máquina virtual (VM) usando a linha de comando, siga o procedimento abaixo.

Pré-requisitos

  • Certifique-se de ter espaço suficiente em disco para salvar o VM e sua configuração. Observe que o espaço ocupado pela VM depende da quantidade de RAM alocada a essa VM.
  • Certifique-se de que o VM seja persistente.
  • Optional: Faça backup de dados importantes do VM, se necessário.

Procedimento

  • Use o utilitário virsh managedsave.

    Por exemplo, o seguinte comando pára o VM demo-guest1 e salva sua configuração.

    # virsh managedsave demo-guest1
    Domain demo-guest1 saved by libvirt

    O arquivo VM salvo está localizado, por padrão, no diretório /var/lib/libvirt/qemu/save como demo-guest1.save.

    Na próxima vez que o VM for iniciado, ele restaurará automaticamente o estado salvo do arquivo acima.

Verificação

  • Você pode se certificar de que a VM está em estado salvo ou desligada usando o utilitário virsh list.

    Para listar as VMs que conseguiram salvar habilitadas, use o seguinte comando. As VMs listadas como saved têm seu salvamento gerenciado habilitado.

    # virsh list --managed-save --all
    Id    Name                           State
    ----------------------------------------------------
    -     demo-guest1                    saved
    -     demo-guest2                    shut off

    Para listar as VMs que têm uma imagem gerenciada salvar:

    # virsh list --with-managed-save --all
    Id    Name                           State
    ----------------------------------------------------
    -     demo-guest1                    shut off

    Note que para listar as VMs salvas que estão em estado de desligamento, você deve usar as opções --all ou --inactive com o comando.

Solução de problemas

  • Se o arquivo VM salvo se tornar corrompido ou ilegível, a restauração da VM iniciará uma inicialização padrão da VM.

Recursos adicionais

7.3. Iniciando uma máquina virtual usando a interface de linha de comando

Você pode usar a interface de linha de comando para iniciar uma máquina virtual de desligamento (VM) ou restaurar uma VM salva. Siga o procedimento abaixo.

Pré-requisitos

  • Um VM inativo que já está definido.
  • O nome do VM.
  • Para VMs remotas:

    • O endereço IP do host onde a VM está localizada.
    • Privilégios de acesso à raiz para o anfitrião.

Procedimento

  • Para uma VM local, use o utilitário virsh start.

    Por exemplo, o seguinte comando inicia o demo-guest1 VM.

    # virsh start demo-guest1
    Domain demo-guest1 started
  • Para uma VM localizada em um host remoto, use o utilitário virsh start junto com a conexão SSH QEMU com o host.

    Por exemplo, o seguinte comando inicia o VM demo-guest1 no host 192.168.123.123.

    # virsh -c qemu+ssh://root@192.168.123.123/system start demo-guest1
    
    root@192.168.123.123's password:
    Last login: Mon Feb 18 07:28:55 2019
    
    Domain demo-guest1 started

Recursos adicionais

  • Para mais argumentos virsh start, use virsh start --help.
  • Para simplificar o gerenciamento de VM em hosts remotos, veja modificando sua configuração de libvirt e SSH.
  • Você pode usar o utilitário virsh autostart para configurar uma VM para iniciar automaticamente quando o host iniciar. Para mais informações sobre o autostart, consulte a página de ajuda virsh autostart.

7.4. Inicialização de máquinas virtuais usando o console web

Se uma máquina virtual (VM) estiver no estado shut off, você pode iniciá-la usando o console web RHEL 8.

Pré-requisitos

Procedimento

  1. Na interface das Máquinas Virtuais, clique na linha da VM que você deseja iniciar.

    A linha se expande para revelar o painel Overview com informações básicas sobre o VM selecionado e controles para desligar e excluir o VM.

  2. Clique em Run.

    A VM inicia, e você pode se conectar a seu console ou saída gráfica.

  3. Optional: Para configurar a VM para iniciar automaticamente quando o host iniciar, clique na caixa de seleção Autostart.

Recursos adicionais

Capítulo 8. Clonagem de máquinas virtuais

Para criar rapidamente uma nova máquina virtual (VM) com um conjunto específico de propriedades, você pode clone uma VM existente.

A clonagem cria uma nova VM que usa sua própria imagem de disco para armazenamento, mas a maioria da configuração e dos dados armazenados do clone é idêntica à da VM de origem. Isto torna possível preparar uma série de VMs otimizadas para uma determinada tarefa, sem a necessidade de otimizar cada VM individualmente.

8.1. Como funciona a clonagem de máquinas virtuais

A clonagem de uma máquina virtual (VM) copia a configuração XML da VM de origem e suas imagens em disco, e faz ajustes nas configurações para garantir a singularidade da nova VM. Isto inclui mudar o nome da VM e garantir que ela utilize os clones das imagens de disco. No entanto, os dados armazenados nos discos virtuais do clone são idênticos aos da VM de origem.

Este processo é mais rápido do que criar uma nova VM e instalá-la com um sistema operacional convidado, e pode ser usado para gerar rapidamente VMs com uma configuração e conteúdo específicos.

Se você está planejando criar vários clones de uma VM, primeiro crie uma VM template que não contenha:

  • Configurações únicas, tais como a configuração persistente da rede MAC, que podem impedir que os clones funcionem corretamente.
  • Dados sensíveis, tais como chaves SSH e arquivos de senhas.

Para instruções, ver Seção 8.2, “Criação de um modelo de máquina virtual”.

Para clonar um VM, você pode usar o RHEL 8 CLI. Para maiores detalhes, veja Seção 8.3, “Clonagem de uma máquina virtual usando a interface de linha de comando”.

8.2. Criação de um modelo de máquina virtual

Para garantir que os clones da máquina virtual (VM) funcionem corretamente, remova as informações e configurações exclusivas da VM de origem, tais como chaves SSH ou configuração de MAC de rede persistente, antes de clonar a VM de origem.

Isto cria uma VM template, que pode ser usada para criar clones de VM com facilidade e segurança.

Pré-requisitos

  • O utilitário virt-sysprep está instalado em seu host:

    # yum install /usr/bin/virt-sysprep
  • A VM pretendida como modelo é desligada.
  • Você deve saber onde se encontra a imagem em disco da VM de origem, e ser o proprietário do arquivo de imagem em disco da VM.

    Note que as imagens em disco para VMs criadas na sessão de libvirt do sistema estão por padrão localizadas no diretório /var/lib/libvirt/images e pertencem ao usuário root:

    # ls -la /var/lib/libvirt/images
    -rw-------.  1 root root  9665380352 Jul 23 14:50 a-really-important-vm.qcow2
    -rw-------.  1 root root  8591507456 Jul 26  2017 an-actual-vm-that-i-use.qcow2
    -rw-------.  1 root root  8591507456 Jul 26  2017 totally-not-a-fake-vm.qcow2
    -rw-------.  1 root root 10739318784 Sep 20 17:57 another-vm-example.qcow2
  • Optional: Qualquer dado importante no disco da VM foi copiado. Se você quiser preservar a VM de origem intacta, clone-a primeiro e edite o clone para criar um modelo.

Procedimento

  1. Certifique-se de estar logado como o proprietário da imagem em disco da VM:

    # whoami
    root
  2. Optional: Copiar a imagem do disco da VM.

    # cp /var/lib/libvirt/images/a-really-important-vm.qcow2 /var/lib/libvirt/images/a-really-important-vm-original.qcow2

    Isto é usado posteriormente para verificar se a VM foi transformada com sucesso em um modelo.

  3. Use o seguinte comando, e substitua /var/lib/libvirt/images/a-really-important-vm.qcow2 pelo caminho para a imagem em disco da fonte VM.

    # virt-sysprep -a /var/lib/libvirt/images/a-really-important-vm.qcow2
    [   0.0] Examining the guest ...
    [   7.3] Performing "abrt-data" ...
    [   7.3] Performing "backup-files" ...
    [   9.6] Performing "bash-history" ...
    [   9.6] Performing "blkid-tab" ...
    [...]

Verificação

  • Para confirmar que o processo foi bem sucedido, compare a imagem modificada do disco com a original. O exemplo a seguir mostra uma criação bem sucedida de um modelo:

    # virt-diff -a /var/lib/libvirt/images/a-really-important-vm-orig.qcow2 -A /var/lib/libvirt/images/a-really-important-vm.qcow2
    - - 0644       1001 /etc/group-
    - - 0000        797 /etc/gshadow-
    = - 0444         33 /etc/machine-id
    [...]
    - - 0600        409 /home/username/.bash_history
    - d 0700          6 /home/username/.ssh
    - - 0600        868 /root/.bash_history
    [...]

Recursos adicionais

  • Usando o comando virt-sysprep, como mostrado acima, executa a preparação padrão do modelo VM. Para mais informações, consulte a seção OPERATIONS na página de manual virt-sysprep.

    Para personalizar quais operações específicas você deseja que virt-sysprep realize, use a opção --operations e especifique as operações pretendidas como uma lista separada por vírgulas.

  • Para instruções sobre a clonagem de um modelo VM, veja Seção 8.3, “Clonagem de uma máquina virtual usando a interface de linha de comando”.

8.3. Clonagem de uma máquina virtual usando a interface de linha de comando

Para criar rapidamente uma nova máquina virtual (VM) com um conjunto específico de propriedades, por exemplo, para fins de teste, você pode clonar uma VM existente. Para fazer isso utilizando a CLI, siga as instruções abaixo.

Pré-requisitos

  • A fonte VM está desligada.
  • Garantir que haja espaço suficiente em disco para armazenar as imagens do disco clonado.
  • Optional: Ao criar vários clones de VMs, remova dados e configurações exclusivas da VM de origem para garantir que as VMs clonadas funcionem corretamente. Para instruções, veja Seção 8.2, “Criação de um modelo de máquina virtual”.

Procedimento

  1. Use o utilitário virt-clone com opções apropriadas para seu ambiente e caso de uso.

    Sample use cases

    • O seguinte comando clona um VM local chamado doppelganger e cria o VM doppelganger-clone. Ele também cria a imagem do disco doppelganger-clone.qcow2 no mesmo local que a imagem do disco da VM original, e com os mesmos dados:

      # virt-clone --original doppelganger --auto-clone
      Allocating 'doppelganger-clone.qcow2'                            | 50.0 GB  00:05:37
      
      Clone 'doppelganger-clone' created successfully.
    • O seguinte comando clona uma VM chamada geminus1, e cria uma VM local chamada geminus2, que usa apenas dois dos múltiplos discos de geminus1.

      # virt-clone --original geminus1 --name geminus2 --file /var/lib/libvirt/images/disk1.qcow2 --file /var/lib/libvirt/images/disk2.qcow2
      Allocating 'disk1-clone.qcow2'                                      | 78.0 GB  00:05:37
      Allocating 'disk2-clone.qcow2'                                      | 80.0 GB  00:05:37
      
      Clone 'geminus2' created successfully.
    • Para clonar seu VM para um host diferente, migre o VM sem indefini-lo para o host local. Por exemplo, os seguintes comandos clonam a VM previamente criada geminus2 para o sistema remoto 10.0.0.1, incluindo seus discos locais. Note que a utilização destes comandos também requer privilégios de root para a 10.0.0.1.

      # virsh migrate --offline --persistent geminus2 qemu+ssh://root@10.0.0.1/system
      root@10.0.0.1's password:
      
      # scp /var/lib/libvirt/images/disk1-clone.qcow2 root@10.0.0.1/user@remote_host.com://var/lib/libvirt/images/
      
      # scp /var/lib/libvirt/images/disk2-clone.qcow2 root@10.0.0.1/user@remote_host.com://var/lib/libvirt/images/

Verificação

Para verificar se o VM foi clonado com sucesso e está funcionando corretamente:

  1. Confirme se o clone foi adicionado à lista de VMs em seu host.

    # virsh list --all
    Id   Name                  State
    ---------------------------------------
    -    doppelganger          shut off
    -    doppelganger-clone    shut off
  2. Comece o clone e observe se ele se inicia.

    # virsh start doppelganger-clone
    Domain doppelganger-clone started

Recursos adicionais

  • Para opções adicionais de clonagem de VMs, consulte a página de manual virt-clone.
  • Para detalhes sobre como mover os clones de VM para um host diferente, incluindo informações sobre solução de problemas, veja Capítulo 9, Migração de máquinas virtuais.

Capítulo 9. Migração de máquinas virtuais

Se o host atual de uma máquina virtual (VM) tornar-se inadequado ou não puder mais ser usado, ou se você quiser redistribuir a carga de trabalho do host, você pode migrar a VM para outro host KVM.

9.1. Como funciona a migração de máquinas virtuais

A parte essencial da migração da máquina virtual (VM) é copiar a configuração XML de uma VM para uma máquina host diferente. Se a VM migrada não for desligada, a migração também transfere o estado da memória da VM e quaisquer dispositivos virtualizados para uma máquina host de destino. Para que a VM permaneça funcional no host de destino, as imagens em disco da VM devem permanecer disponíveis para ela.

Por padrão, a VM migrada é transitória no host de destino, e permanece definida também no host de origem.

Você pode migrar uma VM em funcionamento usando live ou non-live migrações. Para migrar uma VM desligada, você deve usar uma migração offline. Para detalhes, consulte a tabela a seguir.

Tabela 9.1. Tipos de migração VM

Tipo de migraçãoDescriçãoEstojo de usoRequisitos de armazenamento

Live migration

A VM continua a funcionar na máquina host de origem enquanto a KVM está transferindo as páginas de memória da VM para o host de destino. Quando a migração está quase completa, a KVM suspende muito brevemente a VM, e a retoma no host de destino.

Útil para VMs que requerem tempo de atividade constante. Entretanto, as VMs que modificam páginas de memória mais rapidamente do que a KVM pode transferi-las, como as VMs sob carga pesada de E/S, não podem ser migradas ao vivo, e non-live migration deve ser utilizado em seu lugar.

As imagens em disco da VM devem estar localizadas em uma rede compartilhada, acessível tanto para o host de origem quanto para o host de destino.

Non-live migration

Suspende o VM, copia sua configuração e sua memória para o host de destino, e retoma o VM.

Cria tempo ocioso para o VM, mas geralmente é mais confiável do que a migração ao vivo. Recomendado para as VMs sob carga pesada de E/S.

As imagens em disco da VM devem estar localizadas em uma rede compartilhada, acessível tanto para o host de origem quanto para o host de destino.

Offline migration

Move a configuração da VM para o host de destino

Recomendado para VMs de desligamento.

As imagens em disco da VM não precisam estar disponíveis em uma rede compartilhada e podem ser copiadas ou movidas manualmente para o host de destino.

Recursos adicionais

9.2. Benefícios da migração de máquinas virtuais

A migração de máquinas virtuais (VMs) pode ser útil:

Balanceamento de carga
As VMs podem ser movidas para máquinas host com menor utilização se seu host ficar sobrecarregado, ou se outro host for subutilizado.
Independência do hardware
Quando você precisar atualizar, adicionar ou remover dispositivos de hardware na máquina host, você pode realocar com segurança as VMs para outros hosts. Isto significa que as VMs não sofrem nenhum tempo de inatividade para melhorias de hardware.
Economia de energia
As VMs podem ser redistribuídas para outros hosts, e os sistemas host descarregados podem assim ser desligados para economizar energia e cortar custos durante períodos de baixa utilização.
Migração geográfica
Os VMs podem ser movidos para outro local físico por baixa latência ou quando necessário por outros motivos.

9.3. Limitações para a migração de máquinas virtuais

Antes de migrar máquinas virtuais (VMs) no RHEL 8, certifique-se de estar ciente das limitações da migração.

  • A migração de armazenamento ao vivo não pode ser realizada no RHEL 8, mas você pode migrar o armazenamento enquanto a VM estiver desligada. Note que a migração de armazenamento ao vivo está disponível na Red Hat Virtualization.
  • Migrar VMs de ou para uma sessão de usuário de libvirt não é confiável e, portanto, não é recomendado.
  • As VMs que utilizam certas características e configurações não funcionarão corretamente se migradas, ou a migração falhará. Tais características incluem:

    • Passagem do dispositivo
    • Atribuição de dispositivos SR-IOV
    • Dispositivos mediados, tais como vGPUs
    • Acesso de Memória Não-Uniforme (NUMA)

9.4. Compartilhar imagens de disco de máquinas virtuais com outros anfitriões

Para realizar uma migração ao vivo de uma máquina virtual (VM) entre hosts KVM suportados, é necessário o armazenamento compartilhado de VM. Esta seção fornece instruções para compartilhar uma imagem VM armazenada localmente com o host de origem e o host de destino usando o protocolo NFS.

Pré-requisitos

  • O VM destinado à migração é desativado.
  • Optional: Está disponível um sistema host para hospedar o armazenamento que não é o host de origem ou destino, mas tanto o host de origem quanto o host de destino podem alcançá-lo através da rede. Esta é a solução ideal para o armazenamento compartilhado e é recomendada pela Red Hat.
  • Certifique-se de que o travamento de arquivos NFS não seja usado, pois não é suportado no KVM.
  • O NFS é instalado e habilitado nos hosts de origem e destino. Se não estiver:

    1. Instalar os pacotes NFS:

      # yum install nfs-utils
    2. Certifique-se de que as portas para NFS em iptables (como 2049) estejam abertas no firewall.

      # firewall-cmd --permanent --add-service=nfs
      # firewall-cmd --permanent --add-service=mountd
      # firewall-cmd --permanent --add-service=rpc-bind
      # firewall-cmd --permanent --add-port=2049/tcp
      # firewall-cmd --permanent --add-port=2049/udp
      # firewall-cmd --reload
    3. Iniciar o serviço de NFS.

      # systemctl start nfs-server

Procedimento

  1. Conecte-se ao anfitrião que fornecerá o armazenamento compartilhado. Neste exemplo, é o anfitrião cargo-bay:

    # ssh root@cargo-bay
    root@cargo-bay's password:
    Last login: Mon Sep 24 12:05:36 2019
    root~#
  2. Crie um diretório que manterá a imagem do disco e será compartilhado com os anfitriões da migração.

    # mkdir /var/lib/libvirt/shared-images
  3. Copie a imagem do disco da VM do host de origem para o diretório recém-criado. Por exemplo, as seguintes cópias da imagem do disco da VM wanderer1 para o diretório /var/lib/libvirt/shared-images/ no host do "cargo-bay":

    # scp /var/lib/libvirt/images/wanderer1.qcow2 root@cargo-bay:/var/lib/libvirt/shared-images/wanderer1.qcow2
  4. No host que você deseja usar para compartilhar o armazenamento, adicione o diretório de compartilhamento ao arquivo /etc/exports. O seguinte exemplo compartilha o diretório /var/lib/libvirt/shared-images com os hosts source-example e dest-example:

    /var/lib/libvirt/libvirt/shared-images source-example(rw,no_root_squash) dest-example(rw,no_root_squash)
  5. Tanto no host de origem quanto no host de destino, monte o diretório compartilhado no diretório /var/lib/libvirt/images:

    # mount cargo-bay:/var/lib/libvirt/shared-images /var/lib/libvirt/images

Verificação

  • Para verificar se o processo foi bem sucedido, inicie o VM no host de origem e observe se ele inicia corretamente.

Recursos adicionais

  • Para informações detalhadas sobre a configuração do NFS, abertura de tabelas IP e configuração do firewall, consulte Exportando ações do NFS.

9.5. Migração de uma máquina virtual usando a interface de linha de comando

Se o host atual de uma máquina virtual (VM) tornar-se inadequado ou não puder mais ser usado, ou se você quiser redistribuir a carga de trabalho do host, você pode migrar a VM para outro host KVM. Esta seção fornece instruções e exemplos para vários cenários de tais migrações.

Pré-requisitos

  • Tanto o hospedeiro de origem quanto o hospedeiro de destino utilizam o hipervisor KVM.
  • O anfitrião de origem e o anfitrião de destino são capazes de alcançar um ao outro através da rede. Use o utilitário ping para verificar isso.
  • Para que a migração seja suportada pela Red Hat, o host de origem e o host de destino devem estar usando sistemas operacionais e tipos de máquinas específicos. Para garantir que este seja o caso, consulte a tabela de compatibilidade da migração da VM.
  • A Red Hat recomenda que as imagens em disco das VMs que serão migradas sejam localizadas em um local de rede separado acessível tanto ao host de origem quanto ao host de destino. Isto é opcional para a migração offline, mas necessário para a migração de uma VM em funcionamento.

    Para instruções de como configurar esse armazenamento de VM compartilhado, veja Seção 9.4, “Compartilhar imagens de disco de máquinas virtuais com outros anfitriões”.

  • Ao migrar uma VM existente em uma rede pública de torneira de ponte, os hosts de origem e destino devem estar localizados na mesma rede. Caso contrário, a rede da VM não operará após a migração.

Procedimento

  1. Certifique-se de que o serviço libvirtd esteja habilitado e funcionando.

    # systemctl enable libvirtd.service
    # systemctl restart libvirtd.service
  2. Use o comando virsh migrate com opções apropriadas para suas necessidades de migração.

    • O seguinte migra o wanderer1 VM de seu host local para a sessão do sistema do host dest-example. O VM permanecerá em funcionamento durante a migração.

      # virsh migrate --persistent --live wanderer1 qemu ssh://dest-example/system
    • O seguinte permite que você faça ajustes manuais na configuração da VM wanderer2 rodando em seu host local, e depois migre a VM para o host dest-example. A VM migrada utilizará automaticamente a configuração atualizada.

      # virsh dumpxml --migratable wanderer2 >wanderer2.xml
      # vi wanderer2.xml
      # virsh migrate --live --persistent --xml wanderer2.xml wanderer2 qemu+ssh://dest-example/system

      Este procedimento pode ser útil, por exemplo, quando o host de destino precisa usar um caminho diferente para acessar o armazenamento compartilhado da VM ou ao configurar um recurso específico para o host de destino.

    • O seguinte suspende o wanderer3 VM do host source-example, o migra para o host dest-example e o instrui a usar a configuração XML ajustada, fornecida pelo arquivo wanderer3-alt.xml. Quando a migração for concluída, libvirt retomará a VM no host de destino.

      # virsh migrate wanderer3 qemu ssh://source-example/system qemu ssh://dest-example/system --xml wanderer3-alt.xml

      Após a migração, a VM permanece no estado suspenso no host de origem, e a cópia migrada é apagada após ser desligada.

    • O seguinte elimina o desligamento wanderer4 VM do host source-example, e move sua configuração para o host dest-example.

      # virsh migrate --offline --persistent --undefinesource wanderer4 qemu ssh://source-example/system qemu ssh://dest-example/system

      Note que este tipo de migração não requer mover a imagem do disco da VM para o armazenamento compartilhado. Entretanto, para que a VM possa ser utilizada no host de destino, é necessário migrar a imagem de disco da VM. Por exemplo, a imagem de disco da VM:

      # scp root@source-example:/var/lib/libvirt/images/wanderer4.qcow2 root@dest-example:/var/lib/libvirt/images/wanderer4.qcow2
  3. Esperar que a migração seja concluída. O processo pode levar algum tempo, dependendo da largura de banda da rede, da carga do sistema e do tamanho da VM. Se a opção --verbose não for utilizada para virsh migrate, a CLI não exibirá nenhum indicador de progresso, exceto erros.

    Quando a migração estiver em andamento, você pode usar o utilitário virsh domjobinfo para exibir as estatísticas de migração.

Verificação

  • No host de destino, liste as VMs disponíveis para verificar se a VM foi migrada:

    # virsh list
    Id Name                 State
    ----------------------------------
    10 wanderer1              running

    Note que se a migração ainda estiver em execução, este comando listará o estado da VM como paused.

Solução de problemas

  • Em alguns casos, o host alvo não será compatível com certos valores da configuração XML da VM migrada, tais como o nome da rede ou tipo de CPU. Como resultado, a VM não inicializará no host de destino. Para corrigir estes problemas, você pode atualizar os valores problemáticos usando o comando virsh edit.
  • Se uma migração ao vivo está demorando muito tempo para ser concluída, isto pode ser porque o VM está sob carga pesada e muitas páginas de memória estão mudando para que a migração ao vivo seja possível. Para resolver este problema, mude a migração para uma não viva, suspendendo a VM.

    # virsh suspend wanderer1

Recursos adicionais

  • Para outras opções e exemplos de migração de máquinas virtuais, use virsh migrate --help ou consulte a página de manual virsh.

9.6. Anfitriões suportados para a migração de máquinas virtuais

Para que a migração da máquina virtual (VM) funcione corretamente e seja suportada pela Red Hat, os hosts de origem e destino devem ser versões específicas da RHEL e tipos de máquina. A tabela a seguir mostra os caminhos de migração suportados pela VM.

Tabela 9.2. Compatibilidade com a migração ao vivo

Método de migraçãoTipo de liberaçãoExemploStatus de suporte

Avançar

Lançamento principal

7.6 → 8.1

Em sistemas RHEL 7 suportados: tipos de máquinas i440fx e q35

Para trás

Lançamento principal

8.1 → 7.6

Em sistemas RHEL 8 suportados: tipos de máquinas i440fx e q35

Avançar

Pequena liberação

8.0.1 → 8.1

Em sistemas RHEL 7 suportados: tipos de máquinas i440fx e q35 em RHEL 7.6.0 e posteriores.

Em sistemas RHEL 8 suportados: tipo de máquina q35.

Para trás

Pequena liberação

8.1 → 8.0.1

Em sistemas RHEL 7 suportados. Totalmente compatível com os tipos de máquinas i440fx e q35.

Em sistemas RHEL 8 suportados: tipo de máquina q35.

Recursos adicionais

9.7. Recursos adicionais

  • Você também pode migrar VMs de um hypervisor não KVM para um host RHEL 7 ou RHEL 8. Isto também é referido como um V2V conversion, e você pode encontrar informações e instruções adicionais na Base de Conhecimento da Red Hat.

Capítulo 10. Gerenciamento de dispositivos virtuais

Uma das formas mais eficazes de gerenciar a funcionalidade, as características e o desempenho de uma máquina virtual (VM) é ajustar seu virtual devices.

As seções seguintes fornecem uma visão geral do que são dispositivos virtuais, e instruções sobre como eles podem ser anexados, modificados ou removidos de um VM.

10.1. Como funcionam os dispositivos virtuais

O básico

Assim como as máquinas físicas, as máquinas virtuais (VMs) requerem dispositivos especializados para fornecer funções ao sistema, tais como poder de processamento, memória, armazenamento, rede ou gráficos. Os sistemas físicos geralmente usam dispositivos de hardware para estes fins. Entretanto, como as VMs funcionam como implementos de software, elas precisam utilizar abstrações de software de tais dispositivos em seu lugar, referidas como virtual devices.

Os dispositivos virtuais conectados a uma VM podem ser configurados ao criar a VM, e também podem ser gerenciados em uma VM existente. Geralmente, os dispositivos virtuais podem ser conectados ou desligados de uma VM somente quando a VM é desligada, mas alguns podem ser adicionados ou removidos quando a VM está em funcionamento. Este recurso é chamado de dispositivo hot plug e hot unplug.

Ao criar uma nova VM, libvirt cria e configura automaticamente um conjunto padrão de dispositivos virtuais essenciais, a menos que especificado de outra forma pelo usuário. Estes são baseados na arquitetura do sistema host e no tipo de máquina, e normalmente incluem:

  • a CPU
  • memória
  • um teclado
  • um controlador de interface de rede (NIC)
  • vários controladores de dispositivos
  • uma placa de vídeo
  • uma placa de som

Para gerenciar dispositivos virtuais após a criação da VM, utilize a interface de linha de comando (CLI). Entretanto, para gerenciar dispositivos de armazenamento virtual e DNIs, você também pode usar o console web RHEL 8.

Desempenho ou flexibilidade

Para alguns tipos de dispositivos, o RHEL 8 suporta múltiplas implementações, muitas vezes com um trade-off entre desempenho e flexibilidade.

Por exemplo, o armazenamento físico utilizado para discos virtuais pode ser representado por arquivos em vários formatos, tais como qcow2 ou raw, e apresentado à VM utilizando uma variedade de controladores:

  • um controlador emulado
  • virtio-scsi
  • virtio-blk

Um controlador emulado é mais lento do que um controlador virtio, porque os dispositivos virtio são projetados especificamente para fins de virtualização. Por outro lado, os controladores emulados permitem executar sistemas operacionais que não possuem controladores para os dispositivos virtio. Da mesma forma, virtio-scsi oferece um suporte mais completo para comandos SCSI, e torna possível anexar um número maior de discos à VM. Finalmente, virtio-blk oferece melhor desempenho do que virtio-scsi e controladores emulados, mas uma gama mais limitada de casos de uso. Por exemplo, anexar um disco físico como um dispositivo LUN a uma VM não é possível ao utilizar virtio-blk.

Para mais informações sobre os tipos de dispositivos virtuais, veja Seção 10.5, “Tipos de dispositivos virtuais”.

Recursos adicionais

10.2. Fixação de dispositivos em máquinas virtuais

O seguinte fornece informações gerais sobre como criar e anexar dispositivos virtuais a suas máquinas virtuais (VMs) usando a interface de linha de comando (CLI). Alguns dispositivos também podem ser anexados às VMs usando o console web RHEL 8.

Pré-requisitos

  • Obtenha as opções necessárias para o dispositivo que você pretende anexar a uma VM. Para ver as opções disponíveis para um dispositivo específico, use o virt-xml --device=? comando. Por exemplo:

    # virt-xml --network=?
    --network options:
    [...]
    address.unit
    boot_order
    clearxml
    driver_name
    [...]

Procedimento

  1. Para anexar um dispositivo a uma VM, use o comando virt-xml --add-device, incluindo a definição do dispositivo e as opções necessárias:

    • Por exemplo, o seguinte comando cria uma imagem de disco de 20GB newdisk qcow2 no diretório /var/lib/libvirt/images/, e a anexa como um disco virtual ao VM em execução testguest na próxima inicialização do VM:

      # virt-xml testguest --add-device --disk /var/lib/libvirt/images/newdisk.qcow2,format=qcow2,size=20
      Domain 'testguest' defined successfully.
      Changes will take effect after the domain is fully powered off.
    • A seguir é anexada uma unidade flash USB, anexada como dispositivo 004 no ônibus 002 no host, ao VM testguest2 enquanto o VM estiver em funcionamento:

      # virt-xml testguest2 --add-device --update --hostdev 002.004
      Device hotplug successful.
      Domain 'testguest2' defined successfully.

      A combinação ônibus-dispositivo para definir o USB pode ser obtida usando o comando lsusb.

Verificação

Para verificar se o dispositivo foi adicionado, faça uma das seguintes ações:

  • Use o comando virsh dumpxml e veja se a definição XML do dispositivo foi adicionada à seção <devices> na configuração XML da VM.

    Por exemplo, a saída a seguir mostra a configuração da VM testguest e confirma que o dispositivo de disco flash USB 002.004 foi adicionado.

    # virsh dumpxml testguest
    [...]
    <hostdev mode='subsystem' type='usb' managed='yes'>
      <source>
        <vendor id='0x4146'/>
        <product id='0x902e'/>
        <address bus='2' device='4'/>
      </source>
      <alias name='hostdev0'/>
      <address type='usb' bus='0' port='3'/>
    </hostdev>
    [...]
  • Execute o VM e teste se o dispositivo está presente e funciona corretamente.

Recursos adicionais

  • Para maiores informações sobre o uso do comando virt-xml, use man virt-xml.

10.3. Modificando dispositivos ligados a máquinas virtuais

O procedimento a seguir fornece instruções gerais para modificar dispositivos virtuais usando a interface de linha de comando (CLI). Alguns dispositivos conectados à sua VM, tais como discos e DNIs, também podem ser modificados usando o console web RHEL 8.

Pré-requisitos

  • Obtenha as opções necessárias para o dispositivo que você pretende anexar a uma VM. Para ver as opções disponíveis para um dispositivo específico, use o virt-xml --device=? comando. Por exemplo:
# virt-xml --network=?
--network options:
[...]
address.unit
boot_order
clearxml
driver_name
[...]
  • Optional: Faça o backup da configuração XML de sua VM usando virsh dumpxml vm-name e enviando a saída para um arquivo. Por exemplo, o seguinte faz backup da configuração de seu Motoko VM como o arquivo motoko.xml:
# virsh dumpxml Motoko > motoko.xml
# cat motoko.xml
<domain type='kvm' xmlns:qemu='http://libvirt.org/schemas/domain/qemu/1.0'>
  <name>Motoko</name>
  <uuid>ede29304-fe0c-4ca4-abcd-d246481acd18</uuid>
  [...]
</domain>

Procedimento

  1. Use o comando virt-xml --edit, incluindo a definição do dispositivo e as opções necessárias:

    Por exemplo, o seguinte esclarece a configuração <cpu> do desligamento testguest VM e a coloca em host-model:

    # virt-xml testguest --edit --cpu host-model,clearxml=yes
    Domain 'testguest' defined successfully.

Verificação

Para verificar se o dispositivo foi modificado, faça uma das seguintes ações:

  • Executar a VM e testar se o dispositivo está presente e reflete as modificações.
  • Use o comando virsh dumpxml e veja se a definição XML do dispositivo foi modificada na configuração XML da VM.

    Por exemplo, a seguinte saída mostra a configuração da VM testguest e confirma que o modo CPU foi configurado como host-model.

    # virsh dumpxml testguest
    [...]
    <cpu mode='host-model' check='partial'>
      <model fallback='allow'/>
    </cpu>
    [...]

Solução de problemas

  • Se a modificação de um dispositivo fizer com que sua VM fique sem inicialização, use o utilitário virsh define para restaurar a configuração XML, recarregando o arquivo de configuração XML que você fez backup anteriormente.

    # virsh define testguest.xml
Nota

Para pequenas mudanças na configuração XML de sua VM, você pode usar o comando virsh edit - por exemplo virsh edit testguest. Entretanto, não utilize este método para mudanças mais extensas, pois é mais provável que ele quebre a configuração de maneiras que poderiam impedir a VM de arrancar.

Recursos adicionais

  • Para obter detalhes sobre o uso do comando virt-xml, use man virt-xml.

10.4. Remoção de dispositivos de máquinas virtuais

O seguinte fornece informações gerais para remover dispositivos virtuais de suas máquinas virtuais (VMs) usando a interface de linha de comando (CLI). Alguns dispositivos, tais como discos ou NICs, também podem ser removidos das VMs usando o console web RHEL 8.

Pré-requisitos

  • Optional: Faça o backup da configuração XML de sua VM usando virsh dumpxml vm-name e enviando a saída para um arquivo. Por exemplo, o seguinte faz backup da configuração de seu Motoko VM como o arquivo motoko.xml:
# virsh dumpxml Motoko > motoko.xml
# cat motoko.xml
<domain type='kvm' xmlns:qemu='http://libvirt.org/schemas/domain/qemu/1.0'>
  <name>Motoko</name>
  <uuid>ede29304-fe0c-4ca4-abcd-d246481acd18</uuid>
  [...]
</domain>

Procedimento

  1. Use o comando virt-xml --remove-device, incluindo uma definição do dispositivo. Por exemplo:

    • O seguinte retira o dispositivo de armazenamento marcado como vdb do funcionamento testguest VM depois que ele é desligado:

      # virt-xml testguest --remove-device --disk target=vdb
      Domain 'testguest' defined successfully.
      Changes will take effect after the domain is fully powered off.
    • O seguinte remove imediatamente um dispositivo USB flash drive do testguest2 VM em execução:

      # virt-xml testguest2 --remove-device --update --hostdev type=usb
      Device hotunplug successful.
      Domain 'testguest2' defined successfully.

Solução de problemas

  • Se a remoção de um dispositivo fizer com que sua VM fique sem inicialização, use o utilitário virsh define para restaurar a configuração XML, recarregando o arquivo de configuração XML que você fez backup anteriormente.

    # virsh define testguest.xml

Recursos adicionais

  • Para obter detalhes sobre o uso do comando virt-xml, use man virt-xml.

10.5. Tipos de dispositivos virtuais

A virtualização no RHEL 8 pode apresentar vários tipos distintos de dispositivos virtuais que você pode anexar às máquinas virtuais (VMs):

Dispositivos emulados

Os dispositivos emulados são implementações de software de dispositivos físicos amplamente utilizados. Os drivers projetados para dispositivos físicos também são compatíveis com dispositivos emulados. Portanto, os dispositivos emulados podem ser usados de forma muito flexível.

Entretanto, como eles precisam emular fielmente um determinado tipo de hardware, os dispositivos emulados podem sofrer uma perda de desempenho significativa em comparação com os dispositivos físicos correspondentes ou dispositivos virtuais mais otimizados.

Os seguintes tipos de dispositivos emulados são suportados:

  • CPUs virtuais (vCPUs), com uma grande variedade de modelos de CPU disponíveis. O impacto no desempenho da emulação depende significativamente das diferenças entre a CPU hospedeira e a vCPU emulada.
  • Componentes do sistema emulado, tais como controladores de barramento PCI
  • Controladores de armazenamento emulado, tais como SATA, SCSI ou mesmo IDE
  • Dispositivos de som emulado, tais como ICH9, ICH6 ou AC97
  • Placas gráficas emuladas, tais como as placas VGA ou QXL
  • Dispositivos de rede emulada, tais como rtl8139
Dispositivos paravirtualizados

A paravirtualização fornece um método rápido e eficiente para expor dispositivos virtuais a VMs. Os dispositivos paravirtualizados expõem interfaces que são projetadas especificamente para uso em VMs, e assim aumentam significativamente o desempenho do dispositivo. O RHEL 8 fornece dispositivos paravirtualizados para VMs usando a API virtio como uma camada entre o hipervisor e a VM. A desvantagem desta abordagem é que ela requer um driver de dispositivo específico no sistema operacional convidado.

É recomendado o uso de dispositivos paravirtualizados em vez de dispositivos emulados para VM sempre que possível, notadamente se estiverem executando aplicações intensivas de E/S. Os dispositivos paravirtualizados diminuem a latência de E/S e aumentam a produção de E/S, em alguns casos aproximando-os muito do desempenho de metais nobres. Outros dispositivos paravirtualizados também adicionam funcionalidade às VMs que não estão disponíveis de outra forma.

Os seguintes tipos de dispositivos paravirtualizados são suportados:

  • O dispositivo de rede paravirtualizada (virtio-net).
  • Controladores de armazenamento paravirtualizados:

    • virtio-blk - fornece emulação de dispositivos em bloco.
    • virtio-scsi - fornece uma emulação SCSI mais completa.
  • O relógio paravirtualizado.
  • O dispositivo serial paravirtualizado (virtio-serial).
  • O dispositivo balão (virtio-balloon), usado para compartilhar informações sobre o uso da memória do convidado com o hipervisor.

    Observe, entretanto, que o dispositivo de balão também requer que o serviço de balão seja instalado.

  • O gerador de números aleatórios paravirtualizado (virtio-rng).
  • A placa gráfica paravirtualizada (QXL).
Dispositivos fisicamente compartilhados

Certas plataformas de hardware permitem às VMs acessar diretamente vários dispositivos e componentes de hardware. Este processo é conhecido como device assignment ou passthrough.

Quando anexados desta forma, alguns aspectos do dispositivo físico estão diretamente disponíveis para a VM como o seriam para uma máquina física. Isto proporciona um desempenho superior para o dispositivo quando usado na VM. Entretanto, os dispositivos fisicamente conectados a uma VM tornam-se indisponíveis ao host, e também não podem ser migrados.

No entanto, alguns dispositivos podem ser shared em várias VMs. Por exemplo, um único dispositivo físico pode, em certos casos, fornecer múltiplos mediated devices, que podem então ser atribuídos a diferentes VMs.

Os seguintes tipos de dispositivos de passthrough são suportados:

  • Atribuição de dispositivos de E/S de Função Virtual (VFIO) - expõe com segurança os dispositivos a aplicações ou VMs usando DMA reforçado por hardware e isolamento interrompido.
  • USB, PCI e SCSI passthrough - exponha os barramentos padrão comuns da indústria diretamente às VMs, a fim de disponibilizar suas características específicas ao software convidado.
  • Virtualização de E/S de raiz única (SR-IOV) - uma especificação que permite o isolamento reforçado de recursos PCI Express. Isto torna seguro e eficiente a divisão de um único recurso PCI físico em funções PCI virtuais. É comumente usado para placas de interface de rede (NICs).
  • N_Port ID virtualization (NPIV) - uma tecnologia de canal de fibra para compartilhar um único adaptador host bus físico (HBA) com várias portas virtuais.
  • GPUs e vGPUs - aceleradores para tipos específicos de cargas de trabalho gráficas ou computacionais. Algumas GPUs podem ser anexadas diretamente a uma VM, enquanto certos tipos também oferecem a capacidade de criar GPUs virtuais (vGPUs) que compartilham o hardware físico subjacente.

10.6. Gerenciamento de dispositivos USB virtuais

Ao utilizar uma máquina virtual (VM), você pode acessar e controlar um dispositivo USB, como uma unidade flash ou uma câmera web, que é anexado ao sistema host. Neste cenário, o sistema host passa o controle do dispositivo para a VM. Isto também é conhecido como um USB-passthrough.

As seções seguintes fornecem informações sobre o uso da linha de comando para:

10.6.1. Fixação de dispositivos USB em máquinas virtuais

Para anexar um dispositivo USB a uma máquina virtual (VM), você pode incluir as informações do dispositivo USB no arquivo de configuração XML da VM.

Pré-requisitos

  • Certifique-se de que o dispositivo pelo qual você deseja passar para o VM esteja anexado ao host.

Procedimento

  1. Localize os valores do barramento e do dispositivo USB que você deseja anexar à VM.

    Por exemplo, o seguinte comando exibe uma lista de dispositivos USB anexados ao host. O dispositivo que usaremos neste exemplo é anexado no ônibus 001 como dispositivo 005.

    # lsusb
    [...]
    Bus 001 Device 003: ID 2567:0a2b Intel Corp.
    Bus 001 Device 005: ID 0407:6252 Kingston River 2.0
    [...]
  2. Use o utilitário virt-xml junto com o argumento --add-device.

    Por exemplo, o seguinte comando anexa um pen drive USB ao VM Library.

    # virt-xml Library --add-device --hostdev 001.005
    Domain 'Library' defined successfully.
Nota

Para anexar um dispositivo USB a uma VM em execução, adicione o argumento --update ao comando anterior.

Etapas de verificação

  • Execute o VM e teste se o dispositivo está presente e funciona como esperado.
  • Use o comando virsh dumpxml para ver se a definição XML do dispositivo foi adicionada à seção <devices> no arquivo de configuração XML da VM.

    # virsh dumpxml Library
    [...]
    <hostdev mode='subsystem' type='usb' managed='yes'>
      <source>
        <vendor id='0x0407'/>
        <product id='0x6252'/>
        <address bus='1' device='5'/>
      </source>
      <alias name='hostdev0'/>
      <address type='usb' bus='0' port='3'/>
    </hostdev>
    [...]

Recursos adicionais

  • Para outros argumentos, veja a página de manual virt-xml(1).

10.6.2. Remoção de dispositivos USB de máquinas virtuais

Para remover um dispositivo USB de uma máquina virtual (VM), você pode remover as informações do dispositivo USB da configuração XML da VM.

Procedimento

  1. Localize os valores do barramento e do dispositivo USB que você deseja remover da VM.

    Por exemplo, o seguinte comando exibe uma lista de dispositivos USB anexados ao host. O dispositivo que usaremos neste exemplo é anexado no ônibus 001 como dispositivo 005.

    # lsusb
    [...]
    Bus 001 Device 003: ID 2567:0a2b Intel Corp.
    Bus 001 Device 005: ID 0407:6252 Kingston River 2.0
    [...]
  2. Use o utilitário virt-xml junto com o argumento --remove-device.

    Por exemplo, o seguinte comando remove um pen drive USB, anexado ao host como dispositivo 005 no ônibus 001, do Library VM.

    # virt-xml Library --remove-device --hostdev 001.005
    Domain 'Library' defined successfully.
Nota

Para remover um dispositivo USB de um VM em execução, adicione o argumento --update ao comando anterior.

Etapas de verificação

  • Execute o VM e verifique se o dispositivo foi removido da lista de dispositivos.

Recursos adicionais

  • Para outros argumentos, veja a página de manual virt-xml(1).

10.6.3. Recursos adicionais

10.7. Gerenciamento de unidades ópticas virtuais

Ao utilizar uma máquina virtual (VM), você pode acessar informações armazenadas em uma imagem ISO no host. Para fazer isso, anexe a imagem ISO à VM como uma unidade óptica virtual, como um drive de CD ou um drive de DVD.

As seções seguintes fornecem informações sobre o uso da linha de comando para:

10.7.1. Fixação de drives ópticos em máquinas virtuais

Para anexar uma imagem ISO como unidade óptica virtual, edite o arquivo de configuração XML da máquina virtual (VM) e adicione a nova unidade.

Pré-requisitos

  • Você deve armazenar a imagem ISO no host local.
  • Você deve conhecer o caminho para a imagem ISO.

Procedimento

  • Use o utilitário virt-xml com o argumento --add-device.

    Por exemplo, o seguinte comando anexa a imagem ISO Doc10, armazenada no diretório /MC/tank/, à DN1 VM.

    # virt-xml DN1 --add-device --disk /MC/tank/Doc10.iso,device=cdrom
    Domain 'DN1' defined successfully.

Etapas de verificação

  • Execute o VM e teste se o dispositivo está presente e funciona como esperado.

Recursos adicionais

  • Para outros argumentos, veja a página de manual virt-xml(1).

10.7.2. Substituição de imagens ISO em unidades ópticas virtuais

Para substituir uma imagem ISO anexada como unidade óptica virtual a uma máquina virtual (VM), edite o arquivo de configuração XML da VM e especifique a substituição.

Pré-requisitos

  • Você deve armazenar a imagem ISO no host local.
  • Você deve conhecer o caminho para a imagem ISO.

Procedimento

  1. Localize o dispositivo alvo onde o CD-ROM está anexado ao VM. Você pode encontrar esta informação no arquivo de configuração XML da VM.

    Por exemplo, o seguinte comando exibe o arquivo de configuração XML da DN1 VM, onde o dispositivo alvo do CD-ROM é sda.

    # virsh dumpxml DN1
    ...
    <disk>
      ...
      <source file='/MC/tank/Doc10.iso'/>
      <target dev='sda' bus='sata'/>
      ...
    </disk>
    ...
  2. Use o utilitário virt-xml com o argumento --edit.

    Por exemplo, o seguinte comando substitui a imagem ISO Doc10, anexada à DN1 VM no target sda, com a imagem ISO DrDN armazenada no diretório /Dvrs/current/.

    # virt-xml DN1 --edit target=sda --disk /Dvrs/current/DrDN.iso
    Domain 'DN1' defined successfully.

Etapas de verificação

  • Execute o VM e teste se o dispositivo for substituído e funcionar como esperado.

Recursos adicionais

  • Para outros argumentos, veja a página de manual virt-xml(1).

10.7.3. Remoção de imagens ISO de unidades ópticas virtuais

Para remover uma imagem ISO de uma unidade óptica virtual anexada a uma máquina virtual (VM), edite o arquivo de configuração XML da VM.

Procedimento

  1. Localize o dispositivo alvo onde o CD-ROM está anexado ao VM. Você pode encontrar esta informação no arquivo de configuração XML da VM.

    Por exemplo, o seguinte comando exibe o arquivo de configuração XML da DN1 VM, onde o dispositivo alvo do CD-ROM é sda.

    # virsh dumpxml DN1
    ...
    <disk>
      ...
      <source file='/Dvrs/current/DrDN'/>
      <target dev='sda' bus='sata'/>
      ...
    </disk>
    ...
  2. Use o utilitário virt-xml com o argumento --edit.

    Por exemplo, o seguinte comando remove a imagem ISO DrDN da unidade de CD anexada à DN1 VM.

    # virt-xml DN1 --edit target=sda --disk path=
    Domain 'DN1' defined successfully.

Etapas de verificação

  • Execute o VM e verifique se a imagem não está mais disponível.

Recursos adicionais

  • Para outros argumentos, veja a página de manual virt-xml(1).

10.7.4. Remoção de drives ópticos de máquinas virtuais

Para remover um drive óptico anexado a uma máquina virtual (VM), edite o arquivo de configuração XML da VM.

Procedimento

  1. Localize o dispositivo alvo onde o CD-ROM está anexado ao VM. Você pode encontrar esta informação no arquivo de configuração XML da VM.

    Por exemplo, o seguinte comando exibe o arquivo de configuração XML da DN1 VM, onde o dispositivo alvo do CD-ROM é sda.

    # virsh dumpxml DN1
    ...
    <disk type='file' device='cdrom'>
      <driver name='qemu' type='raw'/>
      <target dev='sda' bus='sata'/>
      ...
    </disk>
    ...
  2. Use o utilitário virt-xml com o argumento --remove-device.

    Por exemplo, o seguinte comando remove o drive óptico anexado como alvo sda do site DN1 VM.

    # virt-xml DN1 --remove-device --disk target=sda
    Domain 'DN1' defined successfully.

Etapas de verificação

  • Confirme que o dispositivo não está mais listado no arquivo de configuração XML da VM.

Recursos adicionais

  • Para outros argumentos, veja a página de manual virt-xml(1).

10.7.5. Recursos adicionais

10.8. Gerenciamento de dispositivos SR-IOV

Um dispositivo virtual emulado freqüentemente usa mais CPU e memória do que um dispositivo de rede de hardware. Isto pode limitar o desempenho de uma máquina virtual (VM). Entretanto, se algum dispositivo em seu host de virtualização suportar Virtualização de E/S de raiz única (SR-IOV), você pode usar este recurso para melhorar o desempenho do dispositivo, e possivelmente também o desempenho geral de suas VMs.

10.8.1. O que é SR-IOV?

A virtualização de E/S de raiz única (SR-IOV) é uma especificação que permite que um único dispositivo PCI Express (PCIe) apresente vários dispositivos PCI separados, chamados virtual functions (VFs), para o sistema host. Cada um desses dispositivos:

  • É capaz de fornecer o mesmo ou similar serviço que o dispositivo PCIe original.
  • Aparece em um endereço diferente no barramento PCI hospedeiro.
  • Pode ser atribuído a um VM diferente usando a atribuição VFIO.

Por exemplo, um único dispositivo de rede capaz de SR-IOV pode apresentar VFs a várias VMs. Enquanto todas as VFs utilizam a mesma placa física, a mesma conexão de rede e o mesmo cabo de rede, cada uma das VMs controla diretamente seu próprio dispositivo de rede de hardware, e não utiliza recursos extras do host.

Como funciona o SR-IOV

A funcionalidade SR-IOV é possível graças à introdução das seguintes funções PCIe:

  • Physical functions (PFs) - Uma função PCIe que fornece a funcionalidade de seu dispositivo (por exemplo, rede) para o host, mas também pode criar e gerenciar um conjunto de VFs. Cada dispositivo capaz de SR-IOV tem uma ou mais PFs.
  • Virtual functions (VFs) - Funções de PCIe leves que se comportam como dispositivos independentes. Cada VF é derivada de uma PF. O número máximo de VFs que um dispositivo pode ter depende do hardware do dispositivo. Cada VF pode ser atribuída apenas a uma única VM de cada vez, mas uma VM pode ter várias VFs atribuídas a ela.

As VMs reconhecem as VFs como dispositivos virtuais. Por exemplo, uma VF criada por um dispositivo de rede SR-IOV aparece como uma placa de rede para uma VM à qual é atribuída, da mesma forma que uma placa de rede física aparece para o sistema host.

Figura 10.1. Arquitetura SR-IOV

virt SR IOV

Benefícios

As principais vantagens de usar SR-IOV VFs em vez de dispositivos emulados são:

  • Melhoria do desempenho
  • Redução do uso de CPU e recursos de memória do host

Por exemplo, uma VF anexada a um VM como um vNIC tem um desempenho quase igual ao de um DNI físico, e muito melhor do que os DNIs paravirtualizados ou emulados. Em particular, quando várias VFs são usadas simultaneamente em um único host, os benefícios de desempenho podem ser significativos.

Desvantagens

  • Para modificar a configuração de um PF, é necessário primeiro alterar o número de VFs expostas pelo PF para zero. Portanto, você também precisa remover os dispositivos fornecidos por essas VFs da VM à qual elas estão atribuídas.
  • Uma VM com um dispositivo VFIO anexado, incluindo VFs SR-IOV, não pode ser migrada para outro host. Em alguns casos, você pode contornar esta limitação emparelhando o dispositivo designado com um dispositivo emulado. Por exemplo, você pode unir uma VF em rede atribuída a um vNIC emulado, e remover a VF antes da migração.
  • Além disso, os dispositivos atribuídos pela VFIO requerem o acionamento da memória VM, o que aumenta o consumo de memória da VM e impede o uso de balonamento de memória na VM.

Recursos adicionais

10.8.2. Fixação de dispositivos de rede SR-IOV em máquinas virtuais

Para anexar um dispositivo de rede SR-IOV a uma máquina virtual (VM) em um host Intel ou AMD, você deve criar uma função virtual (VF) a partir de uma interface de rede capaz de SR-IOV no host e atribuir a VF como um dispositivo a uma VM especificada. Para detalhes, veja as seguintes instruções.

Pré-requisitos

  • A CPU e o firmware de seu host suportam a Unidade de Gerenciamento de Memória I/O (IOMMU).

    • Se utilizar uma CPU Intel, ela deve suportar a Tecnologia de Virtualização Intel para E/S direcionada (VT-d).
    • Se estiver usando uma CPU AMD, ela deve suportar a funcionalidade AMD-Vi.
  • O sistema host usa o Serviço de Controle de Acesso (ACS) para fornecer acesso direto à memória (DMA) isolação para a topologia PCIe. Verifique isto com o fornecedor do sistema.

    Para informações adicionais, consulte Considerações sobre Hardware para implementação do SR-IOV.

  • O dispositivo físico de rede suporta SR-IOV. Para verificar se algum dispositivo de rede em seu sistema suporta SR-IOV, use o comando lspci -v e procure Single Root I/O Virtualization (SR-IOV) na saída.

    # lspci -v
    [...]
    02:00.0 Ethernet controller: Intel Corporation 82576 Gigabit Network Connection (rev 01)
    	Subsystem: Intel Corporation Gigabit ET Dual Port Server Adapter
    	Flags: bus master, fast devsel, latency 0, IRQ 16, NUMA node 0
    	Memory at fcba0000 (32-bit, non-prefetchable) [size=128K]
    [...]
    	Capabilities: [150] Alternative Routing-ID Interpretation (ARI)
    	Capabilities: [160] Single Root I/O Virtualization (SR-IOV)
    	Kernel driver in use: igb
    	Kernel modules: igb
    [...]
  • A interface da rede anfitriã que você deseja usar para criar VFs está em execução. Por exemplo, para ativar a interface eth1 e verificar se ela está em execução:

    # ip link set eth1 up
    # ip link show eth1
    8: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DEFAULT qlen 1000
       link/ether a0:36:9f:8f:3f:b8 brd ff:ff:ff:ff:ff:ff
       vf 0 MAC 00:00:00:00:00:00, spoof checking on, link-state auto
       vf 1 MAC 00:00:00:00:00:00, spoof checking on, link-state auto
       vf 2 MAC 00:00:00:00:00:00, spoof checking on, link-state auto
       vf 3 MAC 00:00:00:00:00:00, spoof checking on, link-state auto
  • Para que o dispositivo SR-IOV possa funcionar, o recurso IOMMU deve estar habilitado na BIOS e no kernel do host. Para fazer isso:

    • Em um host Intel, habilite o VT-d:

      • Se seu host Intel usa múltiplas entradas de inicialização:

        1. Edite o arquivo /etc/default/grub e adicione os parâmetros intel_iommu=on e iommu=pt no final da linha GRUB_CMDLINE_LINUX:

          GRUB_CMDLINE_LINUX="crashkernel=auto resume=/dev/mapper/rhel_dell-per730-27-swap rd.lvm.lv=rhel_dell-per730-27/root rd.lvm.lv=rhel_dell-per730-27/swap console=ttyS0,115200n81 intel_iommu=on iommu=pt"
        2. Regenerar a configuração do GRUB:

          # grub2-mkconfig -o /boot/grub2/grub.cfg
        3. Reiniciar o anfitrião.
      • Se seu host Intel usa uma única entrada de inicialização:

        1. Regenerar a configuração do GRUB com o parâmetro intel_iommu=on:

          # grubby --args="intel_iommu=on" --update-kernel DEFAULT
        2. Reiniciar o anfitrião.
    • Em um host AMD, habilite o AMD-Vi:

      • Se seu host AMD usa múltiplas entradas de inicialização:

        1. Edite o arquivo /etc/default/grub e adicione os parâmetros iommu=pt e amd_iommu=on no final da linha GRUB_CMDLINE_LINUX:

          GRUB_CMDLINE_LINUX="crashkernel=auto resume=/dev/mapper/rhel_dell-per730-27-swap rd.lvm.lv=rhel_dell-per730-27/root rd.lvm.lv=rhel_dell-per730-27/swap console=ttyS0,115200n81 iommu=pt amd_iommu=on"
        2. Regenerar a configuração do GRUB:

          # grub2-mkconfig -o /boot/grub2/grub.cfg
        3. Reiniciar o anfitrião.
      • Se seu host AMD usa uma única entrada de inicialização:

        1. Regenerar a configuração do GRUB com o parâmetro iommu=pt:

          # grubby --args="iommu=pt" --update-kernel DEFAULT
        2. Reiniciar o anfitrião.

Procedimento

  1. Optional: Confirme o número máximo de VFs que seu dispositivo de rede pode usar. Para isso, use o seguinte comando e substitua eth1 pelo seu dispositivo de rede compatível com SR-IOV.

    # cat /sys/class/net/eth1/device/sriov_totalvfs
    7
  2. Use o seguinte comando para criar uma função virtual (VF):

    # echo VF-number > /sys/class/net/network-interface/device/sriov_numvfs

    No comando, substitua:

    • VF-number com o número de VFs que você deseja criar no PF.
    • network-interface com o nome da interface da rede para a qual as VFs serão criadas.

    O exemplo a seguir cria 2 VFs a partir da interface de rede eth1:

    # echo 2 > /sys/class/net/eth1/device/sriov_numvfs
  3. Verificar se as VFs foram adicionadas:

    # lspci | grep Ethernet
    01:00.0 Ethernet controller: Intel Corporation Ethernet Controller 10-Gigabit X540-AT2 (rev 01)
    01:00.1 Ethernet controller: Intel Corporation Ethernet Controller 10-Gigabit X540-AT2 (rev 01)
    07:00.0 Ethernet controller: Intel Corporation I350 Gigabit Network Connection (rev 01)
    07:00.1 Ethernet controller: Intel Corporation I350 Gigabit Network Connection (rev 01)
  4. Torne as VFs criadas persistentes, criando uma regra udev para a interface de rede que você usou para criar as VFs. Por exemplo, para a interface eth1, crie o arquivo /etc/udev/rules.d/eth1.rules, e acrescente a seguinte linha:

    ACTION=="add", SUBSYSTEM=="net", ENV{ID_NET_DRIVER}=="ixgbe", ATTR{device/sriov_numvfs}="2"

    Isto assegura que as duas VFs que usam o driver ixgbe estarão automaticamente disponíveis para a interface eth1 quando o host iniciar.

    Atenção

    Atualmente, este comando não funciona corretamente quando se tenta tornar as VFs persistentes nos adaptadores Broadcom NetXtreme II BCM57810. Além disso, anexar VFs baseadas nestes adaptadores às VMs do Windows não é atualmente confiável.

  5. Use o comando virsh nodedev-list para verificar que libvirt reconhece os dispositivos VF adicionados. Por exemplo, o seguinte mostra que os PFs 01:00.0 e 07:00.0 do exemplo anterior foram convertidos com sucesso em VFs:

    # virsh nodedev-list | grep pci_
    pci_0000_01_00_0
    pci_0000_01_00_1
    pci_0000_07_10_0
    pci_0000_07_10_1
    [...]
  6. Obter os valores bus, slot e function de uma PF e uma de suas FVs correspondentes. Por exemplo, para pci_0000_01_00_0 e pci_0000_01_00_1:

    # virsh nodedev-dumpxml pci_0000_01_00_0
    <device>
      <name>pci_0000_01_00_0</name>
      <path>/sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0</path>
      <parent>pci_0000_00_01_0</parent>
      <driver>
        <name>ixgbe</name>
      </driver>
      <capability type='pci'>
        <domain>0</domain>
        <bus>1</bus>
        <slot>0</slot>
        <function>0</function>
    [...]
    # virsh nodedev-dumpxml pci_0000_01_00_1
    <device>
      <name>pci_0000_01_00_1</name>
      <path>/sys/devices/pci0000:00/0000:00:01.0/0000:01:00.1</path>
      <parent>pci_0000_00_01_0</parent>
      <driver>
        <name>vfio-pci</name>
      </driver>
      <capability type='pci'>
        <domain>0</domain>
        <bus>1</bus>
        <slot>0</slot>
        <function>1</function>
    [...]
  7. Crie um arquivo XML temporário e adicione uma configuração usando os valores obtidos no passo anterior: bus, slot, e function. Por exemplo:

    <interface type='hostdev' managed='yes'>
      <source>
        <address type='pci' domain='0x0000' bus='0x03' slot='0x10' function='0x2'/>
      </source>
    </interface>
  8. Adicione a VF a uma VM usando o arquivo temporário XML. Por exemplo, o seguinte anexa uma VF salva no /tmp/holdmyfunction.xml a uma VM em funcionamento testguest1 e garante que ela estará disponível após o reinício da VM:

    # virsh attach-device testguest1 /tmp/holdmyfunction.xml --live --config
    Device attached successfully.

    Se isto for bem-sucedido, o sistema operacional convidado detecta uma nova placa de interface de rede.

10.8.3. Dispositivos suportados para a tarefa SR-IOV

Nem todos os dispositivos podem ser utilizados para SR-IOV. Os seguintes dispositivos foram testados e verificados como compatíveis com o SR-IOV no RHEL 8.

Dispositivos de rede

  • Controlador Ethernet Intel 82599ES 10 Gigabit - utiliza o driver ixgbe
  • Controlador Ethernet Intel série XL710 - utiliza o driver i40e
  • Cartões Adaptadores Ethernet Mellanox ConnectX-5 - use o driver mlx5_core
  • Adaptador de rede Ethernet Intel XXV710 - utiliza o driver i40e
  • Intel 82576 Gigabit Ethernet Controller - utiliza o driver igb
  • Broadcom NetXtreme II BCM57810 - utiliza o driver bnx2x

10.9. Fixação de dispositivos DASD em máquinas virtuais no IBM Z

Os dispositivos de armazenamento de acesso direto (DASDs) fornecem uma série de características específicas de armazenamento. Usando o recurso vfio-ccw, você pode atribuir DASDs como dispositivos mediados a suas máquinas virtuais (VMs) em hosts IBM Z. Isto, por exemplo, torna possível para a VM acessar um conjunto de dados z/OS, ou compartilhar os DASDs atribuídos com uma máquina z/OS.

Pré-requisitos

  • Seu sistema host está usando a arquitetura de hardware IBM Z e suporta o protocolo FICON.
  • O VM alvo está usando um sistema operacional Linux convidado.
  • Os módulos de kernel necessários foram carregados no host. Para verificar, use:

    # lsmod | grep vfio

    A saída deve conter os seguintes módulos:

    • vfio_ccw
    • vfio_mdev
    • vfio_iommu_type1
  • Você tem um dispositivo DASD de reposição para uso exclusivo da VM.

Procedimento

  1. Obter o identificador de dispositivo do dispositivo DASD. O utilitário lsdasd o exibe como Bus-ID.

    # lsdasd
    Bus-ID    Status    Name      Device  Type         BlkSz  Size      Blocks
    ================================================================================
    0.0.002c  active    dasdh     94:0    ECKD         4096   21129MB   5409180

    Nos comandos seguintes deste procedimento, substitua 0.0.002c pelo identificador de dispositivo detectado de seu dispositivo.

  2. Obter o caminho de sub-canal do dispositivo DASD.

    # lscss | grep 0.0.002c
    0.0.002c 0.0.24ac  3390/0c 3990/e9 yes  f0  f0  ff   01021112 00000000

    Neste exemplo, o caminho do sub-canal é detectado como 0.0.24ac. Nos comandos seguintes deste procedimento, substitua 0.0.24ac pelo caminho de sub-canal detectado de seu dispositivo.

  3. Desbloquear o dispositivo DASD de seu sub-canal no host.

    # echo 0.0.002c > /sys/bus/ccw/devices/0.0.002c/driver/unbind
  4. Desobstruir o sub-canal do motorista do sub-canal de E/S.

    # echo 0.0.24ac > /sys/bus/css/devices/0.0.24ac/driver/unbind
  5. Ligar o sub-canal ao motorista da passagem vfio_ccw.

    # echo 0.0.24ac > /sys/bus/css/drivers/vfio_ccw/bind
  6. Gerar uma UUID.

    # uuidgen
    30820a6f-b1a5-4503-91ca-0c10ba12345a
  7. Criar o dispositivo mediado DASD utilizando o UUID gerado

    # echo "30820a6f-b1a5-4503-91ca-0c10ba12345a" > /sys/bus/css/devices/0.0.24ac/mdev_supported_types/vfio_ccw-io/create
  8. Anexe o dispositivo mediado à VM. Para isso, use o utilitário virsh edit para editar a configuração XML da VM, adicione a seguinte seção ao XML, e substitua o valor uuid pelo UUID gerado no passo anterior.

    <hostdev mode='subsystem' type='mdev' model='vfio-ccw'>
      <source>
        <address uuid="30820a6f-b1a5-4503-91ca-0c10ba12345a"/>
      </source>
    </hostdev>

Verificação

  1. Obter o identificador que libvirt designou para o dispositivo DASD mediado. Para fazer isso, exibir a configuração XML da VM e procurar um dispositivo vfio-ccw.

    # virsh dumpxml vm-name
    
    <domain>
    [...]
        <hostdev mode='subsystem' type='mdev' managed='no' model='vfio-ccw'>
          <source>
            <address uuid='10620d2f-ed4d-437b-8aff-beda461541f9'/>
          </source>
          <alias name='hostdev0'/>
          <address type='ccw' cssid='0xfe' ssid='0x0' devno='0x0009'/>
        </hostdev>
    [...]
    </domain>

    Neste exemplo, o identificador atribuído ao dispositivo é 0.0.0009.

  2. Entre no sistema operacional convidado da VM e confirme que o dispositivo está listado. Por exemplo:

    # lscss | grep 0.0.0009
    0.0.0009 0.0.0007  3390/0c 3990/e9      f0  f0  ff   12212231 00000000
  3. Colocar o dispositivo online. Por exemplo:

    # chccwdev -e 0.0009
    Setting device 0.0.0009 online
    Done

Capítulo 11. Gerenciamento de armazenamento para máquinas virtuais

Você pode gerenciar o armazenamento de máquinas virtuais usando o CLI ou o console web.

Esta documentação fornece informações sobre como gerenciar o armazenamento de máquinas virtuais usando o comando virsh.

11.1. Entendendo o armazenamento de máquinas virtuais

As seções seguintes fornecem informações sobre armazenamento para máquinas virtuais (VMs), incluindo informações sobre pools de armazenamento, volumes de armazenamento e como eles são usados para fornecer armazenamento para VMs.

11.1.1. Armazenamento de máquinas virtuais

A seguir, são fornecidas informações sobre como os pools e volumes de armazenamento são utilizados para criar armazenamento para máquinas virtuais (VMs).

Um storage pool é uma quantidade de armazenamento gerenciada pelo host e reservada para uso pelos VMs. Storage volumes pode ser criado a partir de espaço nos pools de armazenamento. Cada volume de armazenamento pode ser atribuído a uma VM como um dispositivo de bloco, como um disco, em um ônibus convidado.

Os pools e volumes de armazenamento são gerenciados utilizando libvirt. Com o protocolo remoto libvirt, você pode gerenciar todos os aspectos do armazenamento de VM. Estas operações podem ser realizadas em um host remoto. Como resultado, um aplicativo de gerenciamento que utiliza libvirt, como o console web RHEL, pode ser utilizado para realizar todas as tarefas necessárias para configurar o armazenamento para uma VM.

A API libvirt pode ser usada para consultar a lista de volumes no pool de armazenamento ou para obter informações sobre a capacidade, alocação e armazenamento disponível no pool de armazenamento. Um volume de armazenamento no pool de armazenamento pode ser consultado para obter informações tais como alocação e capacidade, que podem ser diferentes para volumes esparsos.

Para os pools de armazenamento que o suportam, a API libvirt pode ser usada para criar, clonar, redimensionar e excluir volumes de armazenamento. As APIs também podem ser usadas para carregar dados para volumes de armazenamento, baixar dados de volumes de armazenamento ou apagar dados de volumes de armazenamento.

Uma vez iniciado um pool de armazenamento, um volume de armazenamento pode ser atribuído a uma VM usando o nome do pool de armazenamento e o nome do volume de armazenamento em vez do caminho do host para o volume nos arquivos de configuração XML da VM.

11.1.2. Piscinas de armazenagem

Um pool de armazenamento é um arquivo, diretório ou dispositivo de armazenamento, gerenciado por libvirt para fornecer armazenamento a máquinas virtuais (VMs). Os pools de armazenamento são divididos em volumes de armazenamento que armazenam imagens de VMs ou são anexados às VMs como armazenamento adicional. Várias VMs podem compartilhar o mesmo pool de armazenamento, permitindo uma melhor alocação de recursos de armazenamento.

As piscinas de armazenamento podem ser persistentes ou transitórias:

  • Um pool de armazenamento persistente sobrevive a um reinício do sistema da máquina hospedeira.
  • Só existe uma piscina de armazenagem transitória até o reinício do host.

O comando virsh pool-define é usado para criar um pool de armazenamento persistente, e o comando virsh pool-create é usado para criar um pool de armazenamento transitório.

Tipos de armazenagem de pool de armazenagem

Os pools de armazenamento podem ser locais ou em rede (compartilhados):

  • Local storage pools

    Os pools de armazenamento locais são anexados diretamente ao servidor host. Eles incluem diretórios locais, discos diretamente anexados, partições físicas e grupos de volume Logical Volume Management (LVM) em dispositivos locais.

    Os pools de armazenamento local são úteis para o desenvolvimento, testes e pequenas implantações que não requerem migração ou um grande número de VMs.

  • Networked (shared) storage pools

    Os pools de armazenamento em rede incluem dispositivos de armazenamento compartilhados através de uma rede usando protocolos padrão.

Exemplo de uso do pool de armazenagem

Para ilustrar as opções disponíveis para o gerenciamento de pools de armazenamento, o seguinte descreve um exemplo de servidor NFS que utiliza mount -t nfs nfs.example.com:/path/to/share /path/to/data.

Um administrador de armazenamento poderia definir um NFS Storage Pool no host de virtualização para descrever o caminho do servidor exportado e o caminho de destino do cliente. Isto permitirá que libvirt realize a montagem automaticamente quando libvirt for iniciado ou conforme necessário enquanto libvirt estiver rodando. Os arquivos com o diretório exportado do servidor NFS são listados como volumes de armazenamento dentro do pool de armazenamento NFS.

Quando o volume de armazenamento é adicionado à VM, o administrador não precisa adicionar o caminho de destino ao volume. Eles apenas precisam adicionar o pool de armazenamento e o volume de armazenamento pelo nome. Portanto, se o caminho do cliente alvo mudar, isso não afeta a VM.

Quando o pool de armazenamento é iniciado, libvirt monta o compartilhamento no diretório especificado, como se o administrador do sistema tivesse feito o login e executado mount nfs.example.com:/path/to/share /vmdata. Se o pool de armazenamento estiver configurado para reiniciar automaticamente, libvirt assegura que o disco compartilhado NFS seja montado no diretório especificado quando libvirt for iniciado.

Uma vez iniciado o pool de armazenamento, os arquivos no disco compartilhado NFS são relatados como volumes de armazenamento, e os caminhos dos volumes de armazenamento podem ser consultados usando a API libvirt. Os caminhos dos volumes de armazenamento podem então ser copiados para a seção da definição XML de uma VM que descreve o armazenamento de origem para os dispositivos de bloco da VM. No caso do NFS, uma aplicação que utiliza a API libvirt pode criar e excluir volumes de armazenamento no pool de armazenamento (arquivos no compartilhamento NFS) até o limite do tamanho do pool (a capacidade de armazenamento do compartilhamento).

Parar (destruir) um pool de armazenamento retira a abstração dos dados, mas mantém os dados intactos.

Nem todos os tipos de pool de armazenamento suportam a criação e a eliminação de volumes. A parada do pool de armazenamento (pool-destroy) desfaz a operação inicial, neste caso, desmontando a parte do NFS. Os dados sobre o compartilhamento não são modificados pela operação de destruição, a despeito do que o nome do comando sugere. Para mais detalhes, veja man virsh.

Tipos de pool de armazenamento suportados e não suportados

A seguir, uma lista dos tipos de pool de armazenagem suportados pela RHEL:

  • Piscinas de armazenamento baseadas em diretórios
  • Piscinas de armazenamento em disco
  • Piscinas de armazenamento divisórias
  • Piscinas de armazenagem GlusterFS
  • piscinas de armazenamento baseadas em iSCSI
  • Piscinas de armazenamento baseadas em LVM
  • Piscinas de armazenamento baseadas em NFS
  • Piscinas de armazenamento baseadas em SCSI com dispositivos vHBA
  • Piscinas de armazenamento multipath-based
  • Piscinas de armazenagem com base em RBD

A seguir está uma lista dos tipos de pool de armazenamento libvirt que não são suportados pela RHEL:

  • Piscinas de armazenagem com base em ovinos
  • Piscinas de armazenagem em andares
  • Piscinas de armazenagem baseadas em ZFS

11.1.3. Volumes de armazenamento

Os pools de armazenamento estão divididos em storage volumes. Os volumes de armazenamento são abstrações de partições físicas, volumes lógicos LVM, imagens de disco baseadas em arquivos e outros tipos de armazenamento manipulados por libvirt. Os volumes de armazenamento são apresentados às VMs como dispositivos de armazenamento local, tais como discos, independentemente do hardware subjacente.

Na máquina host, um volume de armazenamento é referido por seu nome e um identificador para o pool de armazenamento do qual ele deriva. Na linha de comando virsh, isto toma a forma --pool storage_pool volume_name.

Por exemplo, para exibir informações sobre um volume chamado firstimage no pool guest_images.

# virsh vol-info --pool guest_images firstimage
  Name:             firstimage
  Type:             block
  Capacity:         20.00 GB
  Allocation:       20.00 GB

11.2. Gerenciamento de armazenamento para máquinas virtuais usando o CLI

A documentação a seguir fornece informações sobre como gerenciar o armazenamento da máquina virtual (VM) usando o utilitário de linha de comando virsh.

Usando virsh, você pode adicionar, remover e modificar o armazenamento de VM, assim como visualizar informações sobre o armazenamento de VM.

Nota

Em muitos casos, o armazenamento para uma VM é criado ao mesmo tempo em que a VM é criada. Portanto, as informações a seguir referem-se principalmente ao gerenciamento avançado do armazenamento da VM.

11.2.1. Visualização de informações de armazenamento de máquinas virtuais usando o CLI

A seguir, são fornecidas informações sobre a visualização das informações sobre pools e volumes de armazenamento usando o CLI.

11.2.1.1. Visualização das informações do pool de armazenamento usando o CLI

Usando o CLI, você pode visualizar uma lista de todas as piscinas de armazenamento com detalhes limitados ou completos sobre as piscinas de armazenamento. Você também pode filtrar os pools de armazenamento listados.

Procedimento

  • Use o comando virsh pool-list para visualizar as informações do pool de armazenamento.

    # virsh pool-list --all --details
     Name                State    Autostart  Persistent    Capacity  Allocation   Available
     default             running  yes        yes          48.97 GiB   23.93 GiB   25.03 GiB
     Downloads           running  yes        yes         175.62 GiB   62.02 GiB  113.60 GiB
     RHEL8-Storage-Pool  running  yes        yes         214.62 GiB   93.02 GiB  168.60 GiB

Recursos adicionais

  • Para obter informações sobre as opções disponíveis em virsh pool-list, use o comando virsh pool-list --help.

11.2.1.2. Visualização de informações sobre o volume de armazenamento usando o CLI

A seguir, informações sobre a visualização das informações sobre os pools de armazenamento. Você pode visualizar uma lista de todos os pools de armazenagem em um pool de armazenagem especificado e detalhes sobre um pool de armazenagem especificado.

Procedimento

  1. Use o comando virsh vol-list para listar os volumes de armazenamento em um pool de armazenamento especificado.

    # virsh vol-list --pool RHEL8-Storage-Pool --details
     Name                Path                                               Type   Capacity  Allocation
    ---------------------------------------------------------------------------------------------
     .bash_history       /home/VirtualMachines/.bash_history       file  18.70 KiB   20.00 KiB
     .bash_logout        /home/VirtualMachines/.bash_logout        file    18.00 B    4.00 KiB
     .bash_profile       /home/VirtualMachines/.bash_profile       file   193.00 B    4.00 KiB
     .bashrc             /home/VirtualMachines/.bashrc             file   1.29 KiB    4.00 KiB
     .git-prompt.sh      /home/VirtualMachines/.git-prompt.sh      file  15.84 KiB   16.00 KiB
     .gitconfig          /home/VirtualMachines/.gitconfig          file   167.00 B    4.00 KiB
     RHEL8_Volume.qcow2  /home/VirtualMachines/RHEL8_Volume.qcow2  file  60.00 GiB   13.93 GiB
  2. Use o comando virsh vol-info para listar os volumes de armazenamento em um pool de armazenamento especificado.

    # vol-info --pool RHEL8-Storage-Pool --vol RHEL8_Volume.qcow2
    Name:           RHEL8_Volume.qcow2
    Type:           file
    Capacity:       60.00 GiB
    Allocation:     13.93 GiB

11.2.2. Criação e atribuição de armazenamento para máquinas virtuais usando o CLI

O seguinte é um procedimento de alto nível para a criação e atribuição de armazenamento para máquinas virtuais (VMs):

  1. Create storage pools

    Criar um ou mais pools de armazenamento a partir dos meios de armazenamento disponíveis. Para uma lista dos tipos de pools de armazenamento suportados, consulte Tipos de pools de armazenamento.

    • Para criar pools de armazenamento persistentes, use os comandos virsh pool-define-as e virsh pool-define.

      O comando virsh pool-define-as coloca as opções na linha de comando. O comando virsh pool-define usa um arquivo XML para as opções do pool.

    • Para criar pools de armazenamento temporário, utilize os comandos virsh pool-create e virsh pool-create-as.

      O comando virsh pool-create-as coloca as opções na linha de comando. O comando virsh pool-create usa um arquivo XML para as opções do pool.

  1. Create storage volumes

    Criar um ou mais volumes de armazenamento a partir dos pools de armazenamento disponíveis.

  2. Assign storage devices to a VM

    Atribuir um ou mais dispositivos de armazenamento abstraídos dos volumes de armazenamento a uma VM.

As seções seguintes fornecem informações sobre a criação e atribuição de armazenamento usando o CLI:

11.2.2.1. Criação e atribuição de armazenamento baseado em diretório para máquinas virtuais usando o CLI

A seguir, são fornecidas informações sobre a criação de pools e volumes de armazenamento baseados em diretórios, e a atribuição de volumes a máquinas virtuais.

11.2.2.1.1. Criação de pools de armazenamento baseados em diretórios usando o CLI

A seguir são fornecidas instruções para a criação de pools de armazenamento baseados em diretórios.

Pré-requisitos

  • Assegure-se de que seu hipervisor suporta pools de armazenamento de diretórios:

    # virsh pool-capabilities | grep "'dir' supported='yes'"

    Se o comando exibir qualquer saída, os pools de diretórios são suportados.

Procedimento

  1. Create a storage pool

    Use o comando virsh pool-define-as para definir e criar um pool de armazenamento do tipo diretor. Por exemplo, para criar um pool de armazenamento chamado guest_images_dir que utiliza o diretório /guest_images:

    # virsh pool-define-as guest_images_dir dir --target "/guest_images"
    Pool guest_images_dir defined

    Se você já possui uma configuração XML do pool de armazenamento que deseja criar, você também pode definir o pool com base no XML. Para detalhes, veja Seção 11.2.2.1.2, “Parâmetros do pool de armazenamento baseado em diretório”.

  2. Create the storage pool target path

    Use o comando virsh pool-build para criar um caminho de destino do pool de armazenamento para um pool de armazenamento do sistema de arquivos pré-formatado, inicializar o dispositivo de fonte de armazenamento e definir o formato dos dados.

    # virsh pool-build guest_images_dir
      Pool guest_images_dir built
    
    # ls -la /guest_images
      total 8
      drwx------.  2 root root 4096 May 31 19:38 .
      dr-xr-xr-x. 25 root root 4096 May 31 19:38 ..
  3. Verify that the pool was created

    Use o comando virsh pool-list para verificar se o pool foi criado.

    # virsh pool-list --all
    
      Name                 State      Autostart
      -----------------------------------------
      default              active     yes
      guest_images_dir     inactive   no
  4. Start the storage pool

    Use o comando virsh pool-start para montar o pool de armazenamento.

    # virsh pool-start guest_images_dir
      Pool guest_images_dir started
    Nota

    O comando virsh pool-start só é necessário para poços de armazenamento persistentes. Os pools de armazenagem transitórios são automaticamente iniciados quando são criados.

  5. [Optional] Turn on autostart

    Por padrão, um pool de armazenamento definido com o comando virsh não é definido para iniciar automaticamente cada vez que a libvirtd inicia. Use o comando virsh pool-autostart para configurar o pool de armazenamento para reiniciar automaticamente.

    # virsh pool-autostart guest_images_dir
      Pool guest_images_dir marked as autostarted

Verificação

  1. Use o comando virsh pool-list para verificar o Autostart estado.

    # virsh pool-list --all
    
      Name                 State      Autostart
      -----------------------------------------
      default              active     yes
      guest_images_dir     inactive   yes
  2. Verificar se o pool de armazenagem foi criado corretamente, se os tamanhos relatados são os esperados e se o estado é relatado como running.

    # virsh pool-info guest_images_dir
      Name:           guest_images_dir
      UUID:           c7466869-e82a-a66c-2187-dc9d6f0877d0
      State:          running
      Persistent:     yes
      Autostart:      yes
      Capacity:       458.39 GB
      Allocation:     197.91 MB
      Available:      458.20 GB
11.2.2.1.2. Parâmetros do pool de armazenamento baseado em diretório

Esta seção fornece informações sobre os parâmetros XML necessários para um pool de armazenamento baseado em diretório e um exemplo.

Você pode definir um pool de armazenamento com base na configuração XML em um arquivo especificado. Por exemplo:

# virsh pool-define ~/guest_images.xml
  Pool defined from guest_images_dir

Parâmetros

A tabela a seguir fornece uma lista de parâmetros necessários para o arquivo XML para um pool de armazenamento baseado em diretório.

Tabela 11.1. Parâmetros do pool de armazenamento baseado em diretório

DescriçãoXML

O tipo de piscina de armazenamento

<pool type='dir'>

O nome do pool de armazenagem

<name>name</name>

O caminho que especifica o alvo. Este será o caminho utilizado para o pool de armazenamento.

<target>
   <path>target_path</path>
</target>

Exemplo

A seguir, um exemplo de arquivo XML para um pool de armazenamento baseado no diretório /guest_images:

<pool type='dir'>
  <name>dirpool</name>
  <target>
    <path>/guest_images</path>
  </target>
</pool>

Recursos adicionais

Para mais informações sobre a criação de pools de armazenamento baseados em diretórios, veja Seção 11.2.2.1.1, “Criação de pools de armazenamento baseados em diretórios usando o CLI”.

11.2.2.2. Criação e atribuição de armazenamento em disco para máquinas virtuais usando o CLI

A seguir, são fornecidas informações sobre a criação de pools e volumes de armazenamento baseados em disco e a atribuição de volumes a máquinas virtuais.

11.2.2.2.1. Criação de pools de armazenamento baseados em disco usando o CLI

A seguir são fornecidas instruções para a criação de pools de armazenamento baseados em disco.

Recomendações

Esteja atento ao seguinte antes de criar um pool de armazenamento baseado em disco:

  • Dependendo da versão do libvirt que estiver sendo usada, a dedicação de um disco a um pool de armazenamento pode reformatar e apagar todos os dados atualmente armazenados no dispositivo do disco. É altamente recomendável que você faça backup dos dados no dispositivo de armazenamento antes de criar um pool de armazenamento.
  • VMs não devem ter acesso de escrita a discos inteiros ou dispositivos de bloqueio (por exemplo, /dev/sdb). Utilizar partições (por exemplo, /dev/sdb1) ou volumes LVM.

    Se você passar um dispositivo de bloco inteiro para uma VM, a VM provavelmente o partirá ou criará seus próprios grupos LVM sobre ele. Isto pode fazer com que a máquina host detecte estas partições ou grupos LVM e cause erros.

Pré-requisitos

  • Assegure-se de que seu hipervisor suporta pools de armazenamento baseados em disco:

    # virsh pool-capabilities | grep "'disk' supported='yes'"

    Se o comando exibir qualquer saída, os pools baseados em disco são suportados.

Procedimento

  1. Create a storage pool

    Use o comando virsh pool-define-as para definir e criar um pool de armazenamento do tipo disco. Por exemplo, para criar um pool de armazenamento chamado guest_images_disk que utiliza a partição /dev/sdb1, e é montado no diretório /dev:

    # virsh pool-define-as guest_images_disk disk gpt --source-dev=/dev/sdb1 --target /dev
    Pool guest_images_disk defined

    Se você já possui uma configuração XML do pool de armazenamento que deseja criar, você também pode definir o pool com base no XML. Para detalhes, veja Seção 11.2.2.2.2, “Parâmetros do pool de armazenamento em disco”.

  2. Create the storage pool target path

    Use o comando virsh pool-build para criar um caminho de destino do pool de armazenamento para um pool de armazenamento de sistema de arquivos pré-formatado, inicializar o dispositivo de fonte de armazenamento e definir o formato dos dados.

    # virsh pool-build guest_images_disk
      Pool guest_images_disk built
    Nota

    A construção do caminho de destino só é necessária para pools de armazenamento baseados em disco, em sistema de arquivos e lógicos. Se libvirt detectar que o formato de dados do dispositivo de armazenamento de origem difere do tipo de pool de armazenamento selecionado, a construção falha, a menos que o overwrite a opção é especificada.

  3. Verify that the pool was created

    Use o comando virsh pool-list para verificar se o pool foi criado.

    # virsh pool-list --all
    
      Name                 State      Autostart
      -----------------------------------------
      default              active     yes
      guest_images_disk    inactive   no
  4. Start the storage pool

    Use o comando virsh pool-start para montar o pool de armazenamento.

    # virsh pool-start guest_images_disk
      Pool guest_images_disk started
    Nota

    O comando virsh pool-start só é necessário para poços de armazenamento persistentes. Os pools de armazenagem transitórios são automaticamente iniciados quando são criados.

  5. [Optional] Turn on autostart

    Por padrão, um pool de armazenamento definido com o comando virsh não é definido para iniciar automaticamente cada vez que a libvirtd inicia. Use o comando virsh pool-autostart para configurar o pool de armazenamento para reiniciar automaticamente.

    # virsh pool-autostart guest_images_disk
      Pool guest_images_disk marked as autostarted

Verificação

  1. Use o comando virsh pool-list para verificar o Autostart estado.

    # virsh pool-list --all
    
      Name                 State      Autostart
      -----------------------------------------
      default              active     yes
      guest_images_disk    inactive   yes
  2. Verificar se o pool de armazenagem foi criado corretamente, se os tamanhos relatados são os esperados e se o estado é relatado como running.

    # virsh pool-info guest_images_disk
      Name:           guest_images_disk
      UUID:           c7466869-e82a-a66c-2187-dc9d6f0877d0
      State:          running
      Persistent:     yes
      Autostart:      yes
      Capacity:       458.39 GB
      Allocation:     197.91 MB
      Available:      458.20 GB
11.2.2.2.2. Parâmetros do pool de armazenamento em disco

Esta seção fornece informações sobre os parâmetros XML necessários para um pool de armazenamento baseado em disco e um exemplo.

Você pode definir um pool de armazenamento com base na configuração XML em um arquivo especificado. Por exemplo:

# virsh pool-define ~/guest_images.xml
  Pool defined from guest_images_disk

Parâmetros

A tabela a seguir fornece uma lista de parâmetros necessários para o arquivo XML de um pool de armazenamento baseado em disco.

Tabela 11.2. Parâmetros do pool de armazenamento em disco

DescriçãoXML

O tipo de piscina de armazenamento

<pool type='disk'>

O nome do pool de armazenagem

<name>name</name>

O caminho que especifica o dispositivo de armazenamento. Por exemplo, /dev/sdb.

<source>
   <path>source_path</path>
</source>

O caminho que especifica o dispositivo alvo. Este será o caminho utilizado para o pool de armazenamento.

<target>
   <path>target_path</path>
</target>

Exemplo

A seguir, um exemplo de um arquivo XML para um pool de armazenamento baseado em disco:

<pool type='disk'>
  <name>phy_disk</name>
  <source>
    <device path='/dev/sdb'/>
    <format type='gpt'/>
  </source>
  <target>
    <path>/dev</path>
  </target>
</pool>

Recursos adicionais

Para mais informações sobre a criação de pools de armazenamento baseados em disco, veja Seção 11.2.2.2.1, “Criação de pools de armazenamento baseados em disco usando o CLI”.

11.2.2.3. Criação e atribuição de armazenamento baseado em sistema de arquivos para máquinas virtuais usando o CLI

A seguir, são fornecidas informações sobre a criação de pools e volumes de armazenamento baseados em sistemas de arquivos, e a atribuição de volumes a máquinas virtuais.

11.2.2.3.1. Criação de pools de armazenamento baseados no sistema de arquivos usando o CLI

A seguir são fornecidas instruções para a criação de pools de armazenamento baseados em sistemas de arquivos.

Recomendações

Não utilize este procedimento para atribuir um disco inteiro como um pool de armazenamento (por exemplo, /dev/sdb). As VMs não devem ter acesso de escrita a discos inteiros ou dispositivos de bloco. Este método deve ser usado apenas para atribuir partições (por exemplo, /dev/sdb1) aos pools de armazenamento.

Pré-requisitos

  • Assegure-se de que seu hipervisor suporta pools de armazenamento baseados no sistema de arquivos:

    # virsh pool-capabilities | grep "'fs' supported='yes'"

    Se o comando exibir qualquer saída, os pools baseados em arquivos são suportados.

Procedimento

  1. Create a storage pool

    Use o comando virsh pool-define-as para definir e criar um pool de armazenamento do tipo sistema de arquivos. Por exemplo, para criar um pool de armazenamento chamado guest_images_fs que utiliza a partição /dev/sdc1, e é montado no diretório /guest_images:

    # virsh pool-define-as guest_images_fs fs --source-dev /dev/sdc1 --target /guest_images
    Pool guest_images_fs defined

    Se você já possui uma configuração XML do pool de armazenamento que deseja criar, você também pode definir o pool com base no XML. Para detalhes, veja Seção 11.2.2.3.2, “Parâmetros do pool de armazenamento baseado no sistema de arquivos”.

  2. Define the storage pool target path

    Use o comando virsh pool-build para criar um caminho de destino do pool de armazenamento para um pool de armazenamento de sistema de arquivos pré-formatado, inicializar o dispositivo de fonte de armazenamento e definir o formato dos dados.

    # virsh pool-build guest_images_fs
      Pool guest_images_fs built
    
    # ls -la /guest_images
      total 8
      drwx------.  2 root root 4096 May 31 19:38 .
      dr-xr-xr-x. 25 root root 4096 May 31 19:38 ..
  3. Verify that the pool was created

    Use o comando virsh pool-list para verificar se o pool foi criado.

    # virsh pool-list --all
    
      Name                 State      Autostart
      -----------------------------------------
      default              active     yes
      guest_images_fs      inactive   no
  4. Start the storage pool

    Use o comando virsh pool-start para montar o pool de armazenamento.

    # virsh pool-start guest_images_fs
      Pool guest_images_fs started
    Nota

    O comando virsh pool-start só é necessário para poços de armazenamento persistentes. Os pools de armazenagem transitórios são automaticamente iniciados quando são criados.

  5. [Optional] Turn on autostart

    Por padrão, um pool de armazenamento definido com o comando virsh não é definido para iniciar automaticamente cada vez que a libvirtd inicia. Use o comando virsh pool-autostart para configurar o pool de armazenamento para reiniciar automaticamente.

    # virsh pool-autostart guest_images_fs
      Pool guest_images_fs marked as autostarted
  6. Verify the Autostart state

    Use o comando virsh pool-list para verificar o Autostart estado.

    # virsh pool-list --all
    
      Name                 State      Autostart
      -----------------------------------------
      default              active     yes
      guest_images_fs      inactive   yes
  7. Verify the storage pool

    Verificar se o pool de armazenagem foi criado corretamente, se os tamanhos relatados são os esperados e se o estado é relatado como running. Verifique se há um diretório lost found no caminho de destino no sistema de arquivos, indicando que o dispositivo está montado.

    # virsh pool-info guest_images_fs
      Name:           guest_images_fs
      UUID:           c7466869-e82a-a66c-2187-dc9d6f0877d0
      State:          running
      Persistent:     yes
      Autostart:      yes
      Capacity:       458.39 GB
      Allocation:     197.91 MB
      Available:      458.20 GB
    
    # mount | grep /guest_images
      /dev/sdc1 on /guest_images type ext4 (rw)
    
    # ls -la /guest_images
      total 24
      drwxr-xr-x.  3 root root  4096 May 31 19:47 .
      dr-xr-xr-x. 25 root root  4096 May 31 19:38 ..
      drwx------.  2 root root 16384 May 31 14:18 lost+found
11.2.2.3.2. Parâmetros do pool de armazenamento baseado no sistema de arquivos

A seguir, informações sobre os parâmetros necessários para um pool de armazenamento baseado em sistema de arquivos e um exemplo.

Você pode definir um pool de armazenamento com base na configuração XML em um arquivo especificado. Por exemplo:

# virsh pool-define ~/guest_images.xml
  Pool defined from guest_images_fs

Parâmetros

A tabela a seguir fornece uma lista dos parâmetros necessários para o arquivo XML para um pool de armazenamento baseado em sistema de arquivos.

Tabela 11.3. Parâmetros do pool de armazenamento baseado no sistema de arquivos

DescriçãoXML

O tipo de piscina de armazenamento

<pool type='fs'>

O nome do pool de armazenagem

<name>name</name>

O caminho que especifica a divisória. Por exemplo, /dev/sdc1

<source>
   <device path=device_path />

O tipo de sistema de arquivo, por exemplo ext4.

    <format type=fs_type />
</source>

O caminho que especifica o alvo. Este será o caminho utilizado para o pool de armazenamento.

<target>
    <path>path-to-pool</path>
</target>

Exemplo

A seguir, um exemplo de arquivo XML para um pool de armazenamento baseado na partição /dev/sdc1:

<pool type='fs'>
  <name>guest_images_fs</name>
  <source>
    <device path='/dev/sdc1'/>
    <format type='auto'/>
  </source>
  <target>
    <path>/guest_images</path>
  </target>
</pool>

Recursos adicionais

Para mais informações sobre a criação de pools de armazenamento baseados em sistemas de arquivos, veja Seção 11.2.2.3.1, “Criação de pools de armazenamento baseados no sistema de arquivos usando o CLI”.

11.2.2.4. Criação e atribuição de armazenamento GlusterFS para máquinas virtuais usando o CLI

A seguir, são fornecidas informações sobre a criação de pools e volumes de armazenamento baseados em GlusterFS, e a atribuição de volumes a máquinas virtuais.

11.2.2.4.1. Criação de pools de armazenamento baseados em GlusterFS usando o CLI

GlusterFS é um sistema de arquivo de espaço de usuário que utiliza o Sistema de Arquivo em Espaço de Usuário (FUSE). A seguir fornecemos instruções para a criação de pools de armazenamento baseados no GlusterFS.

Pré-requisitos

  • Antes de criar um pool de armazenamento baseado em GlusterFS em um host, prepare um Gluster.

    1. Obter o endereço IP do servidor Gluster, listando seu status com o seguinte comando:

      # gluster volume status
      Status of volume: gluster-vol1
      Gluster process                           Port	Online	Pid
      ------------------------------------------------------------
      Brick 222.111.222.111:/gluster-vol1       49155	  Y    18634
      
      Task Status of Volume gluster-vol1
      ------------------------------------------------------------
      There are no active volume tasks
    2. Se não estiver instalado, instale o pacote glusterfs-fuse.
    3. Se não estiver habilitado, habilite o virt_use_fusefs boolean. Verifique se ele está habilitado.

      # setsebool virt_use_fusefs on
      # getsebool virt_use_fusefs
      virt_use_fusefs --> on
  • Assegure-se de que seu hipervisor suporta pools de armazenamento baseados em GlusterFS:

    # virsh pool-capabilities | grep "'gluster' supported='yes'"

    Se o comando exibir qualquer saída, os pools baseados em GlusterFS são suportados.

Procedimento

  1. Create a storage pool

    Use o comando virsh pool-define-as para definir e criar um pool de armazenamento baseado em GlusterFS. Por exemplo, para criar um pool de armazenamento chamado guest_images_glusterfs que usa um servidor Gluster chamado gluster-vol1 com IP 111.222.111.222, e é montado no diretório raiz do servidor Gluster:

    # virsh pool-define-as --name guest_images_glusterfs --type gluster --source-host 111.222.111.222 --source-name gluster-vol1 --source-path /
    Pool guest_images_glusterfs defined

    Se você já possui uma configuração XML do pool de armazenamento que deseja criar, você também pode definir o pool com base no XML. Para detalhes, veja Seção 11.2.2.4.2, “Parâmetros do pool de armazenamento baseado em GlusterFS”.

  2. Verify that the pool was created

    Use o comando virsh pool-list para verificar se o pool foi criado.

    # virsh pool-list --all
    
      Name                    State      Autostart
      --------------------------------------------
      default                 active     yes
      guest_images_glusterfs  inactive   no
  3. Start the storage pool

    Use o comando virsh pool-start para montar o pool de armazenamento.

    # virsh pool-start guest_images_glusterfs
      Pool guest_images_glusterfs started
    Nota

    O comando virsh pool-start só é necessário para poços de armazenamento persistentes. Os pools de armazenagem transitórios são automaticamente iniciados quando são criados.

  4. [Optional] Turn on autostart

    Por padrão, um pool de armazenamento definido com o comando virsh não é definido para iniciar automaticamente cada vez que a libvirtd inicia. Use o comando virsh pool-autostart para configurar o pool de armazenamento para reiniciar automaticamente.

    # virsh pool-autostart guest_images_glusterfs
      Pool guest_images_glusterfs marked as autostarted

Verificação

  1. Use o comando virsh pool-list para verificar o Autostart estado.

    # virsh pool-list --all
    
      Name                    State      Autostart
      --------------------------------------------
      default                 active     yes
      guest_images_glusterfs  inactive   yes
  2. Verificar se o pool de armazenagem foi criado corretamente, se os tamanhos relatados são os esperados e se o estado é relatado como running.

    # virsh pool-info guest_images_glusterfs
      Name:           guest_images_glusterfs
      UUID:           c7466869-e82a-a66c-2187-dc9d6f0877d0
      State:          running
      Persistent:     yes
      Autostart:      yes
      Capacity:       458.39 GB
      Allocation:     197.91 MB
      Available:      458.20 GB
11.2.2.4.2. Parâmetros do pool de armazenamento baseado em GlusterFS

A seguir, informações sobre os parâmetros necessários para um pool de armazenamento baseado em GlusterFS e um exemplo.

Você pode definir um pool de armazenamento com base na configuração XML em um arquivo especificado. Por exemplo:

# virsh pool-define ~/guest_images.xml
  Pool defined from guest_images_glusterfs

Parâmetros

A tabela a seguir fornece uma lista de parâmetros necessários para o arquivo XML para um pool de armazenamento baseado em GlusterFS.

Tabela 11.4. Parâmetros do pool de armazenamento baseado em GlusterFS

DescriçãoXML

O tipo de piscina de armazenamento

<pool type='gluster'>

O nome do pool de armazenagem

<name>name</name>

O hostname ou endereço IP do servidor Gluster

<source>
   <name=gluster-name />

O caminho no servidor Gluster utilizado para o pool de armazenamento.

    <dir path=gluster-path />
</source>

Exemplo

O seguinte é um exemplo de arquivo XML para um pool de armazenamento baseado no sistema de arquivo Gluster em 111.222.111.222:

<pool type='gluster'>
  <name>Gluster_pool</name>
  <source>
    <host name='111.222.111.222'/>
    <dir path='/'/>
    <name>gluster-vol1</name>
  </source>
</pool>

Para mais informações sobre a criação de pools de armazenamento baseados em sistemas de arquivos, veja Seção 11.2.2.4.1, “Criação de pools de armazenamento baseados em GlusterFS usando o CLI”.

11.2.2.5. Criação e atribuição de armazenamento baseado em iSCSI para máquinas virtuais usando o CLI

O seguinte fornece informações sobre a criação de pools de armazenamento e volumes de armazenamento baseados em iSCSI, protegendo os pools de armazenamento baseados em iSCSI com libvirt segredos, e atribuindo volumes a máquinas virtuais.

Recomendações

Internet Small Computer System Interface (iSCSI) é um protocolo de rede para compartilhar dispositivos de armazenamento. iSCSI conecta iniciadores (clientes de armazenamento) a alvos (servidores de armazenamento) usando instruções SCSI sobre a camada IP.

O uso de dispositivos baseados em iSCSI para armazenar máquinas virtuais permite opções de armazenamento mais flexíveis, como o uso de iSCSI como um dispositivo de armazenamento em bloco. Os dispositivos iSCSI usam um alvo Linux-IO (LIO). Este é um alvo SCSI multiprotocolo para Linux. Além do iSCSI, o LIO também suporta Fibre Channel e Fibre Channel over Ethernet (FCoE).

Se você precisar impedir o acesso a um pool de armazenamento iSCSI, você pode protegê-lo usando um segredo de libvirt.

Pré-requisitos
  • Antes de poder criar um pool de armazenamento baseado em iSCSI, você deve criar metas iSCSI. Você pode criar alvos iSCSI são criados usando o pacote targetcli, que fornece um conjunto de comandos para a criação de alvos iSCSI com suporte de software.

    Para mais informações e instruções sobre a criação de alvos iSCSI, consulte o documento Managing storage devices.

11.2.2.5.1. Criação de pools de armazenamento baseados em iSCSI usando o CLI

A seguir são fornecidas instruções para a criação de pools de armazenamento baseados em iSCSI.

Pré-requisitos

  • Assegure-se de que seu hipervisor suporta pools de armazenamento baseados em iSCSI:

    # virsh pool-capabilities | grep "'iscsi' supported='yes'"

    Se o comando exibir qualquer saída, os pools baseados em iSCSI são suportados.

Procedimento

  1. Create a storage pool

    Use o comando virsh pool-define-as para definir e criar um pool de armazenamento do tipo iSCSI. Por exemplo, para criar um pool de armazenamento chamado guest_images_iscsi que usa o iqn.2010-05.com.example.server1:iscsirhel7guest IQN no server1.example.com, e é montado no caminho /dev/disk/by-path:

    # virsh pool-define-as --name guest_images_iscsi --type iscsi --source-host server1.example.com --source-dev iqn.2010-05.com.example.server1:iscsirhel7guest --target /dev/disk/by-path
    Pool guest_images_iscsi defined

    Se você já possui uma configuração XML do pool de armazenamento que deseja criar, você também pode definir o pool com base no XML. Para detalhes, veja Seção 11.2.2.5.2, “parâmetros do pool de armazenamento baseado em iSCSI”.

  2. Verify that the pool was created

    Use o comando virsh pool-list para verificar se o pool foi criado.

    # virsh pool-list --all
    
      Name                 State      Autostart
      -----------------------------------------
      default              active     yes
      guest_images_iscsi   inactive   no
  3. Start the storage pool

    Use o comando virsh pool-start para montar o pool de armazenamento.

    # virsh pool-start guest_images_iscsi
      Pool guest_images_iscsi started
    Nota

    O comando virsh pool-start só é necessário para poços de armazenamento persistentes. Os pools de armazenagem transitórios são automaticamente iniciados quando são criados.

  4. [Optional] Turn on autostart

    Por padrão, um pool de armazenamento definido com o comando virsh não é definido para iniciar automaticamente cada vez que a libvirtd inicia. Use o comando virsh pool-autostart para configurar o pool de armazenamento para reiniciar automaticamente.

    # virsh pool-autostart guest_images_iscsi
      Pool guest_images_iscsi marked as autostarted

Verificação

  1. Use o comando virsh pool-list para verificar o Autostart estado.

    # virsh pool-list --all
    
      Name                 State      Autostart
      -----------------------------------------
      default              active     yes
      guest_images_iscsi   inactive   yes
  2. Verificar se o pool de armazenagem foi criado corretamente, se os tamanhos relatados são os esperados e se o estado é relatado como running. Verifique se há um diretório lost found no caminho de destino no sistema de arquivos, indicando que o dispositivo está montado.

    # virsh pool-info guest_images_iscsi
      Name:           guest_images_iscsi
      UUID:           c7466869-e82a-a66c-2187-dc9d6f0877d0
      State:          running
      Persistent:     yes
      Autostart:      yes
      Capacity:       458.39 GB
      Allocation:     197.91 MB
      Available:      458.20 GB
11.2.2.5.2. parâmetros do pool de armazenamento baseado em iSCSI

A seguir, informações sobre os parâmetros necessários para um pool de armazenamento baseado em iSCSI e um exemplo.

Você pode definir um pool de armazenamento com base na configuração XML em um arquivo especificado. Por exemplo:

# virsh pool-define ~/guest_images.xml
  Pool defined from guest_images_iscsi

Parâmetros

A tabela a seguir fornece uma lista dos parâmetros necessários para o arquivo XML para um pool de armazenamento baseado em iSCSI.

Tabela 11.5. parâmetros do pool de armazenamento baseado em iSCSI

DescriçãoXML

O tipo de piscina de armazenamento

<pool type='iscsi'>

O nome do pool de armazenagem

<name>name</name>

O nome do anfitrião

<source>
  <host name=hostname />

O iSCSI IQN

    <device path= iSCSI_IQN />
</source>

O caminho que especifica o alvo. Este será o caminho utilizado para o pool de armazenamento.

<target>
   <path>/dev/disk/by-path</path>
</target>

[Opcional] O IQN do iniciador iSCSI. Isto só é necessário quando o ACL restringe o LUN a um iniciador em particular.

<initiator>
   <iqn name='initiator0' />
</initiator>

Nota

O IQN do iniciador iSCSI pode ser determinado usando o comando virsh find-storage-pool-sources-as iscsi.

Exemplo

A seguir, um exemplo de arquivo XML para um pool de armazenamento baseado no dispositivo iSCSI especificado:

<pool type='iscsi'>
  <name>iSCSI_pool</name>
  <source>
    <host name='server1.example.com'/>
    <device path='iqn.2010-05.com.example.server1:iscsirhel7guest'/>
  </source>
  <target>
    <path>/dev/disk/by-path</path>
  </target>
</pool>

Recursos adicionais

Para mais informações sobre a criação de pools de armazenamento baseados em iSCSCI, veja Seção 11.2.2.5.1, “Criação de pools de armazenamento baseados em iSCSI usando o CLI”.

11.2.2.5.3. Protegendo as piscinas de armazenamento iSCSI com segredos de libvirt

Os parâmetros de nome de usuário e senha podem ser configurados com virsh para garantir um pool de armazenamento iSCSI. Você pode configurar isto antes ou depois de definir o pool, mas o pool deve ser iniciado para que as configurações de autenticação entrem em vigor.

A seguir são fornecidas instruções para proteger as piscinas de armazenamento baseadas em iSCSI com libvirt segredos.

Nota

Este procedimento é necessário se um user_ID e password foram definidos ao criar a meta iSCSI.

Procedimento

  1. Criar um arquivo secreto libvirt com um nome de usuário CHAP (challenge-handshake authentication protocol). Por exemplo:

    <secret ephemeral='no' private='yes'>
        <description>Passphrase for the iSCSI example.com server</description>
        <usage type='iscsi'>
            <target>iscsirhel7secret</target>
        </usage>
    </secret>
  2. Defina o segredo da libvirt com o comando virsh secret-define.

    # virsh secret-define secret.xml

  3. Verifique a UUID com o comando virsh secret-list.

    # virsh secret-list
    UUID                                  Usage
    -------------------------------------------------------------------
    2d7891af-20be-4e5e-af83-190e8a922360  iscsi iscsirhel7secret
  4. Atribuir um segredo à UUID na saída da etapa anterior usando o comando virsh secret-set-value. Isto assegura que o nome de usuário e a senha CHAP estejam em uma lista secreta controlada por libvirt. Por exemplo, o nome de usuário e a senha do CHAP estão em uma lista secreta controlada por libvirt:

    # virsh secret-set-value --interactive 2d7891af-20be-4e5e-af83-190e8a922360
    Enter new value for secret:
    Secret value set
  5. Adicione uma entrada de autenticação no arquivo XML do pool de armazenamento usando o comando virsh edit, e adicione uma <auth> elemento, especificando authentication type, usernamee secret usage.

    Por exemplo:

    <pool type='iscsi'>
      <name>iscsirhel7pool</name>
        <source>
           <host name='192.168.122.1'/>
           <device path='iqn.2010-05.com.example.server1:iscsirhel7guest'/>
           <auth type='chap' username='redhat'>
              <secret usage='iscsirhel7secret'/>
           </auth>
        </source>
      <target>
        <path>/dev/disk/by-path</path>
      </target>
    </pool>
    Nota

    O <auth> subelemento existe em diferentes locais dentro da máquina virtual <pool> e <disk> Elementos XML. Para um <pool>, <auth> é especificado dentro do <source> como este descreve onde encontrar as fontes do pool, já que a autenticação é uma propriedade de algumas fontes do pool (iSCSI e RBD). Para um <disk>, que é um subelemento de um domínio, a autenticação para o disco iSCSI ou RBD é uma propriedade do disco. Além disso, o <auth> subelemento para um disco é diferente do de um pool de armazenamento.

    <auth username='redhat'>
      <secret type='iscsi' usage='iscsirhel7secret'/>
    </auth>
  6. Para ativar as mudanças, ative o pool de armazenamento. Se o pool já tiver sido iniciado, pare e reinicie o pool de armazenamento:

    # virsh pool-destroy iscsirhel7pool
    # virsh pool-start iscsirhel7pool

11.2.2.6. Criação e atribuição de armazenamento baseado em LVM para máquinas virtuais usando o CLI

A seguir, são fornecidas informações sobre a criação de pools e volumes de armazenamento baseados em LVM e a atribuição de volumes a máquinas virtuais.

11.2.2.6.1. Criação de pools de armazenamento baseados em LVM usando o CLI

A seguir são fornecidas instruções para a criação de pools de armazenamento baseados em LVM.

Recomendações

Esteja atento ao seguinte antes de criar um pool de armazenamento baseado em LVM:

  • Os pools de armazenamento baseados na LVM não oferecem a flexibilidade total da LVM.
  • libvirt suporta volumes lógicos finos, mas não fornece as características de pools de armazenamento finos.
  • Os pools de armazenamento baseados em LVM são grupos de volume. Você pode criar grupos de volume usando comandos do Logical Volume Manager ou comandos do virsh. Para gerenciar grupos de volume usando a interface virsh, use os comandos virsh para criar grupos de volume.

    Para mais informações sobre grupos de volume, consulte o site Red Hat Enterprise Linux Logical Volume Manager Administration Guide.

  • Os pools de armazenamento baseados em LVM requerem uma partição de disco completa. Se for ativada uma nova partição ou dispositivo com estes procedimentos, a partição será formatada e todos os dados serão apagados. Se for utilizado o Grupo de Volume (VG) existente do host nada será apagado. Recomenda-se fazer o backup do dispositivo de armazenamento antes de iniciar.

Pré-requisitos

  • Assegure-se de que seu hipervisor suporta pools de armazenamento baseados em LVM:

    # virsh pool-capabilities | grep "'logical' supported='yes'"

    Se o comando exibir qualquer saída, os pools baseados em LVM são suportados.

Procedimento

  1. Create a storage pool

    Use o comando virsh pool-define-as para definir e criar um pool de armazenamento do tipo LVM. Por exemplo, o seguinte cria um pool de armazenamento chamado guest_images_logical que utiliza um dispositivo LVM libvirt_lvm montado em /dev/sdc. O pool de armazenamento criado é montado como /dev/libvirt_lvm.

    # virsh pool-define-as guest_images_logical logical --source-dev=/dev/sdc --source-name libvirt_lvm --target /dev/libvirt_lvm
    Pool guest_images_logical defined

    Se você já possui uma configuração XML do pool de armazenamento que deseja criar, você também pode definir o pool com base no XML. Para detalhes, veja Seção 11.2.2.6.2, “Parâmetros do pool de armazenamento baseado em LVM”.

  2. Verify that the pool was created

    Use o comando virsh pool-list para verificar se o pool foi criado.

    # virsh pool-list --all
    
      Name                   State      Autostart
      -------------------------------------------
      default                active     yes
      guest_images_logical   inactive   no
  3. Start the storage pool

    Use o comando virsh pool-start para montar o pool de armazenamento.

    # virsh pool-start guest_images_logical
      Pool guest_images_logical started
    Nota

    O comando virsh pool-start só é necessário para poços de armazenamento persistentes. Os pools de armazenagem transitórios são automaticamente iniciados quando são criados.

  4. [Optional] Turn on autostart

    Por padrão, um pool de armazenamento definido com o comando virsh não é definido para iniciar automaticamente cada vez que a libvirtd inicia. Use o comando virsh pool-autostart para configurar o pool de armazenamento para reiniciar automaticamente.

    # virsh pool-autostart guest_images_logical
      Pool guest_images_logical marked as autostarted

Verificação

  1. Use o comando virsh pool-list para verificar o Autostart estado.

    # virsh pool-list --all
    
      Name                   State      Autostart
      -------------------------------------------
      default                active     yes
      guest_images_logical   inactive   yes
  2. Verificar se o pool de armazenagem foi criado corretamente, se os tamanhos relatados são os esperados e se o estado é relatado como running.

    # virsh pool-info guest_images_logical
      Name:           guest_images_logical
      UUID:           c7466869-e82a-a66c-2187-dc9d6f0877d0
      State:          running
      Persistent:     yes
      Autostart:      yes
      Capacity:       458.39 GB
      Allocation:     197.91 MB
      Available:      458.20 GB
11.2.2.6.2. Parâmetros do pool de armazenamento baseado em LVM

A seguir, informações sobre os parâmetros necessários para um pool de armazenamento baseado em LVM e um exemplo.

Você pode definir um pool de armazenamento com base na configuração XML em um arquivo especificado. Por exemplo:

# virsh pool-define ~/guest_images.xml
  Pool defined from guest_images_logical

Parâmetros

A tabela a seguir fornece uma lista dos parâmetros necessários para o arquivo XML para um pool de armazenamento baseado em LVM.

Tabela 11.6. Parâmetros do pool de armazenamento baseado em LVM

DescriçãoXML

O tipo de piscina de armazenamento

<pool type='logical'>

O nome do pool de armazenagem

<name>name</name>

O caminho para o dispositivo para o pool de armazenagem

<source>
   <device path='device_path' />`

O nome do grupo de volume

    <name>VG-name</name>

O formato de grupo virtual

    <format type='lvm2' />
</source>

O caminho-alvo

<target>
   <path=target_path />
</target>

Nota

Se o grupo de volume lógico for feito de múltiplas partições de disco, pode haver vários dispositivos de fonte listados. Por exemplo, o grupo de volume lógico é composto de múltiplas partições de disco:

<source>
  <device path='/dev/sda1'/>
  <device path='/dev/sdb3'/>
  <device path='/dev/sdc2'/>
  ...
</source>

Exemplo

A seguir, um exemplo de arquivo XML para um pool de armazenamento baseado na LVM especificada:

<pool type='logical'>
  <name>guest_images_lvm</name>
  <source>
    <device path='/dev/sdc'/>
    <name>libvirt_lvm</name>
    <format type='lvm2'/>
  </source>
  <target>
    <path>/dev/libvirt_lvm</path>
  </target>
</pool>

Recursos adicionais

Para mais informações sobre a criação de pools de armazenamento baseados em iSCSCI, veja Seção 11.2.2.6.1, “Criação de pools de armazenamento baseados em LVM usando o CLI”.

11.2.2.7. Criação e atribuição de armazenamento em rede para máquinas virtuais usando o CLI

A seguir, são fornecidas informações sobre a criação de pools e volumes de armazenamento baseados em rede e a atribuição de volumes a máquinas virtuais.

Pré-requisitos

  • Para criar um pool de armazenamento baseado no Network File System (NFS), um servidor NFS já deve estar configurado para ser usado pela máquina host. Para maiores informações sobre o NFS, consulte o site Red Hat Enterprise Linux Storage Administration Guide.
  • Certifique-se de que as utilidades necessárias para o sistema de arquivo que está sendo utilizado estejam instaladas no host. Por exemplo, cifs-utils para Sistemas de Arquivos Comuns na Internet (CIFS) ou glusterfs.fuse para GlusterFS.
11.2.2.7.1. Criação de pools de armazenamento baseados em NFS usando o CLI

A seguir são fornecidas instruções para a criação de pools de armazenamento baseados no sistema de arquivos em rede (NFS).

Pré-requisitos

  • Assegure-se de que seu hipervisor suporta pools de armazenamento baseados em NFS:

    # virsh pool-capabilities | grep "<value>nfs</value>"

    Se o comando exibir qualquer saída, os pools baseados em NFS são suportados.

Procedimento

  1. Create a storage pool

    Use o comando virsh pool-define-as para definir e criar um pool de armazenamento do tipo NFS. Por exemplo, para criar um pool de armazenamento chamado guest_images_netfs que usa um servidor NFS com IP 111.222.111.222 montado no diretório do servidor /home/net_mount usando o diretório de destino /var/lib/libvirt/images/nfspool:

    # virsh pool-define-as --name guest_images_netfs --type netfs --source-host='111.222.111.222' source-path='/home/net_mount' --source-format='nfs' --target='/var/lib/libvirt/images/nfspool'

    Se você já possui uma configuração XML do pool de armazenamento que deseja criar, você também pode definir o pool com base no XML. Para detalhes, veja Seção 11.2.2.7.2, “Parâmetros do pool de armazenamento baseado em NFS”.

  2. Verify that the pool was created

    Use o comando virsh pool-list para verificar se o pool foi criado.

    # virsh pool-list --all
    
      Name                 State      Autostart
      -----------------------------------------
      default              active     yes
      guest_images_netfs   inactive   no
  3. Start the storage pool

    Use o comando virsh pool-start para montar o pool de armazenamento.

    # virsh pool-start guest_images_netfs
      Pool guest_images_netfs started
    Nota

    O comando virsh pool-start só é necessário para poços de armazenamento persistentes. Os pools de armazenagem transitórios são automaticamente iniciados quando são criados.

  4. [Optional] Turn on autostart

    Por padrão, um pool de armazenamento definido com o comando virsh não é definido para iniciar automaticamente cada vez que a libvirtd inicia. Use o comando virsh pool-autostart para configurar o pool de armazenamento para reiniciar automaticamente.

    # virsh pool-autostart guest_images_netfs
      Pool guest_images_netfs marked as autostarted

Verificação

  1. Use o comando virsh pool-list para verificar o Autostart estado.

    # virsh pool-list --all
    
      Name                 State      Autostart
      -----------------------------------------
      default              active     yes
      guest_images_netfs   inactive   yes
  2. Verificar se o pool de armazenagem foi criado corretamente, se os tamanhos relatados são os esperados e se o estado é relatado como running. Verifique se há um diretório lost found no caminho de destino no sistema de arquivos, indicando que o dispositivo está montado.

    # virsh pool-info guest_images_netfs
      Name:           guest_images_netfs
      UUID:           c7466869-e82a-a66c-2187-dc9d6f0877d0
      State:          running
      Persistent:     yes
      Autostart:      yes
      Capacity:       458.39 GB
      Allocation:     197.91 MB
      Available:      458.20 GB
11.2.2.7.2. Parâmetros do pool de armazenamento baseado em NFS

A seguir, informações sobre os parâmetros necessários para um pool de armazenamento baseado em NFS e um exemplo.

Você pode definir um pool de armazenamento com base na configuração XML em um arquivo especificado. Por exemplo:

# virsh pool-define ~/guest_images.xml
  Pool defined from guest_images_netfs

Parâmetros

A tabela a seguir fornece uma lista de parâmetros necessários para o arquivo XML para um pool de armazenamento baseado em NFS.

Tabela 11.7. Parâmetros do pool de armazenamento baseado em NFS

DescriçãoXML

O tipo de piscina de armazenamento

<pool type='netfs'>

O nome do pool de armazenagem

<name>name</name>

O hostname do servidor de rede onde está localizado o ponto de montagem. Este pode ser um nome de host ou um endereço IP.

<source>
   <host name=hostname
/>

O formato do pool de armazenagem

Uma das seguintes:

    <format type='nfs' />

    <format type='glusterfs' />

    <format type='cifs' />

O diretório utilizado no servidor de rede

    <dir path=source_path />
</source>

O caminho que especifica o alvo. Este será o caminho utilizado para o pool de armazenamento.

<target>
   <path>target_path</path>
</target>

Exemplo

A seguir, um exemplo de arquivo XML para um pool de armazenamento baseado no diretório /home/net_mount do servidor file_server NFS:

<pool type='netfs'>
  <name>nfspool</name>
  <source>
    <host name='file_server'/>
    <format type='nfs'/>
    <dir path='/home/net_mount'/>
  </source>
  <target>
    <path>/var/lib/libvirt/images/nfspool</path>
  </target>
</pool>

Recursos adicionais

Para mais informações sobre a criação de pools de armazenamento baseados em NFS, veja Seção 11.2.2.7.1, “Criação de pools de armazenamento baseados em NFS usando o CLI”.

11.2.2.8. Criação e atribuição de armazenamento baseado em SCSI com dispositivos vHBA para máquinas virtuais usando o CLI

A seguir, são fornecidas informações sobre a criação de pools e volumes de armazenamento baseados em SCSI usando dispositivos vHBA, bem como a atribuição de volumes a máquinas virtuais (VMs).

Recomendações

N_Port ID Virtualization (NPIV) é uma tecnologia de software que permite o compartilhamento de um único adaptador físico de barramento host do Canal de Fibra (HBA). Isto permite que várias VMs vejam o mesmo armazenamento a partir de vários hosts físicos, e assim permite caminhos de migração mais fáceis para o armazenamento. Como resultado, não há necessidade de migração para criar ou copiar o armazenamento, desde que o caminho de armazenamento correto seja especificado.

Em virtualização, o virtual host bus adapter, ou vHBA, controla os Números de Unidade Lógica (LUNs) para VMs. Para que um host compartilhe um caminho de dispositivo Fibre Channel entre várias VMs, você deve criar um vHBA para cada VM. Um único vHBA não pode ser usado por múltiplas VMs.

Cada vHBA para NPIV é identificado por sua matriz HBA e seu próprio World Wide Node Name (WWNN) e World Wide Port Name (WWPN). O caminho para o armazenamento é determinado pelos valores WWNN e WWPN. O HBA pai pode ser definido como scsi_host# ou como um par WWNN/WWPN.

Nota

Se um HBA pai é definido como scsi_host# e hardware é adicionado à máquina hospedeira, o scsi_host# a tarefa pode mudar. Portanto, recomenda-se definir um HBA pai usando um par WWNN/WWPN.

Recomenda-se definir um pool de armazenamento libvirt com base no vHBA, pois isso preserva a configuração do vHBA.

A utilização de uma piscina de armazenamento de libvirt tem duas vantagens principais:

  • O código da libvirt pode facilmente encontrar o caminho do LUN através da saída do comando virsh.
  • Você pode migrar uma VM requer apenas definir e iniciar um pool de armazenamento com o mesmo nome vHBA na máquina alvo. Para fazer isto, o vHBA LUN, libvirt storage pool e o nome do volume devem ser especificados na configuração XML da VM.
Nota

Antes de criar um vHBA, é recomendado que você configure o zoneamento de armazenamento (SAN) no LUN do host para proporcionar isolamento entre VMs e evitar a possibilidade de corrupção de dados.

Para criar uma configuração vHBA persistente, primeiro crie um arquivo XML do pool de armazenamento 'scsi'. Para obter informações sobre o arquivo XML, consulte Criando vHBAs. Ao criar um único vHBA que utilize um pool de armazenamento no mesmo HBA físico, recomenda-se usar um local estável para o valor <path>, tal como um dos /dev/disk/by-{path|id|uuid|label} locais em seu sistema.

Ao criar múltiplos vHBAs que usam pools de armazenamento no mesmo HBA físico, o valor do campo <path> deve ser apenas /dev/, caso contrário, os volumes do pool de armazenamento são visíveis apenas para um dos vHBAs, e os dispositivos do host não podem ser expostos a múltiplos VMs com a configuração NPIV.

Para maiores informações sobre <path> e os elementos em <target>, veja a documentação da libvirt upstream.

11.2.2.8.1. Criando vHBAs

A seguir são fornecidas instruções para a criação de um adaptador de ônibus host virtual (vHBA).

Procedimento

  1. Localize os HBAs em seu sistema host, usando o comando virsh nodedev-list --cap vports.

    O exemplo seguinte mostra um anfitrião que tem dois HBAs que suportam o vHBA:

    # virsh nodedev-list --cap vports
    scsi_host3
    scsi_host4
  2. Veja os detalhes da HBA, usando o virsh nodedev-dumpxml HBA_device comando.

    # virsh nodedev-dumpxml scsi_host3

    A saída do comando lista os campos <name>, <wwnn>, e <wwpn>, que são usados para criar um vHBA. <max_vports> mostra o número máximo de vHBAs suportados. Por exemplo:

    <device>
      <name>scsi_host3</name>
      <path>/sys/devices/pci0000:00/0000:00:04.0/0000:10:00.0/host3</path>
      <parent>pci_0000_10_00_0</parent>
      <capability type='scsi_host'>
        <host>3</host>
        <unique_id>0</unique_id>
        <capability type='fc_host'>
          <wwnn>20000000c9848140</wwnn>
          <wwpn>10000000c9848140</wwpn>
          <fabric_wwn>2002000573de9a81</fabric_wwn>
        </capability>
        <capability type='vport_ops'>
          <max_vports>127</max_vports>
          <vports>0</vports>
        </capability>
      </capability>
    </device>

    Neste exemplo, o valor <max_vports> mostra que há um total de 127 portas virtuais disponíveis para uso na configuração HBA. O valor <vports> mostra o número de portas virtuais que estão sendo utilizadas atualmente. Estes valores são atualizados após a criação de um vHBA.

  3. Criar um arquivo XML similar a um dos seguintes para o host vHBA. Nestes exemplos, o nome do arquivo é vhba_host3.xml.

    Este exemplo usa scsi_host3 para descrever o vHBA pai.

    <device>
      <parent>scsi_host3</parent>
      <capability type='scsi_host'>
        <capability type='fc_host'>
        </capability>
      </capability>
    </device>

    Este exemplo usa um par WWNN/WWPN para descrever o vHBA pai.

    <device>
      <name>vhba</name>
      <parent wwnn='20000000c9848140' wwpn='10000000c9848140'/>
      <capability type='scsi_host'>
        <capability type='fc_host'>
        </capability>
      </capability>
    </device>
    Nota

    Os valores da WWNN e da WWPN devem coincidir com os valores da HBA, que foram vistos na etapa anterior.

    O campo <parent> especifica o dispositivo HBA a ser associado a este dispositivo vHBA. Os detalhes na tag <device> são usados na próxima etapa para criar um novo dispositivo vHBA para o host. Para mais informações sobre o formato nodedev XML, veja as páginas da libvirt upstream.

    Nota

    O comando virsh não fornece uma forma de definir os atributos parent_wwnn, parent_wwpn, ou parent_fabric_wwn.

  4. Criar um VHBA com base no arquivo XML criado na etapa anterior usando o comando virsh nodev-create.

    # virsh nodedev-create vhba_host3
    Node device scsi_host5 created from vhba_host3.xml

Verificação

  • Verifique os detalhes do novo vHBA (scsi_host5) usando o comando virsh nodedev-dumpxml:

    # virsh nodedev-dumpxml scsi_host5
    <device>
      <name>scsi_host5</name>
      <path>/sys/devices/pci0000:00/0000:00:04.0/0000:10:00.0/host3/vport-3:0-0/host5</path>
      <parent>scsi_host3</parent>
      <capability type='scsi_host'>
        <host>5</host>
        <unique_id>2</unique_id>
        <capability type='fc_host'>
          <wwnn>5001a4a93526d0a1</wwnn>
          <wwpn>5001a4ace3ee047d</wwpn>
          <fabric_wwn>2002000573de9a81</fabric_wwn>
        </capability>
      </capability>
    </device>
11.2.2.8.2. Criação de pools de armazenamento baseados em SCSI com dispositivos vHBA usando o CLI

A seguir fornecemos instruções para a criação de pools de armazenamento baseados em SCSI usando dispositivos de adaptador de ônibus host virtual (vHBA).

Pré-requisitos

  • Assegure-se de que seu hipervisor suporte pools de armazenamento baseados em SCSI:

    # virsh pool-capabilities | grep "'scsi' supported='yes'"

    Se o comando exibir qualquer saída, os pools baseados em SCSI são suportados.

  • Antes de criar um pool de armazenamento baseado em SCSI com dispositivos vHBA, crie um vHBA. Para mais informações, consulte Criando vHBAs.

Procedimento

  1. Create a storage pool

    Use o comando virsh pool-define-as para definir e criar um pool de armazenamento SCSI usando um vHBA. Por exemplo, o seguinte cria um pool de armazenamento chamado guest_images_vhba que usa um vHBA identificado pelo adaptador pai scsi_host3, porta mundial número 5001a4ace3ee047d, e nó mundial número 5001a4a93526d0a1. O pool de armazenamento é montado no diretório /dev/disk/:

    # virsh pool-define-as guest_images_vhba scsi --adapter-parent scsi_host3 --adapter-wwnn 5001a4a93526d0a1 --adapter-wwpn 5001a4ace3ee047d --target /dev/disk/
    Pool guest_images_vhba defined

    Se você já possui uma configuração XML do pool de armazenamento que deseja criar, você também pode definir o pool com base no XML. Para detalhes, veja Seção 11.2.2.8.3, “Parâmetros para piscinas de armazenamento baseadas em SCSI com dispositivos vHBA”.

  2. Verify that the pool was created

    Use o comando virsh pool-list para verificar se o pool foi criado.

    # virsh pool-list --all
    
      Name                 State      Autostart
      -----------------------------------------
      default              active     yes
      guest_images_vhba    inactive   no
  3. Start the storage pool

    Use o comando virsh pool-start para montar o pool de armazenamento.

    # virsh pool-start guest_images_vhba
      Pool guest_images_vhba started
    Nota

    O comando virsh pool-start só é necessário para poços de armazenamento persistentes. Os pools de armazenagem transitórios são automaticamente iniciados quando são criados.

  4. [Optional] Turn on autostart

    Por padrão, um pool de armazenamento definido com o comando virsh não é definido para iniciar automaticamente cada vez que a libvirtd inicia. Use o comando virsh pool-autostart para configurar o pool de armazenamento para reiniciar automaticamente.

    # virsh pool-autostart guest_images_vhba
      Pool guest_images_vhba marked as autostarted

Verificação

  1. Use o comando virsh pool-list para verificar o Autostart estado.

    # virsh pool-list --all
    
      Name                 State      Autostart
      -----------------------------------------
      default              active     yes
      guest_images_vhba    inactive   yes
  2. Verificar se o pool de armazenagem foi criado corretamente, se os tamanhos relatados são os esperados e se o estado é relatado como running.

    # virsh pool-info guest_images_vhba
      Name:           guest_images_vhba
      UUID:           c7466869-e82a-a66c-2187-dc9d6f0877d0
      State:          running
      Persistent:     yes
      Autostart:      yes
      Capacity:       458.39 GB
      Allocation:     197.91 MB
      Available:      458.20 GB
11.2.2.8.3. Parâmetros para piscinas de armazenamento baseadas em SCSI com dispositivos vHBA

A seguir são fornecidas informações sobre os parâmetros necessários para um pool de armazenamento baseado em SCSi que utiliza um dispositivo host bus adaptador virtual (vHBA).

Você pode definir um pool de armazenamento com base na configuração XML em um arquivo especificado. Por exemplo:

# virsh pool-define ~/guest_images.xml
  Pool defined from guest_images_vhba

Parâmetros

A tabela a seguir fornece uma lista dos parâmetros necessários para o arquivo XML para um pool de armazenamento baseado em SCSI com vHBA.

Tabela 11.8. Parâmetros para piscinas de armazenamento baseadas em SCSI com dispositivos vHBA

DescriçãoXML

O tipo de piscina de armazenamento

<pool type='scsi'>

O nome do pool de armazenagem

<name>name</name>

O identificador do vHBA. O atributo parent é opcional.

<source>
   <adapter type='fc_host'
   [parent=parent_scsi_device]
   wwnn='WWNN'
   wwpn='WWPN' />
</source>

O caminho-alvo. Este será o caminho utilizado para o pool de armazenamento.

<target>
   <path=target_path />
</target>

Importante

Quando o campo <path> é /dev/ libvirt gera um caminho curto e único para o caminho do dispositivo de volume. Por exemplo, /dev/sdc. Caso contrário, é utilizado o caminho físico do hospedeiro. Por exemplo, /dev/disk/by-path/pci-0000:10:00.0-fc-0x5006016044602198-lun-0. O caminho curto e exclusivo do dispositivo permite que o mesmo volume seja listado em várias máquinas virtuais (VMs) por vários pools de armazenamento. Se o caminho físico do host for usado por múltiplas VMs, podem ocorrer avisos duplicados do tipo de dispositivo.

Nota

O atributo parent pode ser usado no campo <adapter> para identificar o pai físico HBA a partir do qual os LUNs NPIV podem ser usados por caminhos variados. Este campo, scsi_hostN, é combinado com os atributos vports e max_vports para completar a identificação dos pais. Os atributos parent, parent_wwnn, parent_wwpn, ou parent_fabric_wwn oferecem vários graus de garantia de que, após o reinício do host, o mesmo HBA é usado.

  • Se não for especificado parent, libvirt usa o primeiro adaptador scsi_hostN que suporta o NPIV.
  • Se apenas o parent for especificado, podem surgir problemas se forem acrescentados adaptadores SCSI adicionais à configuração.
  • Se for especificado parent_wwnn ou parent_wwpn, após a reinicialização do host, o mesmo HBA é usado.
  • Se for utilizado parent_fabric_wwn, após a reinicialização do host é selecionado um HBA no mesmo tecido, independentemente do scsi_hostN utilizado.

Exemplos

A seguir, alguns exemplos de arquivos XML para pools de armazenamento baseados em SCSI com vHBA.

  • Um pool de armazenagem que é o único pool de armazenagem na HBA:

    <pool type='scsi'>
      <name>vhbapool_host3</name>
      <source>
        <adapter type='fc_host' wwnn='5001a4a93526d0a1' wwpn='5001a4ace3ee047d'/>
      </source>
      <target>
        <path>/dev/disk/by-path</path>
      </target>
    </pool>
  • Um pool de armazenamento que é um dos vários pools de armazenamento que utilizam um único vHBA e usa o atributo parent para identificar o dispositivo host SCSI:

    <pool type='scsi'>
      <name>vhbapool_host3</name>
      <source>
        <adapter type='fc_host' parent='scsi_host3' wwnn='5001a4a93526d0a1' wwpn='5001a4ace3ee047d'/>
      </source>
      <target>
        <path>/dev/disk/by-path</path>
      </target>
    </pool>

Recursos adicionais

Para mais informações sobre a criação de pools de armazenamento baseados em SCSI com vHBA, veja Seção 11.2.2.8.2, “Criação de pools de armazenamento baseados em SCSI com dispositivos vHBA usando o CLI”.

11.2.2.9. Criação e atribuição de volumes de armazenamento usando o CLI

Para obter uma imagem de disco e anexá-la a uma máquina virtual (VM) como disco virtual, criar um volume de armazenamento e atribuir sua configuração XML a uma VM.

Pré-requisitos

  • Uma piscina de armazenamento com espaço não alocado está presente no anfitrião. Para verificar, liste os pools de armazenamento no host:

    # virsh pool-list --details
    
    Name               State     Autostart   Persistent   Capacity     Allocation   Available
    --------------------------------------------------------------------------------------------
    default            running   yes         yes          48.97 GiB    36.34 GiB    12.63 GiB
    Downloads          running   yes         yes          175.92 GiB   121.20 GiB   54.72 GiB
    VM-disks           running   yes         yes          175.92 GiB   121.20 GiB   54.72 GiB

Procedimento

  1. Crie um volume de armazenamento usando o comando virsh vol-create-as. Por exemplo, para criar um volume de 20 GB qcow2 com base no pool de armazenamento guest-images-fs:

    # virsh vol-create-as --pool guest-images-fs --name vm-disk1 --capacity 20 --format qcow2

    Important: Tipos específicos de pool de armazenamento não suportam o comando virsh vol-create-as e, em vez disso, requerem processos específicos para criar volumes de armazenamento:

    • GlusterFS-based - Use o comando qemu-img para criar volumes de armazenamento.
    • iSCSI-based - Prepare os iSCSI LUNs com antecedência no servidor iSCSI.
    • Multipath-based - Use o comando multipathd para preparar ou administrar o multipath.
    • vHBA-based - Prepare o cartão do canal de fibra com antecedência.
  2. Criar um arquivo XML, e adicionar as seguintes linhas nele. Este arquivo será usado para adicionar o volume de armazenamento como um disco a uma VM.

    <disk type='volume' device='disk'>
        <driver name='qemu' type='qcow2'/>
        <source pool='guest-images-fs' volume='vm-disk1'/>
        <target dev='hdk' bus='ide'/>
    </disk>

    Este exemplo especifica um disco virtual que utiliza o volume vm-disk1, criado na etapa anterior, e define o volume a ser configurado como disco hdk em um ônibus ide. Modifique os respectivos parâmetros conforme apropriado para seu ambiente.

    Important: Com tipos específicos de pool de armazenamento, você deve usar diferentes formatos XML para descrever um disco de volume de armazenamento.

    • Para GlusterFS-based pools:

        <disk type='network' device='disk'>
          <driver name='qemu' type='raw'/>
          <source protocol='gluster' name='Volume1/Image'>
            <host name='example.org' port='6000'/>
          </source>
          <target dev='vda' bus='virtio'/>
          <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
        </disk>
    • Para multipath-based pools:

      <disk type='block' device='disk'>
      <driver name='qemu' type='raw'/>
      <source dev='/dev/mapper/mpatha' />
      <target dev='sda' bus='scsi'/>
      </disk>
    • Para RBD-based storage pools:

        <disk type='network' device='disk'>
          <driver name='qemu' type='raw'/>
          <source protocol='rbd' name='pool/image'>
            <host name='mon1.example.org' port='6321'/>
          </source>
          <target dev='vdc' bus='virtio'/>
        </disk>
  3. Use o arquivo XML para atribuir o volume de armazenamento como um disco a uma VM. Por exemplo, para atribuir um disco definido em ~/vm-disk1.xml para a VM testguest1:

    # attach-device --config testguest1 ~/vm-disk1.xml

Verificação

  • No sistema operacional convidado da VM, confirme que a imagem do disco ficou disponível como um disco não formatado e não alocado.

11.2.3. Eliminação do armazenamento para máquinas virtuais usando o CLI

A seguir, são fornecidas informações sobre a eliminação de pools de armazenamento e volumes de armazenamento usando o CLI.

11.2.3.1. Eliminação de pools de armazenamento usando o CLI

Para remover um pool de armazenamento de seu sistema hospedeiro, você deve parar o pool e remover sua definição de XML.

Procedimento

  1. Liste os pools de armazenamento definidos usando o comando virsh pool-list.

    # virsh pool-list --all
    Name                 State      Autostart
    -------------------------------------------
    default              active     yes
    Downloads            active     yes
    RHEL8-Storage-Pool   active     yes
  2. Pare o pool de armazenamento que você deseja excluir usando o comando virsh pool-destroy.

    # virsh pool-destroy Downloads
    Pool Downloads destroyed
  3. Optional: Para alguns tipos de pools de armazenamento, você pode remover o diretório onde o pool de armazenamento reside usando o comando virsh pool-delete. Note que para fazer isso, o diretório deve estar vazio.

    # virsh pool-delete Downloads
    Pool Downloads deleted
  4. Eliminar a definição do pool de armazenamento usando o comando virsh pool-undefine.

    # virsh pool-undefine Downloads
    Pool Downloads has been undefined

Verificação

  • Confirmar que o pool de armazenamento foi eliminado.

    # virsh pool-list --all
    Name                 State      Autostart
    -------------------------------------------
    default              active     yes
    RHEL8-Storage-Pool   active     yes

11.2.3.2. Eliminação de volumes de armazenamento usando o CLI

Para remover um volume de armazenamento de seu sistema hospedeiro, você deve parar o pool e remover sua definição de XML.

Pré-requisitos

  • Qualquer máquina virtual que utilize o volume de armazenamento que você deseja excluir é desligada.

Procedimento

  1. Liste os volumes de armazenamento definidos em um pool de armazenamento usando o comando virsh vol-list. O comando deve especificar o nome ou caminho de um pool de armazenagem.

    # virsh vol-list --pool RHEL8-Storage-Pool
     Name                 Path
    ---------------------------------------------------------------
     .bash_history        /home/VirtualMachines/.bash_history
     .bash_logout         /home/VirtualMachines/.bash_logout
     .bash_profile        /home/VirtualMachines/.bash_profile
     .bashrc              /home/VirtualMachines/.bashrc
     .git-prompt.sh       /home/VirtualMachines/.git-prompt.sh
     .gitconfig           /home/VirtualMachines/.gitconfig
     RHEL8_Volume.qcow2   /home/VirtualMachines/RHEL8_Volume.qcow2
  2. Excluir volumes de armazenamento usando o comando virsh vol-delete. O comando deve especificar o nome ou caminho do volume de armazenamento e o pool de armazenamento do qual o volume de armazenamento é abstraído.

    # virsh vol-delete --pool RHEL-Storage-Pool RHEL8_Volume.qcow2
    Pool RHEL8_Volume.qcow2 deleted

Verificação

  • Liste novamente os volumes de armazenamento definidos, e verifique se a saída não exibe mais o volume excluído.

    # virsh vol-list --pool RHEL8-Storage-Pool
     Name                 Path
    ---------------------------------------------------------------
     .bash_history        /home/VirtualMachines/.bash_history
     .bash_logout         /home/VirtualMachines/.bash_logout
     .bash_profile        /home/VirtualMachines/.bash_profile
     .bashrc              /home/VirtualMachines/.bashrc
     .git-prompt.sh       /home/VirtualMachines/.git-prompt.sh
     .gitconfig           /home/VirtualMachines/.gitconfig

11.3. Gerenciamento de armazenamento para máquinas virtuais usando o console web

Usando o console web RHEL 8, você pode gerenciar vários aspectos do armazenamento de uma máquina virtual (VM's). Você pode usar o console web para:

11.3.1. Visualização das informações do pool de armazenamento usando o console web

O procedimento a seguir descreve como visualizar informações detalhadas sobre os pools de armazenamento da máquina virtual (VM) que a sessão do console web pode acessar.

Pré-requisitos

Procedimento

  1. Clique em Piscinas de Armazenamento na parte superior da interface das Máquinas Virtuais. A janela Piscinas de Armazenamento aparece, mostrando uma lista de pools de armazenamento configurados.

    web console storage pools window

    As informações incluem o seguinte:

    • Name - O nome do pool de armazenagem.
    • Size - O tamanho do pool de armazenagem.
    • Connection - A conexão utilizada para acessar o pool de armazenamento.
    • State - O estado do pool de armazenagem.
  2. Clique na linha do depósito cujas informações você deseja ver.

    A linha se expande para revelar o painel de Visão Geral com as seguintes informações sobre o pool de armazenamento selecionado:

    • Path - O caminho para o pool de armazenagem.
    • Persistent - Se o pool de armazenagem é persistente ou não.
    • Autostart - Quer o pool de armazenagem comece ou não automaticamente.
    • Type - O tipo de piscina de armazenagem.
    web console storage pool overview
  3. Para ver uma lista dos volumes de armazenamento criados a partir do pool de armazenamento, clique em Volumes de Armazenamento.

    Aparece o painel de Volumes de Armazenamento, mostrando uma lista de volumes de armazenamento configurados com seus tamanhos e a quantidade de espaço utilizada.

    web console storage pool storage volumes

Recursos adicionais

11.3.2. Criação de pools de armazenamento utilizando o console web

Uma máquina virtual (VM) requer um arquivo, diretório ou dispositivo de armazenamento que pode ser usado para criar volumes de armazenamento para armazenar a imagem da VM ou atuar como armazenamento adicional. Você pode criar pools de armazenamento a partir de recursos locais ou baseados em rede que podem ser usados para criar os volumes de armazenamento.

Para criar pools de armazenamento usando o console web RHEL, veja o seguinte procedimento.

Pré-requisitos

Procedimento

  1. Clique em Piscinas de Armazenamento na parte superior da aba Máquinas Virtuais. A janela Piscinas de Armazenamento aparece, mostrando uma lista de pools de armazenamento configurados.

    web console storage pools window
  2. Clique em Create Storage Pool. Aparece a caixa de diálogo Criar Pool de Armazenamento.

    cockpit create storage pool
  3. Digite as seguintes informações no diálogo Criar Pool de Armazenamento:

    • Name - O nome do pool de armazenagem.
    • Type - O tipo de piscina de armazenagem. Pode ser um diretório de sistema de arquivos, um sistema de arquivos em rede, um alvo iSCSI, uma unidade de disco físico ou um grupo de volume LVM.
    • Target Path - O caminho do pool de armazenamento no sistema de arquivos do host.
    • Startup - Se a piscina de armazenamento começa ou não quando as botas do anfitrião.
  4. Clique em Criar. O pool de armazenagem é criado, o diálogo Criar pool de armazenagem é fechado e o novo pool de armazenagem aparece na lista de pools de armazenagem.

Recursos adicionais

11.3.3. Remoção de pools de armazenamento usando o console web

Você pode remover pools de armazenamento para liberar recursos no host ou na rede para melhorar o desempenho do sistema. A eliminação dos pools de armazenamento também libera recursos que podem ser utilizados por outras máquinas virtuais (VMs).

Importante

A menos que explicitamente especificado, a eliminação de um pool de armazenamento não elimina simultaneamente os volumes de armazenamento dentro desse pool.

Para excluir um pool de armazenamento usando o console web RHEL, veja o seguinte procedimento.

Nota

Se você deseja desativar temporariamente um pool de armazenamento em vez de excluí-lo, veja Desativação de pools de armazenamento usando o console web

Pré-requisitos

Procedimento

  1. Clique em Piscinas de Armazenamento na parte superior da aba Máquinas Virtuais. A janela Piscinas de Armazenamento aparece, mostrando uma lista de pools de armazenamento configurados.

    web console storage pools window
  2. Na janela Piscinas de armazenamento, clique no pool de armazenamento que você deseja excluir.

    A linha se expande para revelar o painel Visão Geral com informações básicas sobre o pool de armazenamento selecionado e controles para desativar ou excluir o pool de armazenamento.

    web console storage pool overview
  3. Clique em Excluir.

    Aparece um diálogo de confirmação.

    cockpit storage pool delete confirm
  4. Optional: Para excluir os volumes de armazenamento dentro do pool, selecione a caixa de seleção no diálogo.
  5. Clique em Excluir.

    O pool de armazenamento é eliminado. Se você tiver selecionado a caixa de seleção na etapa anterior, os volumes de armazenamento associados também são excluídos.

Recursos adicionais

11.3.4. Desativação de pools de armazenamento usando o console web

Se você não quiser excluir permanentemente um pool de armazenamento, pode desativá-lo temporariamente em seu lugar.

Ao desativar um pool de armazenagem, nenhum volume novo pode ser criado nesse pool. Entretanto, quaisquer máquinas virtuais (VMs) que tenham volumes nesse pool continuarão a funcionar. Isto é útil por várias razões, por exemplo, você pode limitar o número de volumes que podem ser criados em um pool para aumentar o desempenho do sistema.

Para desativar um pool de armazenamento usando o console web RHEL, veja o seguinte procedimento.

Pré-requisitos

Procedimento

  1. Clique em Piscinas de Armazenamento na parte superior da aba Máquinas Virtuais. A janela Piscinas de Armazenamento aparece, mostrando uma lista de pools de armazenamento configurados.

    web console storage pools window
  2. Na janela Piscinas de armazenamento, clique no pool de armazenamento que você deseja desativar.

    A linha se expande para revelar o painel Visão Geral com informações básicas sobre o pool de armazenamento selecionado e controles para desativar e excluir a VM.

    web console storage pool overview
  3. Clique em Desativar.

    web console storage pool overview

    O pool de armazenamento está desativado.

Recursos adicionais

11.3.5. Criação de volumes de armazenamento usando o console web

Para criar uma máquina virtual funcional (VM) é necessário um dispositivo de armazenamento local designado à VM que possa armazenar a imagem da VM e os dados relacionados à VM. Você pode criar um volume de armazenamento em um pool de armazenamento e atribuí-lo a uma VM como um disco de armazenamento.

Para criar volumes de armazenamento usando o console web, veja o seguinte procedimento.

Pré-requisitos

Procedimento

  1. Clique em Piscinas de Armazenamento na parte superior da aba Máquinas Virtuais. A janela Piscinas de Armazenamento aparece, mostrando uma lista de pools de armazenamento configurados.

    web console storage pools window
  2. Na janela Piscinas de armazenamento, clique no pool de armazenamento a partir do qual você deseja criar um volume de armazenamento.

    A linha se expande para revelar o painel Visão Geral com informações básicas sobre o pool de armazenamento selecionado.

    web console storage pool overview
  3. Clique em Volumes de Armazenamento ao lado da guia Visão Geral na linha expandida.

    A guia Volume de armazenamento aparece com informações básicas sobre os volumes de armazenamento existentes, se houver.

    cockpit storage volume overview
  4. Clique em Create Volume (Criar volume).

    Aparece o diálogo Criar volume de armazenamento.

    cockpit create storage volume
  5. Digite as seguintes informações no diálogo Criar volume de armazenamento:

    • Name - O nome do volume de armazenamento.
    • Size - O tamanho do volume de armazenamento em MiB ou GiB.
    • Format - O formato do volume de armazenamento. Os tipos suportados são qcow2 e raw.
  6. Clique em Criar.

    O volume de armazenamento é criado, o diálogo Criar volume de armazenamento é fechado, e o novo volume de armazenamento aparece na lista de volumes de armazenamento.

Recursos adicionais

11.3.6. Remoção de volumes de armazenamento usando o console web

Você pode remover volumes de armazenamento para liberar espaço no pool de armazenamento, ou para remover itens de armazenamento associados a máquinas virtuais defunto (VMs).

Para remover volumes de armazenamento usando o console web RHEL, veja o seguinte procedimento.

Pré-requisitos

Procedimento

  1. Clique em Piscinas de Armazenamento na parte superior da aba Máquinas Virtuais. A janela Piscinas de Armazenamento aparece, mostrando uma lista de pools de armazenamento configurados.

    web console storage pools window
  2. Na janela Piscinas de armazenamento, clique no pool de armazenamento do qual você deseja remover um volume de armazenamento.

    A linha se expande para revelar o painel Visão Geral com informações básicas sobre o pool de armazenamento selecionado.

    web console storage pool overview
  3. Clique em Volumes de Armazenamento ao lado da guia Visão Geral na linha expandida.

    A guia Volume de armazenamento aparece com informações básicas sobre os volumes de armazenamento existentes, se houver.

    cockpit storage volume overview
  4. Selecione o volume de armazenamento que você deseja remover.

    cockpit delete storage volume
  5. Clique em Excluir 1 Volume

Recursos adicionais

11.3.7. Gerenciamento de discos de máquinas virtuais usando o console web

Usando o console web RHEL 8, você pode gerenciar os discos configurados para as máquinas virtuais às quais o console web está conectado.

Você pode:

11.3.7.1. Visualização das informações do disco da máquina virtual no console web

O procedimento a seguir descreve como visualizar as informações em disco de uma máquina virtual (VM) à qual a sessão do console web está conectada.

Pré-requisitos

Para usar o console web para gerenciar as VMs, instale o plug-in de VM do console web.

Procedimento

  1. Clique na fila do VM cujas informações você deseja ver.

    A linha se expande para revelar o painel Overview com informações básicas sobre o VM selecionado e controles para desligar e excluir o VM.

  2. Clique em Discos.

    O painel de discos aparece com informações sobre os discos designados para a VM.

cockpit disk info

As informações incluem o seguinte:

  • Device - O tipo de dispositivo do disco.
  • Used - A quantidade do disco que é utilizada.
  • Capacity - O tamanho do disco.
  • Bus - O tipo de ônibus do disco.
  • Access - Se o disco é gravável ou somente leitura.
  • Source - O dispositivo ou arquivo em disco.

Recursos adicionais

11.3.7.2. Adicionando novos discos a máquinas virtuais usando o console web

Você pode adicionar novos discos às máquinas virtuais (VMs) criando um novo volume de armazenamento e anexando-o a uma VM usando o console web RHEL 8.

Pré-requisitos

Procedimento

  1. Na interface das Máquinas Virtuais, clique na linha da VM para a qual você deseja criar e anexe um novo disco.

    A linha se expande para revelar o painel Overview com informações básicas sobre o VM selecionado e controles para desligar e excluir o VM.

  2. Clique em Discos.

    O painel de discos aparece com informações sobre os discos configurados para a VM.

    informações do disco do cockpit

  3. Clique em Adicionar disco.

    Aparece o diálogo Adicionar disco.

    cockpit adicionar disco

  4. Selecione a opção Create New.
  5. Configurar o novo disco.

    • Pool - Selecione o pool de armazenamento a partir do qual o disco virtual será criado.
    • Name - Digite um nome para o disco virtual que será criado.
    • Size - Digite o tamanho e selecione a unidade (MiB ou GiB) do disco virtual que será criado.
    • Format - Selecione o formato para o disco virtual que será criado. Os tipos suportados são qcow2 e raw.
    • Persistence - Se verificado, o disco virtual é persistente. Se não verificado, o disco virtual é transitório.

      Nota

      Os discos transitórios só podem ser adicionados aos VMs que estão em funcionamento.

    • Additional Options - Definir configurações adicionais para o disco virtual.

      • Cache - Selecione o tipo de cache para o disco virtual.
      • Bus - Selecione o tipo de ônibus para o disco virtual.
  6. Clique em Adicionar.

    O disco virtual é criado e conectado ao VM.

Recursos adicionais

11.3.7.3. Fixação de discos existentes em máquinas virtuais usando o console web

O procedimento a seguir descreve como fixar volumes de armazenamento existentes como discos em uma máquina virtual (VM) usando o console web RHEL 8.

Pré-requisitos

Procedimento

  1. Na interface das Máquinas Virtuais, clique na linha da VM à qual você deseja anexar um disco existente.

    A linha se expande para revelar o painel Overview com informações básicas sobre o VM selecionado e controles para desligar e excluir o VM.

  2. Clique em Discos.

    O painel de discos aparece com informações sobre os discos configurados para a VM.

    cockpit disk info
  3. Clique em Adicionar disco.

    Aparece o diálogo Adicionar disco.

    cockpit add disk
  4. Clique no botão de rádio Use Existing.

    Os campos de configuração apropriados aparecem no diálogo Adicionar disco.

    cockpit attach disk
  5. Configure o disco para a VM.

    • Pool - Selecione o pool de armazenamento a partir do qual o disco virtual será anexado.
    • Volume - Selecione o volume de armazenamento que será anexado.
    • Persistence - Verifique para que o disco virtual seja persistente. Limpar para que o disco virtual seja transitório.
    • Additional Options - Definir configurações adicionais para o disco virtual.

      • Cache - Selecione o tipo de cache para o disco virtual.
      • Bus - Selecione o tipo de ônibus para o disco virtual.
  6. Clique em Adicionar

    O disco virtual selecionado é anexado ao VM.

Recursos adicionais

11.3.7.4. Desacoplamento de discos de máquinas virtuais

O seguinte descreve como destacar discos de máquinas virtuais (VMs) usando o console web RHEL 8.

Pré-requisitos

Procedimento

  1. Na interface das Máquinas Virtuais, clique na linha da VM da qual você deseja destacar um disco existente.

    A linha se expande para revelar o painel Overview com informações básicas sobre o VM selecionado e controles para desligar e excluir o VM.

  2. Clique em Discos.

    O painel de discos aparece com informações sobre os discos configurados para a VM.

    informações do disco do cockpit

  3. Clique no botão Remover ao lado do disco que você deseja separar da VM. Um diálogo de confirmação Remove Disk aparece.
  4. No diálogo de confirmação, clique em Remover.

    O disco virtual é destacado do VM.

Recursos adicionais

Capítulo 12. Gerenciando os dispositivos NVIDIA vGPU

O recurso vGPU torna possível dividir um dispositivo GPU NVIDIA físico em múltiplos dispositivos virtuais, referidos como mediated devices. Estes dispositivos mediados podem então ser atribuídos a múltiplas máquinas virtuais (VMs) como GPUs virtuais. Como resultado, estas VMs podem compartilhar a performance de uma única GPU física.

Importante

A atribuição de uma GPU física a VMs, com ou sem o uso de dispositivos mediados, torna impossível para o host utilizar a GPU.

12.1. Configurando os dispositivos NVIDIA vGPU

Para configurar o recurso NVIDIA vGPU, você precisa baixar os drivers NVIDIA vGPU para seu dispositivo GPU, criar dispositivos mediados e atribuí-los às máquinas virtuais previstas. Para instruções detalhadas, veja abaixo.

Pré-requisitos

  • O pacote mdevctl está instalado.

    # yum install mdevctl
  • Sua GPU suporta dispositivos mediados por vGPU. Para uma lista atualizada das GPUs NVIDIA que suportam a criação de vGPUs, consulte a Documentação de Software de GPU NVIDIA.

    • Se você não souber qual GPU seu host está usando, instale o pacote lshw e use o comando lshw -C display. O exemplo a seguir mostra que o sistema está usando uma GPU NVIDIA Tesla P4, compatível com a vGPU.

      # lshw -C display
      
      *-display
             description: 3D controller
             product: GP104GL [Tesla P4]
             vendor: NVIDIA Corporation
             physical id: 0
             bus info: pci@0000:01:00.0
             version: a1
             width: 64 bits
             clock: 33MHz
             capabilities: pm msi pciexpress cap_list
             configuration: driver=vfio-pci latency=0
             resources: irq:16 memory:f6000000-f6ffffff memory:e0000000-efffffff memory:f0000000-f1ffffff

Procedimento

  1. Faça o download dos drivers NVIDIA vGPU e instale-os em seu sistema. Para instruções, consulte a documentação da NVIDIA.
  2. Se o instalador do software NVIDIA não criou o arquivo /etc/modprobe.d/nvidia-installer-disable-nouveau.conf, crie um arquivo conf com qualquer nome em /etc/modprobe.d/, e acrescente as seguintes linhas no arquivo:

    blacklist nouveau
    options nouveau modeset=0
  3. Regenerar o ramdisco inicial para o kernel atual, depois reiniciar.

    # dracut --force
    # reboot
  4. Verifique se o kernel carregou o módulo nvidia_vgpu_vfio e se o serviço nvidia-vgpu-mgr.service está funcionando.

    # lsmod | grep nvidia_vgpu_vfio
    nvidia_vgpu_vfio 45011 0
    nvidia 14333621 10 nvidia_vgpu_vfio
    mdev 20414 2 vfio_mdev,nvidia_vgpu_vfio
    vfio 32695 3 vfio_mdev,nvidia_vgpu_vfio,vfio_iommu_type1
    
    # systemctl status nvidia-vgpu-mgr.service
    nvidia-vgpu-mgr.service - NVIDIA vGPU Manager Daemon
       Loaded: loaded (/usr/lib/systemd/system/nvidia-vgpu-mgr.service; enabled; vendor preset: disabled)
       Active: active (running) since Fri 2018-03-16 10:17:36 CET; 5h 8min ago
     Main PID: 1553 (nvidia-vgpu-mgr)
     [...]
  5. Gerar um dispositivo UUID.

    # uuidgen
    30820a6f-b1a5-4503-91ca-0c10ba58692a
  6. Crie um dispositivo mediado a partir do hardware da GPU que você detectou nos pré-requisitos, e atribua a UUID gerada ao dispositivo.

    O exemplo a seguir mostra como criar um dispositivo mediado do tipo nvidia-63 vGPU em uma placa NVIDIA Tesla P4 que roda no barramento PCI 0000:01:00.0:

    # mdevctl start -u 30820a6f-b1a5-4503-91ca-0c10ba58692a -p 0000:01:00.0 --type nvidia-63
    Nota

    Para os valores do tipo vGPU para dispositivos específicos de GPU, consulte a documentação do software Virtual GPU.

  7. Tornar o dispositivo mediado persistente:

    # mdevctl define --auto --uuid 30820a6f-b1a5-4503-91ca-0c10ba58692a

  8. Anexe o dispositivo mediado a uma VM que você deseja compartilhar os recursos do vGPU. Para isso, adicione as seguintes linhas, juntamente com a UUID previamente gerada, às seções <devices/> na configuração XML da VM.

    <hostdev mode='subsystem' type='mdev' managed='no' model='vfio-pci'>
      <source>
        <address uuid='30820a6f-b1a5-4503-91ca-0c10ba58692a'/>
      </source>
    </hostdev>

    Note que cada UUID só pode ser atribuída a uma VM de cada vez.

  9. Para que a funcionalidade completa dos dispositivos mediados pelo vGPU esteja disponível nas VMs designadas, configure o licenciamento do software convidado NVIDIA vGPU nas VMs. Para maiores informações e instruções, consulte o Guia do Usuário do Servidor de Licença do Software NVIDIA Virtual GPU.

Verificação

  • Liste os dispositivos mediados ativos em seu host. Se a saída exibir um dispositivo definido com o UUID usado no procedimento, o NVIDIA vGPU foi configurado corretamente. Por exemplo:

    # mdevctl list
    85006552-1b4b-45ef-ad62-de05be9171df 0000:01:00.0 nvidia-63
    30820a6f-b1a5-4503-91ca-0c10ba58692a 0000:01:00.0 nvidia-63 (defined)

Recursos adicionais

  • Para mais informações sobre o uso do utilitário mdevctl, use man mdevctl.

12.2. Remoção dos dispositivos NVIDIA vGPU

Para alterar a configuração dos dispositivos mediados por vGPU designados, é necessário remover os dispositivos existentes das VMs designadas. Para instruções, veja abaixo:

Pré-requisitos

  • O pacote mdevctl está instalado.

    # yum install mdevctl
  • A VM da qual se deseja remover o dispositivo é desligada.

Procedimento

  1. Obtenha a UUID do dispositivo mediado que você deseja remover. Para fazer isso, use o comando mdevctl list:

    # mdevctl list
    85006552-1b4b-45ef-ad62-de05be9171df 0000:01:00.0 nvidia-63 (defined)
    30820a6f-b1a5-4503-91ca-0c10ba58692a 0000:01:00.0 nvidia-63 (defined)
  2. Pare a instância de funcionamento do dispositivo vGPU mediado. Para isso, use o comando mdevctl stop com a UUID do dispositivo. Por exemplo, para parar o dispositivo 30820a6f-b1a5-4503-91ca-0c10ba58692a:

    # mdevctl stop -u 30820a6f-b1a5-4503-91ca-0c10ba58692a
  3. Remova o dispositivo da configuração XML da VM. Para isso, use o utilitário virsh edit para editar a configuração XML da VM, e remova o segmento de configuração do mdev. O segmento será semelhante ao seguinte:

    <hostdev mode='subsystem' type='mdev' managed='no' model='vfio-pci'>
      <source>
        <address uuid='30820a6f-b1a5-4503-91ca-0c10ba58692a'/>
      </source>
    </hostdev>

    Note que parar e destacar o dispositivo mediado não o apaga, mas sim o mantém como defined. Como tal, você pode reiniciar e anexar o dispositivo a uma VM diferente.

  4. Optional: Para apagar o dispositivo mediado parado, remova sua definição:

    # mdevctl undefine -u 30820a6f-b1a5-4503-91ca-0c10ba58692a

Verificação

  • Se você apenas parou e desativou o dispositivo, liste os dispositivos mediados ativos e os dispositivos mediados definidos.

    # mdevctl list
    85006552-1b4b-45ef-ad62-de05be9171df 0000:01:00.0 nvidia-63 (defined)
    # mdevctl list --defined
    85006552-1b4b-45ef-ad62-de05be9171df 0000:01:00.0 nvidia-63 auto (active)
    30820a6f-b1a5-4503-91ca-0c10ba58692a 0000:01:00.0 nvidia-63 manual

    Se o primeiro comando não exibe o dispositivo, mas o segundo comando exibe, o procedimento foi bem sucedido.

  • Se você também apagou o dispositivo, o segundo comando não deve exibir o dispositivo.

    # mdevctl list
    85006552-1b4b-45ef-ad62-de05be9171df 0000:01:00.0 nvidia-63 (defined)
    # mdevctl list --defined
    85006552-1b4b-45ef-ad62-de05be9171df 0000:01:00.0 nvidia-63 auto (active)

Recursos adicionais

  • Para mais informações sobre o uso do utilitário mdevctl, use man mdevctl.

12.3. Obtenção de informações NVIDIA vGPU sobre seu sistema

Para avaliar as capacidades dos recursos vGPU disponíveis para você, você pode obter informações adicionais sobre os dispositivos mediados em seu sistema, como por exemplo:

  • Quantos dispositivos mediados de um determinado tipo podem ser criados
  • Que dispositivos mediados já estão configurados em seu sistema.

Pré-requisitos

  • O pacote mdevctl está instalado.

    # yum install mdevctl

Procedimento

  • Para ver os tipos de vGPU disponíveis em seu host, use o comando mdevctl types.

    Por exemplo, o seguinte mostra as informações para um sistema que usa uma placa Tesla T4 física sob o barramento PCI 0000:41:00.0:

    # mdevctl types
    0000:41:00.0
      nvidia-222
        Available instances: 0
        Device API: vfio-pci
        Name: GRID T4-1B
        Description: num_heads=4, frl_config=45, framebuffer=1024M, max_resolution=5120x2880, max_instance=16
      nvidia-223
        Available instances: 0
        Device API: vfio-pci
        Name: GRID T4-2B
        Description: num_heads=4, frl_config=45, framebuffer=2048M, max_resolution=5120x2880, max_instance=8
      nvidia-224
        Available instances: 0
        Device API: vfio-pci
        Name: GRID T4-2B4
        Description: num_heads=4, frl_config=45, framebuffer=2048M, max_resolution=5120x2880, max_instance=8
      nvidia-225
        Available instances: 0
        Device API: vfio-pci
        Name: GRID T4-1A
        Description: num_heads=1, frl_config=60, framebuffer=1024M, max_resolution=1280x1024, max_instance=16
        [...]
  • Para ver os dispositivos vGPU ativos em seu host, incluindo seus tipos, UUIDs, e barramentos PCI dos dispositivos pai, use o comando mdevctl list:

    # mdevctl list
    85006552-1b4b-45ef-ad62-de05be9171df 0000:41:00.0 nvidia-223
    83c32df7-d52e-4ec1-9668-1f3c7e4df107 0000:41:00.0 nvidia-223 (defined)

    Este exemplo mostra que o dispositivo 85006552-1b4b-45ef-ad62-de05be9171df está funcionando, mas não definido, e o 83c32df7-d52e-4ec1-9668-1f3c7e4df107 está definido e em funcionamento.

Recursos adicionais

  • Para mais informações sobre o uso do utilitário mdevctl, use man mdevctl.

12.4. Serviços de streaming remoto de desktop para NVIDIA vGPU

Os seguintes serviços de streaming de desktop remoto foram testados com sucesso para uso com o recurso NVIDIA vGPU nos hosts RHEL 8:

  • HP-RGS - Note que atualmente não é possível utilizar HP-RGS com RHEL 8 VMs.
  • Mechdyne TGX - Note que atualmente não é possível utilizar o Mechdyne TGX com o Windows Server 2016 VMs.
  • NICE DCV - Ao utilizar este serviço de streaming, a Red Hat recomenda o uso de configurações de resolução fixa, pois o uso de resolução dinâmica em alguns casos resulta em uma tela preta. Além disso, atualmente não é possível utilizar NICE DCV com RHEL 8 VMs.

Capítulo 13. Configuração de conexões de rede de máquinas virtuais

Para que suas máquinas virtuais (VMs) se conectem através de uma rede ao seu host, a outras VMs em seu host, e a locais em uma rede externa, a rede de VMs deve ser configurada de acordo. Para fornecer rede VM, o hipervisor RHEL 8 e as VMs recém criadas têm uma configuração de rede padrão, que também pode ser modificada posteriormente. Por exemplo, a rede RHEL 8

  • Você pode permitir que as VMs em seu host sejam descobertas e conectadas por locais fora do host, como se as VMs estivessem na mesma rede que o host.
  • Você pode isolar parcial ou completamente uma VM do tráfego de entrada da rede para aumentar sua segurança e minimizar o risco de qualquer problema com a VM impactando o host.

As seções seguintes explicam os vários tipos de configuração de rede de VMs e fornecem instruções para a configuração de redes de VMs selecionadas.

13.1. Entendendo o trabalho em rede virtual

A conexão de máquinas virtuais (VMs) a outros dispositivos e locais em uma rede tem que ser facilitada pelo hardware do host. As seções seguintes explicam os mecanismos das conexões de rede de VMs e descrevem a configuração padrão da rede de VMs.

13.1.1. Como funcionam as redes virtuais

A rede virtual utiliza o conceito de um switch de rede virtual. Um comutador de rede virtual é uma construção de software que opera em uma máquina host. As VMs se conectam à rede através do comutador de rede virtual. Com base na configuração do switch virtual, uma VM pode usar uma rede virtual existente gerenciada pelo hypervisor, ou um método diferente de conexão de rede.

A figura a seguir mostra um switch de rede virtual conectando duas VMs à rede:

vn 02 switchandtwoguests

Da perspectiva de um sistema operacional convidado, uma conexão de rede virtual é o mesmo que uma conexão de rede física. Máquinas host vêem os switches de rede virtuais como interfaces de rede. Quando o serviço libvirtd é instalado e iniciado pela primeira vez, ele cria virbr0, a interface de rede padrão para VMs.

Para visualizar informações sobre esta interface, use o utilitário ip no host.

$ ip addr show virbr0
3: virbr0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state
 UNKNOWN link/ether 1b:c4:94:cf:fd:17 brd ff:ff:ff:ff:ff:ff
 inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0

Por padrão, todas as VMs em um único host estão conectadas à mesma rede virtual do tipo NAT, chamada default, que utiliza a interface virbr0. Para detalhes, veja Seção 13.1.2, “Configuração padrão de rede virtual”.

Para o acesso básico à rede de saída somente de VMs, geralmente não é necessária nenhuma configuração de rede adicional, pois a rede padrão é instalada junto com o pacote libvirt, e é automaticamente iniciada quando o serviço libvirtd é iniciado.

Se for necessária uma funcionalidade de rede VM diferente, você pode criar redes virtuais e interfaces de rede adicionais e configurar suas VMs para usá-las. Além do NAT padrão, estas redes e interfaces podem ser configuradas para usar um dos seguintes modos:

13.1.2. Configuração padrão de rede virtual

Quando o serviço libvirtd é instalado pela primeira vez em um host de virtualização, ele contém uma configuração de rede virtual inicial no modo de tradução de endereços de rede (NAT). Por padrão, todas as VMs no host estão conectadas à mesma rede virtual libvirt, chamada default. As VMs nesta rede podem conectar-se a locais tanto no host quanto na rede além do host, mas com as seguintes limitações:

  • As VMs na rede são visíveis para o host e outras VMs no host, mas o tráfego da rede é afetado pelas firewalls na pilha de rede do sistema operacional convidado e pelas regras de filtragem de rede libvirt anexadas à interface do convidado.
  • As VMs na rede podem se conectar não são visíveis a locais fora do host. O tráfego de saída é afetado pelas regras NAT, bem como pelo firewall do sistema host.

O diagrama a seguir ilustra a configuração padrão da rede VM:

vn 08 network overview

13.2. Utilização do console web para o gerenciamento de interfaces de rede de máquinas virtuais

Usando o console web RHEL 8, você pode gerenciar as interfaces de rede virtuais para as máquinas virtuais às quais o console web está conectado. Você pode:

13.2.1. Visualização e edição de informações da interface de rede virtual no console web

Usando o console web RHEL 8, você pode visualizar e modificar as interfaces de rede virtual em uma máquina virtual selecionada (VM):

Pré-requisitos

Procedimento

  1. Na interface das Máquinas Virtuais, clique na linha da VM cujas informações você deseja ver.

    A linha se expande para revelar o painel Overview com informações básicas sobre o VM selecionado e controles para desligar e excluir o VM.

  2. Clique em Interfaces de rede.

    O painel Interfaces de Redes aparece com informações sobre a interface de rede virtual configurada para a VM.

    cockpit vNIC info

    As informações incluem o seguinte:

    • Type - O tipo de interface de rede para a VM. Os tipos incluem rede virtual, ponte para LAN, e conexão direta.

      Nota

      Conexão Ethernet genérica não é suportada no RHEL 8.2.

    • Model type - O modelo da interface da rede virtual.
    • MAC Address - O endereço MAC da interface da rede virtual.
    • IP Address - O endereço IP da interface da rede virtual.
    • Source - A fonte da interface da rede. Isto depende do tipo de rede.
    • State - O estado da interface da rede virtual.
  3. Para editar as configurações da interface de rede virtual, clique em Editar. O diálogo Configurações da interface de rede virtual é aberto.

    web console virtual network if settings
  4. Alterar o tipo de interface, fonte ou modelo.
  5. Clique em Salvar. A interface da rede é modificada.

    Nota

    As mudanças nas configurações da interface de rede virtual entram em vigor somente após o reinício da VM.

Recursos adicionais

13.2.2. Conexão de interfaces de rede virtual no console web

Usando o console web RHEL 8, você pode reconectar a interface de rede virtual desconectada configurada para uma máquina virtual selecionada (VM).

Pré-requisitos

Procedimento

  1. Na interface das máquinas virtuais, clique na linha da VM cuja interface de rede virtual você deseja conectar.

    A linha se expande para revelar o painel Visão Geral com informações básicas sobre o VM selecionado e controles para desligar o VM.

  2. Clique em Interfaces de rede.

    O painel Interfaces de rede aparece com informações sobre as interfaces de rede virtuais configuradas para a VM.

    ficha do cockpit vNIC

  3. Clique em Plug na linha da interface da rede virtual que você deseja conectar.

    A interface de rede virtual selecionada se conecta com a VM.

13.2.3. Desconexão de interfaces de rede virtual no console web

Usando o console web RHEL 8, você pode desconectar as interfaces de rede virtuais conectadas a uma máquina virtual selecionada (VM).

Pré-requisitos

Procedimento

  1. Na interface das máquinas virtuais, clique na linha da VM cuja interface de rede virtual você deseja desconectar.

    A linha se expande para revelar o painel Overview com informações básicas sobre o VM selecionado e controles para desligar e excluir o VM.

  2. Clique em Interfaces de rede.

    O painel Interfaces de rede aparece com informações sobre as interfaces de rede virtuais configuradas para a VM.

    cockpit vNIC disconnect
  3. Clique em Desconectar na linha da interface de rede virtual que você deseja desconectar.

    A interface de rede virtual selecionada se desconecta da VM.

13.5. Tipos de conexões de rede de máquinas virtuais

Para modificar as propriedades de rede e o comportamento de suas VMs, altere o tipo de rede virtual ou a interface que as VMs utilizam. As seções seguintes descrevem os tipos de conexão disponíveis para as VMs no RHEL 8.

13.5.1. Rede virtual com tradução de endereços de rede

Por padrão, os switches de rede virtuais operam em modo de tradução de endereços de rede (NAT). Eles usam mascaramento IP em vez de Source-NAT (SNAT) ou Destination-NAT (DNAT). O mascaramento IP permite que os VMs conectados utilizem o endereço IP da máquina host para a comunicação com qualquer rede externa. Quando o switch de rede virtual está operando em modo NAT, os computadores externos ao host não podem se comunicar com as VMs dentro do host.

vn 04 hostwithnatswitch
Atenção

Os switches de rede virtual utilizam NAT configurado por regras iptables. A edição destas regras enquanto o switch está em funcionamento não é recomendada, pois regras incorretas podem resultar na impossibilidade de comunicação do switch.

13.5.2. Rede virtual em modo roteado

Ao utilizar o modo Routed, o switch virtual se conecta à LAN física conectada à máquina host, passando o tráfego para frente e para trás sem o uso de NAT. O switch virtual pode examinar todo o tráfego e usar as informações contidas nos pacotes da rede para tomar decisões de roteamento. Ao utilizar este modo, as máquinas virtuais (VMs) estão todas em uma única sub-rede, separadas da máquina host. A sub-rede VM é roteada através de um switch virtual, que existe na máquina hospedeira. Isto permite conexões de entrada, mas requer entradas extras na tabela de roteamento para sistemas na rede externa.

O modo roteado utiliza o roteamento baseado no endereço IP:

vn 06 routed switch

Topologias comuns que utilizam modo roteado incluem DMZs e hospedagem de servidores virtuais.

DMZ

Você pode criar uma rede onde um ou mais nós são colocados em uma subrede controlada por razões de segurança. Tal sub-rede é conhecida como zona desmilitarizada (DMZ).

vn 09 routed mode DMZ

Máquinas host em uma DMZ normalmente fornecem serviços para máquinas host WAN (externas), bem como máquinas host LAN (internas). Como isto exige que elas sejam acessíveis a partir de múltiplos locais, e considerando que estes locais são controlados e operados de diferentes maneiras com base em seu nível de segurança e confiança, o modo roteado é a melhor configuração para este ambiente.

Hospedagem de servidores virtuais

Um provedor de hospedagem de servidor virtual pode ter várias máquinas host, cada uma com duas conexões físicas de rede. Uma interface é usada para gerenciamento e contabilidade, a outra para as VMs se conectarem. Cada VM tem seu próprio endereço IP público, mas as máquinas host utilizam endereços IP privados para que somente administradores internos possam gerenciar as VMs.

vn 10 routed mode datacenter

13.5.3. Rede virtual em modo ponte

Na maioria dos modos de rede de VMs, as VMs criam e conectam-se automaticamente à ponte virtual virbr0. Em contraste, no modo bridged, a VM se conecta a uma ponte Linux existente no host. Como resultado, a VM é diretamente visível na rede física. Isto permite conexões de entrada, mas não requer nenhuma entrada extra na tabela de roteamento.

O modo Bridged usa comutação de conexão com base no endereço MAC:

vn Bridged Mode Diagram

No modo ponte, a VM aparece dentro da mesma sub-rede que a máquina host. Todas as outras máquinas físicas na mesma rede física podem detectar a VM e acessá-la.

Ligação em rede

É possível utilizar múltiplas interfaces físicas de ponte no hipervisor, unindo-as com um vínculo. A ligação pode então ser adicionada a uma ponte, após o que as VMs também podem ser adicionadas à ponte. No entanto, o acionador de ligação tem vários modos de operação, e nem todos estes modos funcionam com uma ponte onde as VMs estão em uso.

Os seguintes modos de colagem são utilizáveis:

  • modo 1
  • modo 2
  • modo 4

Em contraste, a utilização dos modos 0, 3, 5 ou 6 é susceptível de causar falha na conexão. Observe também que o monitoramento da interface independente de mídia (MII) deve ser usado para monitorar os modos de ligação, pois o monitoramento do Protocolo de Resolução de Endereços (ARP) não funciona corretamente.

Para mais informações sobre os modos de ligação, consulte a Base de Conhecimento da Red Hat.

Cenários comuns

Os casos mais comuns de uso para o modo ponte incluem:

  • Implantação de VMs em uma rede existente ao lado de máquinas host, fazendo a diferença entre máquinas virtuais e físicas invisíveis para o usuário final.
  • Implantação de VMs sem fazer nenhuma alteração nas configurações físicas de rede existentes.
  • Implantação de VMs que devem ser facilmente acessíveis a uma rede física existente. Colocar as VMs em uma rede física onde elas devem acessar os serviços DHCP.
  • Conexão de VMs a uma rede existente onde são utilizadas LANs virtuais (VLANs).

Recursos adicionais

13.5.4. Rede virtual em modo isolado

Ao utilizar o modo isolated, as máquinas virtuais conectadas ao switch virtual podem se comunicar entre si e com a máquina host, mas seu tráfego não passará fora da máquina host, e elas não podem receber tráfego de fora da máquina host. O uso de dnsmasq neste modo é necessário para funcionalidades básicas, como DHCP.

vn 07 isolated switch

13.5.5. Rede virtual em modo aberto

Ao utilizar o modo open para a rede, libvirt não gera nenhuma regra iptables para a rede. Como resultado, libvirt não sobregrava as regras iptables fornecidas pelo host, e o usuário pode, portanto, gerenciar manualmente as regras da VM iptables.

13.5.6. Fixação direta do dispositivo de rede virtual

Você pode usar o driver macvtap para anexar o NIC de uma máquina virtual diretamente a uma interface física especificada da máquina host. A conexão macvtap tem uma série de modos, incluindo private mode.

Neste modo, todos os pacotes são enviados para o switch externo e só serão entregues a uma VM alvo na mesma máquina host se forem enviados através de um roteador ou gateway externo e estes os enviarão de volta para o host. O modo privado pode ser usado para impedir que as VMs individuais em um único host se comuniquem entre si.

virt macvtap modes private

13.5.7. Comparação dos tipos de conexão de máquinas virtuais

A tabela a seguir fornece informações sobre os locais aos quais os tipos selecionados de configurações de rede de máquinas virtuais (VM) podem se conectar, e aos quais eles são visíveis.

Tabela 13.1. Tipos de conexão de máquinas virtuais

 Conexão com o anfitriãoConexão com outras VMs no hostConexão com locais externosVisível para locais externos

Bridged mode

SIM

SIM

SIM

SIM

NAT

SIM

SIM

SIM

no

Routed mode

SIM

SIM

SIM

SIM

Isolated mode

SIM

SIM

no

no

Private mode

no

no

SIM

SIM

Open mode

Depends on the host’s iptables rules

13.6. Recursos adicionais

Capítulo 14. Compartilhamento de arquivos entre o host e suas máquinas virtuais

Você pode freqüentemente precisar compartilhar dados entre seu sistema host e as máquinas virtuais (VMs) que ele executa. Para fazer isso de forma rápida e eficiente, você pode configurar compartilhamentos de arquivos NFS ou Samba em seu sistema.

14.1. Compartilhamento de arquivos entre o host e as máquinas virtuais Linux

Para um compartilhamento eficiente de arquivos entre seu sistema host e as VMs Linux às quais ele está conectado, você pode exportar um compartilhamento NFS que suas VMs podem montar e acessar.

Pré-requisitos

  • O pacote nfs-utils está instalado no host.
  • Um diretório que você deseja compartilhar com seus VMs. Se você não quiser compartilhar nenhum de seus diretórios existentes, crie um novo, por exemplo, chamado shared-files.

    # mkdir shared-files
  • O host é visível e alcançável através de uma rede para o VM. Este é geralmente o caso se a VM estiver conectada usando o tipo de rede virtual NAT e bridge. Entretanto, para a conexão macvtap, é necessário primeiro configurar o recurso macvlan no host. Para fazer isso:

    1. Criar um arquivo de dispositivo de rede, por exemplo, chamado vm-macvlan.netdev no diretório /etc/systemd/network/ do host.

      # touch /etc/systemd/network/vm-macvlan.netdev
    2. Edite o arquivo do dispositivo de rede para ter o seguinte conteúdo. Você pode substituir vm-macvlan pelo nome que você escolheu para seu dispositivo de rede.

      [NetDev]
      Name=vm-macvlan
      Kind=macvlan
      
      [MACVLAN]
      Mode=bridge
    3. Crie um arquivo de configuração de rede para seu dispositivo de rede macvlan, por exemplo vm-macvlan.network.

      # touch /etc/systemd/network/vm-macvlan.network
    4. Edite o arquivo de configuração da rede para ter o seguinte conteúdo. Você pode substituir vm-macvlan pelo nome que você escolheu para seu dispositivo de rede.

      [Match]
      Name=_vm-macvlan_
      
      [Network]
      IPForward=yes
      Address=192.168.250.33/24
      Gateway=192.168.250.1
      DNS=192.168.250.1
    5. Crie um arquivo de configuração de rede para sua interface física de rede. Por exemplo, se sua interface é enp4s0:

      # touch /etc/systemd/network/enp4s0.network

      Se você não tiver certeza de qual nome de interface usar, você pode usar o comando ifconfig em seu host para obter a lista de interfaces de rede ativas.

    6. Edite o arquivo de configuração física da rede para tornar a rede física uma parte da interface macvlan, neste caso vm-macvlan:

      [Match]
      Name=enp4s0
      
      [Network]
      MACVLAN=vm-macvlan
    7. Reinicie seu anfitrião.
  • Optional: Para maior segurança, garanta que suas VMs sejam compatíveis com o NFS versão 4 ou posterior.

Procedimento

  1. No host, exporte um diretório com os arquivos que você deseja compartilhar como um sistema de arquivos em rede (NFS).

    1. Obter o endereço IP de cada máquina virtual com a qual você deseja compartilhar arquivos. O exemplo a seguir obtém os IPs de testguest1 e testguest2.

      # virsh domifaddr testguest1
      Name       MAC address          Protocol     Address
      ----------------------------------------------------------------
      vnet0      52:53:00:84:57:90    ipv4         192.168.124.220/24
      
      # virsh domifaddr testguest2
      Name       MAC address          Protocol     Address
      ----------------------------------------------------------------
      vnet1      52:53:00:65:29:21    ipv4         192.168.124.17/24
    2. Edite o arquivo /etc/exports no host e adicione uma linha que inclua o diretório que você deseja compartilhar, IPs de VMs com as quais você deseja compartilhar, e opções de compartilhamento.

      Shared directory VM1-IP(options) VM2-IP(options) [...]

      Por exemplo, o seguinte compartilha o diretório /usr/local/shared-files no host com testguest1 e testguest2, e permite que as VMs editem o conteúdo do diretório:

      /usr/local/shared-files/ 192.168.124.220(rw,sync) 192.168.124.17(rw,sync)
    3. Exportar o sistema de arquivo atualizado.

      # exportfs -a
    4. Assegurar que o processo NFS seja iniciado:

      # systemctl start nfs-server
    5. Obter o endereço IP do sistema hospedeiro. Isto será usado para montagem posterior do diretório compartilhado nas VMs.

      # ip addr
      [...]
      5: virbr0: [BROADCAST,MULTICAST,UP,LOWER_UP] mtu 1500 qdisc noqueue state UP group default qlen 1000
          link/ether 52:54:00:32:ff:a5 brd ff:ff:ff:ff:ff:ff
          inet 192.168.124.1/24 brd 192.168.124.255 scope global virbr0
             valid_lft forever preferred_lft forever
      [...]

      Observe que a rede relevante é aquela que está sendo usada para conexão com o host pelas VMs com as quais você deseja compartilhar arquivos. Normalmente, isto é virbr0.

  2. No SO convidado de uma VM especificada no arquivo /etc/exports, monte o sistema de arquivo exportado.

    1. Crie um diretório que você deseja usar como ponto de montagem para o sistema de arquivos compartilhados, por exemplo /mnt/host-share:

      # mkdir /mnt/host-share
    2. Montar o diretório exportado pelo anfitrião no ponto de montagem. Este exemplo monta o diretório /usr/local/shared-files exportado pelo anfitrião 192.168.124.1 no site /mnt/host-share no convidado:

      # mount 192.168.124.1:/usr/local/shared-files /mnt/host-share
    3. Para verificar o sucesso da montagem, acessar e explorar o diretório compartilhado no ponto de montagem:

      # cd /mnt/host-share
      # ls
      shared-file1  shared-file2  shared-file3

14.2. Compartilhamento de arquivos entre o host e as máquinas virtuais Windows

Para um compartilhamento eficiente de arquivos entre seu sistema host e as VMs Windows às quais ele está conectado, você pode preparar um servidor Samba que suas VMs podem acessar.

Pré-requisitos

  • Os pacotes samba são instalados em seu host. Caso não estejam:

    # yum install samba
  • O host é visível e alcançável através de uma rede para o VM. Este é geralmente o caso se a VM estiver conectada usando o tipo de rede virtual NAT e bridge. Entretanto, para a conexão macvtap, é necessário primeiro configurar o recurso macvlan no host. Para fazer isso:

    1. Criar um arquivo de dispositivo de rede, por exemplo, chamado vm-macvlan.netdev no diretório /etc/systemd/network/ do host.

      # touch /etc/systemd/network/vm-macvlan.netdev
    2. Edite o arquivo do dispositivo de rede para ter o seguinte conteúdo. Você pode substituir vm-macvlan pelo nome que você escolheu para seu dispositivo de rede.

      [NetDev]
      Name=vm-macvlan
      Kind=macvlan
      
      [MACVLAN]
      Mode=bridge
    3. Crie um arquivo de configuração de rede para seu dispositivo de rede macvlan, por exemplo vm-macvlan.network.

      # touch /etc/systemd/network/vm-macvlan.network
    4. Edite o arquivo de configuração da rede para ter o seguinte conteúdo. Você pode substituir vm-macvlan pelo nome que você escolheu para seu dispositivo de rede.

      [Match]
      Name=_vm-macvlan_
      
      [Network]
      IPForward=yes
      Address=192.168.250.33/24
      Gateway=192.168.250.1
      DNS=192.168.250.1
    5. Crie um arquivo de configuração de rede para sua interface física de rede. Por exemplo, se sua interface é enp4s0:

      # touch /etc/systemd/network/enp4s0.network

      Se você não tiver certeza de qual interface usar, você pode usar o comando ifconfig em seu host para obter a lista de interfaces de rede ativas.

    6. Edite o arquivo de configuração física da rede para tornar a rede física uma parte da interface macvlan, neste caso vm-macvlan:

      [Match]
      Name=enp4s0
      
      [Network]
      MACVLAN=vm-macvlan
    7. Reinicie seu anfitrião.

Procedimento

  1. No host, criar um Samba share e torná-lo acessível para sistemas externos.

    1. Adicionar permissões de firewall para o Samba.

      # firewall-cmd --permanent --zone=public --add-service=samba
      success
      # firewall-cmd --reload
      success
    2. Edite o arquivo /etc/samba/smb.conf:

      1. Adicione o seguinte na seção [global]:

        mapa para convidado = Mau Usuário
      2. Adicione o seguinte no final do arquivo:

        #=== Share Definitions ===
        [VM-share]
        path = /samba/VM-share
        browsable = yes
        guest ok = yes
        read only = no
        hosts allow = 192.168.122.0/24

        Note que a linha hosts allow restringe a acessibilidade do compartilhamento apenas aos hosts da rede VM. Se você quiser que o compartilhamento seja acessível por qualquer pessoa, remova a linha.

    3. Criar o diretório /samba/VM-share.

      # mkdir -p /samba/VM-share
    4. Habilitar o serviço de Samba.

      # systemctl enable smb.service
      Created symlink /etc/systemd/system/multi-user.target.wants/smb.service → /usr/lib/systemd/system/smb.service.
    5. Reinicie o serviço de Samba.

      # systemctl restart smb.service
    6. Permitir que o diretório VM-share seja acessível e modificável para as VMs.

      # chmod -R 0755 /samba/VM-share/
      # chown -R nobody:nobody /samba/VM-share/
    7. Adicionar o selo SELinux Samba sharing ao /etc/samba/VM-share/

      # chcon -t samba_share_t /samba/VM-share/
  2. No sistema operacional Windows guest, anexe o Samba share como um local de rede.

    1. Abra o File Explorer e clique com o botão direito do mouse em "Este PC".
    2. No menu de contexto, clique em Add a network location.

      virt Win10 network loc1
    3. No assistente Add Network Location que se abre, selecione "Choose a custom network location" e clique em Next.
    4. No campo "Internet ou endereço de rede", digite host-IP/VM-share, onde host-IP é o endereço IP do host. Normalmente, o IP do host é o gateway padrão da VM. Em seguida, clique em Next.

      virt Win10 network loc2
    5. Quando o assistente perguntar se você deseja renomear o diretório compartilhado, mantenha o nome padrão. Isto assegura a consistência da configuração do compartilhamento de arquivos entre a VM e o convidado. Clique em Próximo.
    6. Se o acesso à localização da rede foi bem sucedido, você pode agora clicar em Finish e abrir o diretório compartilhado.

Capítulo 15. Segurança de máquinas virtuais

Como administrador de um sistema RHEL 8 com máquinas virtuais (VMs), garantir que suas VMs sejam tão seguras quanto possível reduz significativamente o risco de que seus sistemas operacionais hóspede e host sejam infectados por software malicioso.

Este documento descreve a mecânica de proteger as VMs em um host RHEL 8 e fornece uma lista de métodos para aumentar a segurança de suas VMs.

15.1. Como funciona a segurança em máquinas virtuais

Ao utilizar máquinas virtuais (VMs), vários sistemas operacionais podem ser alojados dentro de uma única máquina host. Estes sistemas são conectados ao host através do hypervisor, e geralmente também através de uma rede virtual. Como consequência, cada VM pode ser usado como um vetor para atacar o host com software malicioso, e o host pode ser usado como um vetor para atacar qualquer uma das VMs.

Figura 15.1. Um vetor potencial de ataque de malware em um host de virtualização

virt sec successful attack

Como o hypervisor usa o kernel do host para gerenciar as VMs, os serviços executados no sistema operacional da VM são freqüentemente usados para injetar código malicioso no sistema host. Entretanto, você pode proteger seu sistema contra tais ameaças de segurança, usando uma série de recursos de segurança em seu host e em seus sistemas convidados.

Estas características, tais como SELinux ou QEMU sandboxing, fornecem várias medidas que tornam mais difícil para o código malicioso atacar o hypervisor e transferir entre seu host e suas VMs.

Figura 15.2. Evitou ataques de malware a um hospedeiro de virtualização

virt sec prevented attack

Muitas das características que a RHEL 8 fornece para a segurança de VM estão sempre ativas e não precisam ser habilitadas ou configuradas. Para maiores detalhes, veja Seção 15.4, “Recursos automáticos para segurança de máquinas virtuais”.

Além disso, você pode aderir a uma variedade de melhores práticas para minimizar a vulnerabilidade de seus VMs e seu hipervisor. Para mais informações, consulte Seção 15.2, “Melhores práticas para a fixação de máquinas virtuais”.

15.2. Melhores práticas para a fixação de máquinas virtuais

Seguir as instruções abaixo diminui significativamente o risco de suas máquinas virtuais serem infectadas por código malicioso e usadas como vetores de ataque para infectar seu sistema hospedeiro.

On the guest side:

  • Proteja a máquina virtual como se fosse uma máquina física. Os métodos específicos disponíveis para aumentar a segurança dependem do sistema operacional convidado.

    Se seu VM estiver executando o RHEL 8, consulte Configuração e gerenciamento de segurança no RHEL 8 para instruções detalhadas sobre como melhorar a segurança de seu sistema de convidados.

On the host side:

  • Ao gerenciar as VMs remotamente, use utilitários criptográficos como SSH e protocolos de rede como SSL para conectar-se às VMs.
  • Certifique-se de que a SELinux está em modo Enforcing:

    # getenforce
    Enforcing

    Se o SELinux estiver desativado ou no modo Permissive, consulte o documento Utilizando o SELinux para obter instruções sobre como ativar o modo de aplicação.

    Nota

    O modo SELinux Enforcing também permite o recurso sVirt RHEL 8. Este é um conjunto de booleans SELinux especializados para virtualização, que podem ser ajustados manualmente para uma gestão de segurança de VM de granulometria fina.

  • Use as VMs com SecureBoot:

    O SecureBoot é uma característica que garante que seu VM esteja rodando um SO criptograficamente assinado. Isto impede que as VMs cujo sistema operacional tenha sido alterado por um ataque de malware inicializem.

    O SecureBoot só pode ser aplicado ao instalar uma VM Linux que utiliza firmware OVMF. Para instruções, veja Seção 15.3, “Criando uma máquina virtual SecureBoot”.

  • Não utilize os comandos qemu-*, tais como qemu-img.

    QEMU é um componente essencial da arquitetura de virtualização no RHEL 8, mas é difícil de gerenciar manualmente, e configurações impróprias de QEMU podem causar vulnerabilidades de segurança. Portanto, o uso dos comandos qemu-* não é suportado pela Red Hat. Ao invés disso, é altamente recomendado interagir com QEMU usando libvirt utilitários, tais como virsh, virt-install e virt-xml, pois estes orquestram QEMU de acordo com as melhores práticas.

Recursos adicionais

15.3. Criando uma máquina virtual SecureBoot

A seguir, fornecemos instruções sobre a criação de uma máquina virtual Linux (VM) que utiliza o recurso SecureBoot, que garante que sua VM esteja rodando um SO criptograficamente assinado. Se o sistema operacional convidado de uma VM foi alterado por malware, o SecureBoot impede a inicialização da VM, o que impede a possível propagação do malware para sua máquina host.

Pré-requisitos

  • A VM está usando o tipo de máquina Q35.
  • Os pacotes edk2-OVMF estão instalados:

    # yum install edk2-ovmf
  • Uma fonte de instalação de sistema operacional (SO) está disponível localmente ou em uma rede. Este pode ser um dos seguintes formatos:

    • Uma imagem ISO de um meio de instalação
    • Uma imagem em disco de uma instalação de VM existente
  • Opcional: Um arquivo Kickstart pode ser fornecido para uma configuração mais rápida e fácil da instalação.

Procedimento

  1. Use o comando virt-install para criar uma VM, conforme detalhado em Seção 2.2.1, “Criação de máquinas virtuais usando a interface de linha de comando”. Para a opção --boot, utilize o valor uefi,nvram_template=/usr/share/OVMF/OVMF_VARS.secboot.fd. Isto usa os arquivos OVMF_VARS.secboot.fd e OVMF_CODE.secboot.fd como modelos para as configurações não voláteis de RAM (NVRAM) da VM, o que permite o recurso SecureBoot.

    Por exemplo:

    # virt-install --name rhel8sb --memory 4096 --vcpus 4 --os-variant rhel8.0 --boot uefi,nvram_template=/usr/share/OVMF/OVMF_VARS.secboot.fd --disk boot_order=2,size=10 --disk boot_order=1,device=cdrom,bus=scsi,path=/images/RHEL-8.0-installation.iso
  2. Siga o procedimento de instalação do sistema operacional de acordo com as instruções na tela.
  3. Após o SO convidado ser instalado, acesse a linha de comando da VM abrindo o terminal no console gráfico convidado ou conectando-se ao SO convidado usando SSH.
  4. Verifique se o SecureBoot está habilitado usando o comando mokutil --sb-state:

    # mokutil --sb-state
    SecureBoot enabled

15.4. Recursos automáticos para segurança de máquinas virtuais

Além dos meios manuais para melhorar a segurança de suas máquinas virtuais listados em Seção 15.2, “Melhores práticas para a fixação de máquinas virtuais”, uma série de recursos de segurança são fornecidos pelo pacote de software libvirt e são automaticamente habilitados quando se utiliza a virtualização no RHEL 8. Estes incluem:

Sessões do sistema e do usuário

Para acessar todas as utilidades disponíveis para o gerenciamento de máquinas virtuais no RHEL 8, você precisa usar o system session da libvirt. Para isso, você deve ter privilégios de root no sistema ou fazer parte do grupo de usuários libvirt.

Os usuários não-rotários que não fazem parte do grupo libvirt só podem acessar um user session de libvirt, que tem que respeitar os direitos de acesso do usuário local ao acessar os recursos. Por exemplo, na sessão do usuário, não é possível detectar ou acessar VMs criadas na sessão do sistema ou por outros usuários. Além disso, as opções de configuração de rede de VMs disponíveis são significativamente limitadas.

Nota

A documentação RHEL 8 assume que você tem privilégios de sessão do sistema libvirt.

Separação de máquinas virtuais
As VMs individuais funcionam como processos isolados no host, e dependem da segurança imposta pelo kernel do host. Portanto, uma VM não pode ler ou acessar a memória ou o armazenamento de outras VMs no mesmo host.
Caixa de areia QEMU
Uma característica que impede que o código QEMU execute chamadas ao sistema que podem comprometer a segurança do host.
Randomização do espaço de endereços do Kernel (KASLR)
Permite a randomização dos endereços físicos e virtuais nos quais a imagem do núcleo é descompactada. Assim, o KASLR impede explorações de segurança de hóspedes com base na localização dos objetos do kernel.

15.5. Booleans de virtualização

Para uma configuração granulada fina da segurança das máquinas virtuais em um sistema RHEL 8, você pode configurar as booleanas SELinux no host para garantir que o hipervisor atue de uma forma específica.

Para listar todas as booleanas relacionadas à virtualização e seus status, use o comando getsebool -a | grep virt:

$ getsebool -a | grep virt
[...]
virt_sandbox_use_netlink --> off
virt_sandbox_use_sys_admin --> off
virt_transition_userdomain --> off
virt_use_comm --> off
virt_use_execmem --> off
virt_use_fusefs --> off
[...]

Para habilitar um booleano específico, use o setsebool -P boolean_name on comando como raiz. Para desativar um booleano, use setsebool -P boolean_name off.

A tabela a seguir lista as booleanas relacionadas à virtualização disponíveis no RHEL 8 e o que elas fazem quando ativadas:

Tabela 15.1. Booleans de virtualização SELinux

SELinux BooleanDescrição

staff_use_svirt

Permite que os usuários não-rootores criem e façam a transição de VMs para sVirt.

unprivuser_use_svirt

Permite que usuários sem privilégios criem e façam a transição de VMs para sVirt.

virt_sandbox_use_audit

Permite que os contentores de areia enviem mensagens de auditoria.

virt_sandbox_use_netlink

Permite que os recipientes de areia utilizem chamadas de sistema netlink.

virt_sandbox_use_sys_admin

Permite que recipientes de areia utilizem chamadas de sistema sys_admin, como, por exemplo, montagem.

virt_transition_userdomain

Permite que os processos virtuais sejam executados como domínios de usuário.

virt_use_comm

Permite que o virt utilize portas de comunicação serial/paralela.

virt_use_execmem

Permite que convidados virtuais confinados utilizem memória executável e pilha executável.

virt_use_fusefs

Permite que o virt leia arquivos montados em FUSE.

virt_use_nfs

Permite a virt gerenciar arquivos montados em NFS.

virt_use_rawip

Permite que o virt interaja com os soquetes em bruto.

virt_use_samba

Permite que o virt gerencie arquivos montados CIFS.

virt_use_sanlock

Permite que hóspedes virtuais confinados interajam com o sanlock.

virt_use_usb

Permite que o virt utilize dispositivos USB.

virt_use_xserver

Permite que a máquina virtual interaja com o Sistema X Window.

15.6. Configurando o IBM Secure Execution no IBM Z

Ao utilizar o hardware IBM Z para executar um host RHEL 8, você pode melhorar a segurança de suas máquinas virtuais (VMs) configurando o IBM Secure Execution para as VMs.

A IBM Secure Execution, também conhecida como Virtualização Protegida, impede que o sistema host acesse o estado e o conteúdo da memória de uma VM. Como resultado, mesmo que o host esteja comprometido, ele não pode ser usado como um vetor para atacar o sistema operacional convidado. Além disso, o Secure Execution pode ser usado para evitar que hospedeiros não confiáveis obtenham informações sensíveis da VM.

O procedimento seguinte descreve como converter uma VM existente em um host IBM Z em uma VM segura.

Pré-requisitos

  • O hardware do sistema é um dos seguintes:

    • IBM z15 ou posterior
    • IBM LinuxONE III ou posterior
  • O recurso de Execução Segura está habilitado para seu sistema. Para verificar, use:

    # grep facilities /proc/cpuinfo | grep 158

    Se este comando exibir qualquer saída, sua CPU é compatível com o Secure Execution.

  • O núcleo inclui suporte para Execução Segura. Para confirmar, use:

    # ls /sys/firmware | grep uv

    Se o comando gerar alguma saída, seu kernel suporta Execução Segura.

  • O modelo de CPU host contém a facilidade unpack. Para confirmar, use:

    # virsh domcapabilities | grep unpack
    <feature policy='require' name='unpack'/>

    Se o comando gerar a saída acima, seu modelo de host de CPU é compatível com o Secure Execution.

  • O modo CPU da VM está configurado para host-model. Para confirmar isso, use o seguinte e substitua vm-name pelo nome de sua VM.

    # virsh dumpxml vm-name | grep "<cpu mode='host-model'/>"

    Se o comando gerar alguma saída, o modo CPU da VM é configurado corretamente.

Procedimento

  1. Adicione o parâmetro do kernel prot_virt=1 à configuração de inicialização do host.

    # # grubby --update-kernel=ALL --args="prot_virt=1"
  2. Crie um arquivo de parâmetros para a VM que você deseja proteger. Por exemplo:

    # touch ~/secure-parameters
  3. No diretório /boot/loader/entries do host, identifique a entrada do carregador de inicialização com a versão mais recente:

    # ls /boot/loader/entries -l
    [...]
    -rw-r--r--. 1 root root  281 Oct  9 15:51 3ab27a195c2849429927b00679db15c1-4.18.0-240.el8.s390x.conf
  4. Recuperar a linha de opções do kernel da entrada do carregador de inicialização:

    # cat /boot/loader/entries/3ab27a195c2849429927b00679db15c1-4.18.0-240.el8.s390x.conf | grep options
    options root=/dev/mapper/rhel-root crashkernel=auto rd.lvm.lv=rhel/root rd.lvm.lv=rhel/swap
  5. Adicione o conteúdo da linha de opções e swiotlb=262144 ao arquivo de parâmetros criado.

    # echo "root=/dev/mapper/rhel-root crashkernel=auto rd.lvm.lv=rhel/root rd.lvm.lv=rhel/swap swiotlb=262144" > ~/secure-parameters
  6. Gerar uma imagem IBM Secure Execution para a VM selecionada.

    Por exemplo, o seguinte cria uma imagem protegida /boot/secure-image baseada na imagem /boot/vmlinuz-4.18.0-240.el8.s390x, usando o arquivo secure-parameters, o arquivo de disco RAM inicial /boot/initramfs-4.18.0-240.el8.s390x.img, e o documento chave do host HKD-8651-000201C048.crt.

    # genprotimg -i /boot/vmlinuz-4.18.0-240.el8.s390x -r /boot/initramfs-4.18.0-240.el8.s390x.img -p ~/secure-parameters -k HKD-8651-00020089A8.crt -o /boot/secure-image

    Usando o utilitário genprotimg, cria-se a imagem segura, que contém os parâmetros do kernel, o disco RAM inicial e a imagem de inicialização.

  7. No sistema operacional convidado da VM, atualize o menu de inicialização da VM para inicializar a partir da imagem segura. Além disso, remova as linhas começando com initrd e options, pois elas não são necessárias.

    Por exemplo, em um RHEL 8.3 VM, o menu de inicialização pode ser editado no diretório /boot/loader/entries/:

    # cat /boot/loader/entries/3ab27a195c2849429927b00679db15c1-4.18.0-240.el8.s390x.conf
    title Red Hat Enterprise Linux 8.3
    version 4.18.0-240.el8.s390x
    linux /boot/secure-image
    [...]
  8. Habilitar dispositivos de virtio para usar buffers compartilhados. Para isso, use virsh edit para modificar a configuração XML da VM, e adicione iommu='on' à linha <driver> de todos os dispositivos que possuem um. Por exemplo:

    <interface type='network'>
      <source network='default'/>
      <model type='virtio'/>
      <driver name='vhost' iommu='on'/>
    </interface>

    Se uma configuração de dispositivo não contiver nenhuma linha <driver>, adicione <driver iommu='on'\> em seu lugar.

  9. Desativar o balonamento de memória na VM, pois o recurso não é compatível com o Secure Execution. Para fazer isso, adicione a seguinte linha à configuração XML da VM.

    <memballoon model='none'/>
  10. Criar a imagem de disco inicializável

    # zipl -V
  11. Remover com segurança os arquivos originais desprotegidos. Por exemplo, os arquivos originais desprotegidos:

    # shred /boot/vmlinuz-4.18.0-240.el8.s390x
    # shred /boot/initramfs-4.18.0-240.el8.s390x.img
    # shred secure-parameters

    A imagem de inicialização original, a imagem RAM inicial e o arquivo de parâmetros do kernel estão desprotegidos e, se não forem removidos, as VMs com Execução Segura ativadas ainda podem ser vulneráveis a tentativas de hacking ou mineração de dados sensíveis.

Verificação

  • No host, use o utilitário virsh dumpxml para confirmar a configuração XML da VM protegida. A configuração deve incluir os elementos <driver iommu='on'/> e <memballoon model='none'/>.

    # virsh dumpxml vm-name
    [...]
      <cpu mode='host-model'/>
      <devices>
        <disk type='file' device='disk'>
          <driver name='qemu' type='qcow2' cache='none' io='native' iommu='on'>
          <source file='/var/lib/libvirt/images/secure-guest.qcow2'/>
          <target dev='vda' bus='virtio'/>
        </disk>
        <interface type='network'>
          <driver iommu='on'/>
          <source network='default'/>
          <model type='virtio'/>
        </interface>
        <console type='pty'/>
        <memballoon model='none'/>
      </devices>
    </domain>

Recursos adicionais

15.7. Anexar coprocessadores criptográficos a máquinas virtuais no IBM Z

Para usar criptografia de hardware em sua máquina virtual (VM) em um host IBM Z, crie dispositivos mediados a partir de um dispositivo coprocessador criptográfico e os atribua às VMs pretendidas. Para instruções detalhadas, veja abaixo.

Pré-requisitos

  • Seu host está rodando em hardware IBM Z.
  • O coprocessador criptográfico é compatível com a atribuição de dispositivos. Para confirmar isso, certifique-se de que o endereço type de seu coprocessador esteja listado como CEX4 ou posterior.

    # lszcrypt -V
    
    CARD.DOMAIN TYPE  MODE        STATUS  REQUESTS  PENDING HWTYPE QDEPTH FUNCTIONS  DRIVER
    --------------------------------------------------------------------------------------------
    05         CEX5C CCA-Coproc  online         1        0     11     08 S--D--N--  cex4card
    05.0004    CEX5C CCA-Coproc  online         1        0     11     08 S--D--N--  cex4queue
    05.00ab    CEX5C CCA-Coproc  online         1        0     11     08 S--D--N--  cex4queue
  • O pacote mdevctl está instalado.
  • O módulo do kernel vfio_ap é carregado. Para verificar, use:

    # lsmod | grep vfio_ap
    vfio_ap         24576  0
    [...]

    Para carregar o módulo, use:

    # modprobe vfio_ap

Procedimento

  1. No host, re-designar seu dispositivo criptográfico para os drivers vfio-ap. O exemplo seguinte atribui dois dispositivos criptográficos com bitmask IDs (0x05, 0x0004) e (0x05, 0x00ab) a vfio-ap.

    #  echo -0x05 > /sys/bus/ap/apmask
    #  echo -0x0004, -0x00ab > /sys/bus/ap/aqmask

    Para informações sobre a identificação dos valores de identificação da máscara de bits, consulte Preparando dispositivos de passagem para recursos de adaptador criptográfico no documento KVM Virtual Server Management da IBM.

  2. Verificar se os dispositivos criptográficos foram reatribuídos corretamente.

    # lszcrypt -V
    
    CARD.DOMAIN TYPE  MODE        STATUS  REQUESTS  PENDING HWTYPE QDEPTH FUNCTIONS  DRIVER
    --------------------------------------------------------------------------------------------
    05          CEX5C CCA-Coproc  -              1        0     11     08 S--D--N--  cex4card
    05.0004     CEX5C CCA-Coproc  -              1        0     11     08 S--D--N--  vfio_ap
    05.00ab     CEX5C CCA-Coproc  -              1        0     11     08 S--D--N--  vfio_ap

    Se os valores de DRIVER das filas de domínio mudassem para vfio_ap, a reatribuição seria bem sucedida.

  3. Gerar um dispositivo UUID.

    # uuidgen
    669d9b23-fe1b-4ecb-be08-a2fabca99b71

    Nas seguintes etapas deste procedimento, substitua 669d9b23-fe1b-4ecb-be08-a2fabca99b71 por sua UUID gerada.

  4. Usando a UUID, crie um novo dispositivo vfio_ap.

    O exemplo a seguir mostra a criação de um dispositivo mediado persistente e a atribuição de filas a ele. Por exemplo, os seguintes comandos atribuem o adaptador de domínio 0x05 e as filas de domínio 0x0004 e 0x00ab ao dispositivo 669d9b23-fe1b-4ecb-be08-a2fabca99b71.

    # mdevctl define --uuid 669d9b23-fe1b-4ecb-be08-a2fabca99b71 --parent matrix --type vfio_ap-passthrough
    # mdevctl modify --uuid 669d9b23-fe1b-4ecb-be08-a2fabca99b71 --addattr=assign_adapter --value=0x05
    # mdevctl modify --uuid 669d9b23-fe1b-4ecb-be08-a2fabca99b71 --addattr=assign_domain --value=0x0004
    # mdevctl modify --uuid 669d9b23-fe1b-4ecb-be08-a2fabca99b71 --addattr=assign_domain --value=0x00ab
  5. Iniciar o dispositivo mediado.

    # mdevctl start --uuid 669d9b23-fe1b-4ecb-be08-a2fabca99b71
  6. Verificar se a configuração foi aplicada corretamente

    # cat /sys/devices/vfio_ap/matrix/mdev_supported_types/vfio_ap-passthrough/devices/669d9b23-fe1b-4ecb-be08-a2fabca99b71
    05.0004
    05.00ab

    Se a saída contém os valores numéricos das filas que você designou anteriormente para vfio-ap, o processo foi bem sucedido.

  7. Use o comando virsh edit para abrir a configuração XML da VM onde você deseja usar os dispositivos criptográficos.

    # virsh edit vm-name
  8. Adicione as seguintes linhas à seção <devices> na configuração XML, e salve-a.

    <hostdev mode='subsystem' type='mdev' managed='no' model='vfio-ap'>
      <source>
        <address uuid='669d9b23-fe1b-4ecb-be08-a2fabca99b71'/>
      </source>
    </hostdev>

    Note que cada UUID só pode ser atribuída a uma VM de cada vez.

Verificação

  1. Inicie a VM para a qual você designou o dispositivo mediado.
  2. Após a inicialização do sistema operacional (OS) convidado, certifique-se de que ele detecta os dispositivos criptográficos designados.

    # lszcrypt -V
    
    CARD.DOMAIN TYPE  MODE        STATUS  REQUESTS  PENDING HWTYPE QDEPTH FUNCTIONS  DRIVER
    --------------------------------------------------------------------------------------------
    05          CEX5C CCA-Coproc  online         1        0     11     08 S--D--N--  cex4card
    05.0004     CEX5C CCA-Coproc  online         1        0     11     08 S--D--N--  cex4queue
    05.00ab     CEX5C CCA-Coproc  online         1        0     11     08 S--D--N--  cex4queue

    A saída deste comando no sistema operacional convidado será idêntica à de uma partição lógica host com os mesmos dispositivos coprocessadores criptográficos disponíveis.

15.8. Possibilitando a segurança de hardware padrão em máquinas virtuais Windows

Para proteger as máquinas virtuais Windows (VMs), você pode habilitar o nível básico de segurança usando as capacidades de hardware padrão do dispositivo Windows.

Pré-requisitos

  • Certifique-se de ter instalado os últimos drivers VirtIO certificados WHQL.
  • Certifique-se de que o firmware da VM suporte a inicialização UEFI.
  • Instale o pacote edk2-OVMF em sua máquina host.

    # yum install edk2-ovmf
  • Instale os pacotes vTPM em sua máquina host.

    # yum install swtpm libtpms
  • Certifique-se de que a VM está usando a arquitetura da máquina Q35.
  • Certifique-se de que você tenha a mídia de instalação do Windows.

Procedimento

  1. Habilite o TPM 2.0 adicionando os seguintes parâmetros à seção <devices> na configuração XML da VM.

    <devices>
    [...]
      <tpm model='tpm-crb'>
        <backend type='emulator' version='2.0'/>
      </tpm>
    [...]
    </devices>
  2. Instalar o Windows no modo UEFI. Para mais informações sobre como fazer isso, consulte Criando uma máquina virtual SecureBoot.
  3. Instale os drivers VirtIO no Windows VM. Para mais informações sobre como fazê-lo, consulte Instalando os drivers VirtIO em um convidado do Windows.
  4. Na UEFI, habilite o Boot Seguro. Para mais informações sobre como fazer isso, consulte o Secure Boot.

Verificação

  • Assegure-se de que a página Device Security em sua máquina Windows exiba a seguinte mensagem:

    Your device meets the requirements for standard hardware security.

Capítulo 16. Otimizando o desempenho da máquina virtual

As máquinas virtuais (VMs) sempre experimentam algum grau de deterioração de desempenho em comparação com o host. As seções seguintes explicam as razões para esta deterioração e fornecem instruções sobre como minimizar o impacto de desempenho da virtualização no RHEL 8, para que seus recursos de infra-estrutura de hardware possam ser usados da forma mais eficiente possível.

16.1. O que influencia o desempenho da máquina virtual

Os VMs são executados como processos de espaço do usuário no host. O hipervisor, portanto, precisa converter os recursos do sistema host para que as VMs possam utilizá-los. Como consequência, uma parte dos recursos é consumida pela conversão, e a VM, portanto, não pode alcançar a mesma eficiência de desempenho que o host.

O impacto da virtualização no desempenho do sistema

Razões mais específicas para a perda de desempenho da VM incluem:

  • As CPUs virtuais (vCPUs) são implementadas como threads no host, gerenciadas pelo agendador Linux.
  • As VMs não herdam automaticamente recursos de otimização, tais como NUMA ou páginas enormes, do núcleo do host.
  • As configurações de E/S do disco e da rede do host podem ter um impacto significativo no desempenho da VM.
  • O tráfego de rede normalmente viaja para uma VM através de uma ponte baseada em software.
  • Dependendo dos dispositivos host e de seus modelos, pode haver uma sobrecarga significativa devido à emulação de hardware específico.

A severidade do impacto da virtualização no desempenho da VM é influenciada por uma variedade de fatores, que incluem

  • O número de VMs em funcionamento concomitante.
  • A quantidade de dispositivos virtuais utilizados por cada VM.
  • Os tipos de dispositivos utilizados pelas VMs.

Reduzindo a perda de desempenho da VM

O RHEL 8 oferece uma série de recursos que você pode usar para reduzir os efeitos negativos da virtualização. Destacadamente:

Importante

O ajuste do desempenho da VM pode ter efeitos adversos sobre outras funções de virtualização. Por exemplo, pode tornar mais difícil a migração da VM modificada.

16.2. Otimizando o desempenho da máquina virtual usando o tuned

O utilitário tuned é um mecanismo de ajuste de perfil de entrega que adapta a RHEL para certas características de carga de trabalho, tais como requisitos para tarefas de CPU-intensiva ou de armazenamento-rede de resposta em termos de produtividade. Ele fornece uma série de perfis de ajuste que são pré-configurados para melhorar o desempenho e reduzir o consumo de energia em uma série de casos específicos de uso. Você pode editar esses perfis ou criar novos perfis para criar soluções de desempenho adaptadas ao seu ambiente, incluindo ambientes virtualizados.

A Red Hat recomenda o uso dos seguintes perfis ao usar a virtualização no RHEL 8:

  • Para as máquinas virtuais RHEL 8, utilize o perfil virtual-guest. Ele se baseia no perfil de aplicação geral throughput-performance mas também diminui a permuta da memória virtual.
  • Para os anfitriões de virtualização RHEL 8, use o perfil virtual-host. Isto permite a gravação mais agressiva de páginas de memória suja, o que beneficia o desempenho do host.

Pré-requisitos

Procedimento

Para permitir um perfil específico em tuned:

  1. Liste os perfis disponíveis em tuned.

    # tuned-adm list
    
    Available profiles:
    - balanced             - General non-specialized tuned profile
    - desktop              - Optimize for the desktop use-case
    [...]
    - virtual-guest        - Optimize for running inside a virtual guest
    - virtual-host         - Optimize for running KVM guests
    Current active profile: balanced
  2. Optional: Criar um novo perfil tuned ou editar um perfil tuned já existente.

    Para mais informações, consulte Perfis ajustados de customização.

  3. Ativar um perfil em tuned.

    # tuned-adm profile selected-profile
    • Para otimizar um host de virtualização, utilize o perfil virtual-host.

      # tuned-adm profile virtual-host
    • Em um sistema operacional convidado da RHEL, use o perfil virtual-guest.

      # tuned-adm profile virtual-guest

Recursos adicionais

16.3. Configuração da memória da máquina virtual

Para melhorar o desempenho de uma máquina virtual (VM), você pode atribuir RAM de host adicional para a VM. Da mesma forma, você pode diminuir a quantidade de memória alocada a uma VM para que a memória do host possa ser alocada a outras VMs ou tarefas.

Para realizar estas ações, você pode usar o console web ou a interface de linha de comando.

16.3.1. Adicionar e remover memória de máquina virtual usando o console web

Para melhorar o desempenho de uma máquina virtual (VM) ou para liberar os recursos do host que ela está usando, você pode usar o console web para ajustar a quantidade de memória alocada para a VM.

Pré-requisitos

  • O sistema operacional convidado está executando os drivers do balão de memória. Para verificar este é o caso:

    1. Garantir que a configuração da VM inclua o dispositivo memballoon:

      # virsh dumpxml testguest | grep memballoon
      <memballoon model='virtio'>
          </memballoon>

      Se este comando exibir qualquer saída e o modelo não estiver configurado para none, o dispositivo memballoon está presente.

    2. Certifique-se de que os condutores de balões estejam funcionando no sistema operacional convidado.

  • Para usar o console web para gerenciar as VMs, instale o plug-in de VM do console web.

Procedimento

  1. Optional: Obter as informações sobre a memória máxima e a memória atualmente utilizada para uma VM. Isto servirá como uma base para suas mudanças, e também para verificação.

    # virsh dominfo testguest
    Max memory:     2097152 KiB
    Used memory:    2097152 KiB
  2. Na interface das Máquinas Virtuais, clique em uma linha com o nome das VMs para as quais você deseja visualizar e ajuste a memória alocada.

    A linha se expande para revelar o painel de Visão Geral com informações básicas sobre os VMs selecionados.

  3. Clique no valor da linha Memory no painel de Visão Geral.

    Aparece o diálogo Memory Adjustment.

    virt memory cockpit
  4. Configurar as CPUs virtuais para o VM selecionado.

    • Maximum allocation - Define a quantidade máxima de memória do host que a VM pode usar para seus processos. Aumentar este valor melhora o potencial de desempenho da VM, e reduzir o valor diminui a pegada de desempenho que a VM tem em seu host.

      O ajuste da alocação máxima de memória só é possível em uma VM desligada.

    • Current allocation - Define a quantidade real de memória alocada para o VM. Você pode ajustar o valor para regular a memória disponível para a VM para seus processos. Este valor não pode exceder o valor máximo de alocação.
  5. Clique em Salvar.

    A alocação da memória da VM é ajustada.

Recursos adicionais

16.3.2. Adicionar e remover memória de máquina virtual usando a interface de linha de comando

Para melhorar o desempenho de uma máquina virtual (VM) ou para liberar os recursos do host que ela está usando, você pode usar a CLI para ajustar a quantidade de memória alocada para a VM.

Pré-requisitos

  • O sistema operacional convidado está executando os drivers do balão de memória. Para verificar este é o caso:

    1. Garantir que a configuração da VM inclua o dispositivo memballoon:

      # virsh dumpxml testguest | grep memballoon
      <memballoon model='virtio'>
          </memballoon>

      Se este comando exibir qualquer saída e o modelo não estiver configurado para none, o dispositivo memballoon está presente.

    2. Certifique-se de que os condutores de balões estejam funcionando no sistema operacional convidado.

Procedimento

  1. Optional: Obter as informações sobre a memória máxima e a memória atualmente utilizada para uma VM. Isto servirá como uma base para suas mudanças, e também para verificação.

    # virsh dominfo testguest
    Max memory:     2097152 KiB
    Used memory:    2097152 KiB
  2. Ajuste a memória máxima alocada a uma VM. Aumentar este valor melhora o potencial de desempenho da VM, e reduzir o valor diminui a pegada de desempenho que a VM tem em seu host. Note que esta mudança só pode ser realizada em uma VM desligada, portanto, o ajuste de uma VM em funcionamento requer uma reinicialização para ter efeito.

    Por exemplo, para mudar a memória máxima que o testguest VM pode usar para 4096 MiB:

    # virt-xml testguest --edit --memory memory=4096,currentMemory=4096
    Domain 'testguest' defined successfully.
    Changes will take effect after the domain is fully powered off.
  1. Optional: Você também pode ajustar a memória atualmente utilizada pela VM, até a alocação máxima. Isto regula a carga de memória que a VM tem no host até a próxima reinicialização, sem alterar a alocação máxima da VM.

    # virsh setmem testguest --current 2048

Verificação

  1. Confirmar que a memória utilizada pela VM foi atualizada:

    # virsh dominfo testguest
    Max memory:     4194304 KiB
    Used memory:    2097152 KiB
  2. Optional: Se você ajustar a memória atual da VM, você pode obter as estatísticas do balão de memória da VM para avaliar o quão efetivamente ela regula seu uso de memória.

     # virsh domstats --balloon testguest
    Domain: 'testguest'
      balloon.current=365624
      balloon.maximum=4194304
      balloon.swap_in=0
      balloon.swap_out=0
      balloon.major_fault=306
      balloon.minor_fault=156117
      balloon.unused=3834448
      balloon.available=4035008
      balloon.usable=3746340
      balloon.last-update=1587971682
      balloon.disk_caches=75444
      balloon.hugetlb_pgalloc=0
      balloon.hugetlb_pgfail=0
      balloon.rss=1005456

Recursos adicionais

16.3.3. Recursos adicionais

  • Para aumentar a memória máxima de uma VM em funcionamento, você pode anexar um dispositivo de memória à VM. Isto também é referido como memory hot plug. Para maiores detalhes, veja Seção 10.2, “Fixação de dispositivos em máquinas virtuais”.

    Note que remover um dispositivo de memória de um VM, também conhecido como memory hot unplug, não é suportado no RHEL 8, e a Red Hat desencoraja muito seu uso.

16.4. Otimização do desempenho de E/S da máquina virtual

As capacidades de entrada e saída (E/S) de uma máquina virtual (VM) podem limitar significativamente a eficiência geral da VM. Para resolver isso, você pode otimizar a E/S de uma VM configurando os parâmetros de E/S de bloco.

16.4.1. E/S do bloco de sintonia em máquinas virtuais

Quando múltiplos dispositivos de bloco estão sendo usados por uma ou mais VMs, pode ser importante ajustar a prioridade de E/S de dispositivos virtuais específicos, modificando seu I/O weights.

Aumentar o peso de E/S de um dispositivo aumenta sua prioridade para a largura de banda de E/S e, portanto, proporciona mais recursos para o host. Da mesma forma, a redução do peso de um dispositivo faz com que ele consuma menos recursos do host.

Nota

O valor de cada dispositivo weight deve estar dentro da faixa 100 a 1000. Alternativamente, o valor pode ser 0, o que retira esse dispositivo das listas por dispositivo.

Procedimento

Para exibir e definir os parâmetros de E/S de um bloco VM:

  1. Exibir os parâmetros atuais <blkio> para uma VM:

    # virsh dumpxml VM-name

    <domain>
      [...]
      <blkiotune>
        <weight>800</weight>
        <device>
          <path>/dev/sda</path>
          <weight>1000</weight>
        </device>
        <device>
          <path>/dev/sdb</path>
          <weight>500</weight>
        </device>
      </blkiotune>
      [...]
    </domain>
  2. Edite o peso de E/S de um dispositivo especificado:

    # virsh blkiotune VM-name --device-weights device, I/O-weight

    Por exemplo, o seguinte muda o peso do dispositivo /dev/sda no site liftrul VM para 500.

    # virsh blkiotune liftbrul --device-weights /dev/sda, 500

16.4.2. Estrangulamento de E/S de disco em máquinas virtuais

Quando várias VMs estão funcionando simultaneamente, elas podem interferir com o desempenho do sistema, utilizando uma E/S em disco excessiva. A aceleração da E/S do disco na virtualização KVM proporciona a capacidade de definir um limite nas solicitações de E/S do disco enviadas pelas VMs para a máquina host. Isto pode evitar que uma VM utilize excessivamente recursos compartilhados e tenha impacto sobre o desempenho de outras VMs.

Para ativar a aceleração de E/S de disco, defina um limite para as solicitações de E/S de disco enviadas de cada dispositivo de bloco anexado às VMs para a máquina host.

Procedimento

  1. Use o comando virsh domblklist para listar os nomes de todos os dispositivos de disco em uma VM especificada.

    # virsh domblklist rollin-coal
    Target     Source
    ------------------------------------------------
    vda        /var/lib/libvirt/images/rollin-coal.qcow2
    sda        -
    sdb        /home/horridly-demanding-processes.iso
  2. Encontre o dispositivo de bloco hospedeiro onde o disco virtual que você deseja acionar o acelerador está montado.

    Por exemplo, se você quiser acionar o disco virtual sdb da etapa anterior, a saída a seguir mostra que o disco está montado na partição /dev/nvme0n1p3.

    $ lsblk
    NAME                                          MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINT
    zram0                                         252:0    0     4G  0 disk  [SWAP]
    nvme0n1                                       259:0    0 238.5G  0 disk
    ├─nvme0n1p1                                   259:1    0   600M  0 part  /boot/efi
    ├─nvme0n1p2                                   259:2    0     1G  0 part  /boot
    └─nvme0n1p3                                   259:3    0 236.9G  0 part
      └─luks-a1123911-6f37-463c-b4eb-fxzy1ac12fea 253:0    0 236.9G  0 crypt /home
  3. Estabelecer limites de E/S para o dispositivo de bloco usando o comando virsh blkiotune.

    # virsh blkiotune VM-name --parameter device,limit

    O seguinte exemplo aciona o disco sdb no rollin-coal VM para 1000 operações de leitura e gravação de E/S por segundo e para 50 MB por segundo de leitura e gravação de rendimento.

    # virsh blkiotune rollin-coal --device-read-iops-sec /dev/nvme0n1p3,1000 --device-write-iops-sec /dev/nvme0n1p3,1000 --device-write-bytes-sec /dev/nvme0n1p3,52428800 --device-read-bytes-sec /dev/nvme0n1p3,52428800

Informações adicionais

  • O estrangulamento de E/S em disco pode ser útil em várias situações, por exemplo, quando VMs pertencentes a diferentes clientes estão funcionando no mesmo host, ou quando são dadas garantias de qualidade de serviço para diferentes VMs. O estrangulamento de E/S de disco também pode ser usado para simular discos mais lentos.
  • O estrangulamento de E/S pode ser aplicado independentemente a cada dispositivo de bloco acoplado a uma VM e suporta limites de rendimento e operações de E/S.
  • A Red Hat não suporta o uso do comando virsh blkdeviotune para configurar a estrangulamento de E/S em VMs. Para mais informações sobre recursos não suportados ao usar o RHEL 8 como um host de VMs, veja Seção 20.3, “Características não suportadas na virtualização RHEL 8”.

16.4.3. Possibilitando o virtio-scsi de múltiplas filas

Ao utilizar virtio-scsi dispositivos de armazenamento em suas máquinas virtuais (VMs), o recurso multi-queue virtio-scsi oferece melhor desempenho de armazenamento e escalabilidade. Ele permite que cada CPU virtual (vCPU) tenha uma fila separada e interrompa a utilização sem afetar outras vCPUs.

Procedimento

  • Para habilitar o suporte de virtio-scsi de várias filas para uma VM específica, adicione o seguinte à configuração XML da VM, onde N é o número total de filas de vCPU:

    <controller type='scsi' index='0' model='virtio-scsi'>
       <driver queues='N' />
    </controller>

16.5. Otimizando o desempenho da CPU da máquina virtual

Assim como as CPUs físicas em máquinas host, as vCPUs são fundamentais para o desempenho da máquina virtual (VM). Como resultado, a otimização das vCPUs pode ter um impacto significativo na eficiência de recursos de suas VMs. Para otimizar sua vCPU:

  1. Ajuste quantos CPUs de host são designados para o VM. Você pode fazer isso usando o CLI ou o console web.
  2. Certifique-se de que o modelo vCPU esteja alinhado com o modelo de CPU do host. Por exemplo, configurar o VM testguest1 para usar o modelo de CPU do host:

    # virt-xml testguest1 --edit --cpu host-model
  3. Desativar a fusão da mesma página do núcleo (KSM).
  4. Se sua máquina host utiliza Acesso de Memória Não-Uniforme (NUMA), você também pode configure NUMA para suas VMs. Isto mapeia a CPU do host e os processos de memória na CPU e processos de memória da VM o mais próximo possível. Com efeito, o NUMA tuning fornece à vCPU um acesso mais simplificado à memória do sistema alocada à VM, o que pode melhorar a eficácia do processamento da vCPU.

    Para maiores detalhes, ver Seção 16.5.3, “Configuração do NUMA em uma máquina virtual” e Seção 16.5.4, “Exemplo de cenário de ajuste de desempenho da vCPU”.

16.5.1. Adicionar e remover CPUs virtuais usando a interface de linha de comando

Para aumentar ou otimizar o desempenho da CPU de uma máquina virtual (VM), você pode adicionar ou remover as CPUs virtuais (vCPUs) atribuídas à VM.

Quando realizado em uma VM em funcionamento, isto também é chamado de vCPU hot plugging e hot unplugging. Entretanto, observe que o hot unplug vCPU não é suportado no RHEL 8, e a Red Hat desencoraja muito seu uso.

Pré-requisitos

  • Optional: Veja o estado atual das vCPUs na VM visada. Por exemplo, para exibir o número de vCPUs no site testguest VM:

    # virsh vcpucount testguest
    maximum      config         4
    maximum      live           2
    current      config         2
    current      live           1

    Esta saída indica que testguest está usando atualmente 1 vCPU, e mais 1 vCPu pode ser conectado a ele para aumentar o desempenho da VM. Entretanto, após a reinicialização, o número de vCPUs testguest usadas mudará para 2, e será possível fazer hot plug em mais 2 vCPUs.

Procedimento

  1. Ajuste o número máximo de vCPUs que podem ser anexadas a uma VM, o que entra em vigor na próxima inicialização da VM.

    Por exemplo, para aumentar a contagem máxima de vCPU para a VM testguest para 8:

    # virsh setvcpus testguest 8 --maximum --config

    Observe que o máximo pode ser limitado pela topologia da CPU, hardware do host, o hipervisor e outros fatores.

  2. Ajuste o número atual de vCPUs acopladas a uma VM, até o máximo configurado na etapa anterior. Por exemplo, o número de vCPUs:

    • Para aumentar o número de vCPUs anexadas à VM em execução testguest para 4:

      # virsh setvcpus testguest 4 --live

      Isto aumenta o desempenho da VM e a pegada de carga do host do testguest até a próxima inicialização da VM.

    • Diminuir permanentemente o número de vCPUs anexadas à testguest VM para 1:

      # virsh setvcpus testguest 1 --config

      Isto diminui o desempenho da VM e a pegada de carga do host do testguest após a próxima inicialização da VM. Entretanto, se necessário, vCPUs adicionais podem ser conectados a quente à VM para aumentar temporariamente seu desempenho.

Verificação

  • Confirme que o estado atual da vCPU para a VM reflete suas mudanças.

    # virsh vcpucount testguest
    maximum      config         8
    maximum      live           4
    current      config         1
    current      live           4

Recursos adicionais

16.5.2. Gerenciamento de CPUs virtuais usando o console web

Usando o console web RHEL 8, você pode rever e configurar CPUs virtuais usadas pelas máquinas virtuais (VMs) às quais o console web está conectado.

Pré-requisitos

Procedimento

  1. Na interface das Máquinas Virtuais, clique em uma linha com o nome das VMs para as quais você deseja visualizar e configurar os parâmetros da CPU virtual.

    A linha se expande para revelar o painel Visão Geral com informações básicas sobre as VMs selecionadas, incluindo o número de CPUs virtuais, e controles para desligar e excluir a VM.

  2. Clique no número de vCPUs no painel de Visão Geral.

    Aparece o diálogo de detalhes da vCPU.

    cockpit configure vCPUs
    Nota

    O aviso no diálogo de detalhes do vCPU só aparece após as configurações da CPU virtual serem alteradas.

  3. Configurar as CPUs virtuais para o VM selecionado.

    • vCPU Count - O número de vCPUs atualmente em uso.

      Nota

      A contagem da vCPU não pode ser maior do que a vCPU Máxima.

    • vCPU Maximum - O número máximo de CPUs virtuais que podem ser configuradas para a VM. Se este valor for maior que o vCPU Count, vCPUs adicionais podem ser anexadas à VM.
    • Sockets - O número de tomadas a serem expostas ao VM.
    • Cores per socket - O número de núcleos para cada soquete a ser exposto ao VM.
    • Threads per core - O número de fios para cada núcleo a ser exposto ao VM.

      Note que as opções Sockets, Cores per socket, e Threads per core ajustam a topologia da CPU da VM. Isto pode ser benéfico para o desempenho da vCPU e pode impactar a funcionalidade de certos softwares no sistema operacional convidado. Se uma configuração diferente não for exigida por sua implementação, a Red Hat recomenda manter os valores padrão.

  4. Clique em Aplicar.

    As CPUs virtuais para a VM são configuradas.

    Nota

    As alterações nas configurações da CPU virtual só entram em vigor após o reinício da VM.

Recursos adicionais:

16.5.3. Configuração do NUMA em uma máquina virtual

Os seguintes métodos podem ser usados para configurar as configurações de Acesso Não-Uniforme de Memória (NUMA) de uma máquina virtual (VM) em um host RHEL 8.

Pré-requisitos

  • O host é uma máquina compatível com NUMA. Para detectar se este é o caso, use o comando virsh nodeinfo e veja a linha NUMA cell(s):

    # virsh nodeinfo
    CPU model:           x86_64
    CPU(s):              48
    CPU frequency:       1200 MHz
    CPU socket(s):       1
    Core(s) per socket:  12
    Thread(s) per core:  2
    NUMA cell(s):        2
    Memory size:         67012964 KiB

    Se o valor da linha for 2 ou maior, o host é compatível com NUMA.

Procedimento

Para facilidade de uso, você pode configurar uma configuração NUMA da VM usando utilidades e serviços automatizados. Entretanto, é mais provável que a configuração manual do NUMA produza uma melhoria significativa no desempenho.

Automatic methods

  • Defina a política NUMA da VM para Preferred. Por exemplo, para fazer isso para o testguest5 VM:

    # virt-xml testguest5 --edit --vcpus placement=auto
    # virt-xml testguest5 --edit --numatune mode=preferred
  • Habilitar o balanceamento automático NUMA no host:

    # echo 1 > /proc/sys/kernel/numa_balancing
  • Use o comando numad para alinhar automaticamente a CPU da VM com os recursos de memória.

    # numad

Manual methods

  1. Roscas de vCPU específicas de pinos para uma CPU hospedeira específica ou uma gama de CPUs. Isto também é possível em hosts e VMs não-NUMA, e é recomendado como um método seguro de melhoria do desempenho da vCPU.

    Por exemplo, os seguintes comandos pino vCPU fios 0 a 5 do testguest6 VM para hospedar CPUs 1, 3, 5, 7, 9, e 11, respectivamente:

    # virsh vcpupin testguest6 0 1
    # virsh vcpupin testguest6 1 3
    # virsh vcpupin testguest6 2 5
    # virsh vcpupin testguest6 3 7
    # virsh vcpupin testguest6 4 9
    # virsh vcpupin testguest6 5 11

    Em seguida, você pode verificar se isto foi bem sucedido:

    # virsh vcpupin testguest6
    VCPU   CPU Affinity
    ----------------------
    0      1
    1      3
    2      5
    3      7
    4      9
    5      11
  2. Depois de afixar os fios do vCPU, você também pode afixar os fios do processo QEMU associados a uma VM específica para uma CPU host específica ou uma gama de CPUs. Por exemplo, os seguintes comandos fixam a rosca de processo QEMU de testguest6 para CPUs 13 e 15, e verificam se isto foi bem sucedido:

    # virsh emulatorpin testguest6 13,15
    # virsh emulatorpin testguest6
    emulator: CPU Affinity
    ----------------------------------
           *: 13,15
  3. Finalmente, você também pode especificar quais nós do NUMA hospedeiro serão atribuídos especificamente a um determinado VM. Isto pode melhorar o uso da memória do host pelo vCPU da VM. Por exemplo, os comandos a seguir definem testguest6 para usar os nós de host NUMA 3 a 5, e verificar se isto foi bem sucedido:

    # virsh numatune testguest6 --nodeset 3-5
    # virsh numatune testguest6

Recursos adicionais

16.5.4. Exemplo de cenário de ajuste de desempenho da vCPU

Para obter o melhor desempenho possível da vCPU, a Red Hat recomenda o uso do manual vcpupin, emulatorpin e numatune, por exemplo, como no cenário a seguir.

Cenário inicial

  • Seu anfitrião tem as seguintes especificações de hardware:

    • 2 nós NUMA
    • 3 núcleos de CPU em cada nó
    • 2 roscas em cada núcleo

    A saída de virsh nodeinfo de uma máquina desse tipo seria semelhante:

    # virsh nodeinfo
    CPU model:           x86_64
    CPU(s):              12
    CPU frequency:       3661 MHz
    CPU socket(s):       2
    Core(s) per socket:  3
    Thread(s) per core:  2
    NUMA cell(s):        2
    Memory size:         31248692 KiB
  • Você pretende modificar uma VM existente para ter 8 vCPUs, o que significa que ela não caberá em um único nó NUMA.

    Portanto, você deve distribuir 4 vCPUs em cada nó NUMA e fazer com que a topologia da vCPU se pareça o mais próximo possível da topologia do hospedeiro. Isto significa que as vCPUs que funcionam como filamentos irmãos de uma determinada CPU física devem ser fixadas para hospedar filamentos no mesmo núcleo. Para obter detalhes, veja o site Solution abaixo:

Solução

  1. Obter as informações sobre a topologia do hospedeiro:

    # virsh capabilities

    A saída deve incluir uma seção que se pareça com a seguinte:

    <topology>
      <cells num="2">
        <cell id="0">
          <memory unit="KiB">15624346</memory>
          <pages unit="KiB" size="4">3906086</pages>
          <pages unit="KiB" size="2048">0</pages>
          <pages unit="KiB" size="1048576">0</pages>
          <distances>
            <sibling id="0" value="10" />
            <sibling id="1" value="21" />
          </distances>
          <cpus num="6">
            <cpu id="0" socket_id="0" core_id="0" siblings="0,3" />
            <cpu id="1" socket_id="0" core_id="1" siblings="1,4" />
            <cpu id="2" socket_id="0" core_id="2" siblings="2,5" />
            <cpu id="3" socket_id="0" core_id="0" siblings="0,3" />
            <cpu id="4" socket_id="0" core_id="1" siblings="1,4" />
            <cpu id="5" socket_id="0" core_id="2" siblings="2,5" />
          </cpus>
        </cell>
        <cell id="1">
          <memory unit="KiB">15624346</memory>
          <pages unit="KiB" size="4">3906086</pages>
          <pages unit="KiB" size="2048">0</pages>
          <pages unit="KiB" size="1048576">0</pages>
          <distances>
            <sibling id="0" value="21" />
            <sibling id="1" value="10" />
          </distances>
          <cpus num="6">
            <cpu id="6" socket_id="1" core_id="3" siblings="6,9" />
            <cpu id="7" socket_id="1" core_id="4" siblings="7,10" />
            <cpu id="8" socket_id="1" core_id="5" siblings="8,11" />
            <cpu id="9" socket_id="1" core_id="3" siblings="6,9" />
            <cpu id="10" socket_id="1" core_id="4" siblings="7,10" />
            <cpu id="11" socket_id="1" core_id="5" siblings="8,11" />
          </cpus>
        </cell>
      </cells>
    </topology>
  2. Optional: Teste o desempenho da VM usando as ferramentas e utilitários aplicáveis.
  3. Montar e montar 1 GiB páginas enormes no host:

    1. Adicione a seguinte linha à linha de comando do kernel do host:

      padrão_hugepagesz=1G hugepagesz=1G
    2. Crie o arquivo /etc/systemd/system/hugetlb-gigantic-pages.service com o seguinte conteúdo:

      [Unit]
      Description=HugeTLB Gigantic Pages Reservation
      DefaultDependencies=no
      Before=dev-hugepages.mount
      ConditionPathExists=/sys/devices/system/node
      ConditionKernelCommandLine=hugepagesz=1G
      
      [Service]
      Type=oneshot
      RemainAfterExit=yes
      ExecStart=/etc/systemd/hugetlb-reserve-pages.sh
      
      [Install]
      WantedBy=sysinit.target
    3. Crie o arquivo /etc/systemd/hugetlb-reserve-pages.sh com o seguinte conteúdo:

      #!/bin/sh
      
      nodes_path=/sys/devices/system/node/
      if [ ! -d $nodes_path ]; then
      	echo "ERROR: $nodes_path does not exist"
      	exit 1
      fi
      
      reserve_pages()
      {
      	echo $1 > $nodes_path/$2/hugepages/hugepages-1048576kB/nr_hugepages
      }
      
      reserve_pages 4 node1
      reserve_pages 4 node2

      Isto reserva quatro páginas enormes da 1GiB de node1 e quatro páginas enormes da 1GiB de node2.

    4. Tornar executável o roteiro criado na etapa anterior:

      # chmod x /etc/systemd/hugetlb-reserve-pages.sh
    5. Permitir a reserva de páginas enormes na inicialização:

      # systemctl enable hugetlb-gigantic-pages
  4. Use o comando virsh edit para editar a configuração XML da VM que você deseja otimizar, neste exemplo super-VM:

    # virsh edit super-vm
  5. Ajuste a configuração XML da VM da seguinte maneira:

    1. Configure a VM para usar 8 vCPUs estáticas. Use o elemento <vcpu/> para fazer isso.
    2. Fixe cada uma das roscas da vCPU nas roscas correspondentes da CPU hospedeira que ela espelha na topologia. Para fazer isso, use os elementos <vcpupin/> na seção <cputune>.

      Observe que, como mostrado pelo utilitário virsh capabilities acima, os fios da CPU do host não são ordenados seqüencialmente em seus respectivos núcleos. Além disso, as roscas vCPU devem ser fixadas ao conjunto mais alto disponível de núcleos hospedeiros no mesmo nó NUMA. Para uma ilustração da tabela, veja a seção Additional Resources abaixo.

      A configuração XML para as etapas a. e b. pode parecer semelhante a:

      <cputune>
        <vcpupin vcpu='0' cpuset='1'/>
        <vcpupin vcpu='1' cpuset='4'/>
        <vcpupin vcpu='2' cpuset='2'/>
        <vcpupin vcpu='3' cpuset='5'/>
        <vcpupin vcpu='4' cpuset='7'/>
        <vcpupin vcpu='5' cpuset='10'/>
        <vcpupin vcpu='6' cpuset='8'/>
        <vcpupin vcpu='7' cpuset='11'/>
        <emulatorpin cpuset='6,9'/>
      </cputune>
    3. Configure o VM para usar 1 página gigantesca GiB:

      <memoryBacking>
        <hugepages>
          <page size='1' unit='GiB'/>
        </hugepages>
      </memoryBacking>
    4. Configurar os nós NUMA da VM para usar a memória dos nós NUMA correspondentes no host. Para fazer isso, use os elementos <memnode/> na seção <numatune/>:

      <numatune>
        <memory mode="preferred" nodeset="1"/>
        <memnode cellid="0" mode="strict" nodeset="0"/>
        <memnode cellid="1" mode="strict" nodeset="1"/>
      </numatune>
    5. Certifique-se de que o modo CPU esteja configurado para host-passthrough, e que a CPU utilize o cache no modo passthrough:

      <cpu mode="host-passthrough">
        <topology sockets="2" cores="2" threads="2"/>
        <cache mode="passthrough"/>
  6. A configuração XML resultante da VM deve incluir uma seção similar à seguinte:

    [...]
      <memoryBacking>
        <hugepages>
          <page size='1' unit='GiB'/>
        </hugepages>
      </memoryBacking>
      <vcpu placement='static'>8</vcpu>
      <cputune>
        <vcpupin vcpu='0' cpuset='1'/>
        <vcpupin vcpu='1' cpuset='4'/>
        <vcpupin vcpu='2' cpuset='2'/>
        <vcpupin vcpu='3' cpuset='5'/>
        <vcpupin vcpu='4' cpuset='7'/>
        <vcpupin vcpu='5' cpuset='10'/>
        <vcpupin vcpu='6' cpuset='8'/>
        <vcpupin vcpu='7' cpuset='11'/>
        <emulatorpin cpuset='6,9'/>
      </cputune>
      <numatune>
        <memory mode="preferred" nodeset="1"/>
        <memnode cellid="0" mode="strict" nodeset="0"/>
        <memnode cellid="1" mode="strict" nodeset="1"/>
      </numatune>
      <cpu mode="host-passthrough">
        <topology sockets="2" cores="2" threads="2"/>
        <cache mode="passthrough"/>
        <numa>
          <cell id="0" cpus="0-3" memory="2" unit="GiB">
            <distances>
              <sibling id="0" value="10"/>
              <sibling id="1" value="21"/>
            </distances>
          </cell>
          <cell id="1" cpus="4-7" memory="2" unit="GiB">
            <distances>
              <sibling id="0" value="21"/>
              <sibling id="1" value="10"/>
            </distances>
          </cell>
        </numa>
      </cpu>
    </domain>
  7. Optional: Teste o desempenho da VM usando as ferramentas e utilitários aplicáveis para avaliar o impacto da otimização da VM.

Recursos adicionais

  • As tabelas a seguir ilustram as conexões entre as vCPUs e as CPUs anfitriãs às quais elas devem ser fixadas:

    Tabela 16.1. Topologia do hospedeiro

    CPU threads

    0

    3

    1

    4

    2

    5

    6

    9

    7

    10

    8

    11

    Cores

    0

    1

    2

    3

    4

    5

    Sockets

    0

    1

    NUMA nodes

    0

    1

    Tabela 16.2. Topologia VM

    vCPU threads

    0

    1

    2

    3

    4

    5

    6

    7

    Cores

    0

    1

    2

    3

    Sockets

    0

    1

    NUMA nodes

    0

    1

    Tabela 16.3. Topologia combinada de host e VM

    vCPU threads

     

    0

    1

    2

    3

     

    4

    5

    6

    7

    Host CPU threads

    0

    3

    1

    4

    2

    5

    6

    9

    7

    10

    8

    11

    Cores

    0

    1

    2

    3

    4

    5

    Sockets

    0

    1

    NUMA nodes

    0

    1

    Neste cenário, existem 2 nós NUMA e 8 vCPUs. Portanto, 4 fios de vCPU devem ser fixados a cada nó.

    Além disso, a Red Hat recomenda deixar pelo menos uma única linha de CPU disponível em cada nó para as operações do sistema hospedeiro.

    Como neste exemplo, cada nó NUMA abriga 3 núcleos, cada um com 2 fios de CPU hospedeira, o conjunto para o nó 0 se traduz como segue:

    <vcpupin vcpu='0' cpuset='1'/>
    <vcpupin vcpu='1' cpuset='4'/>
    <vcpupin vcpu='2' cpuset='2'/>
    <vcpupin vcpu='3' cpuset='5'/>

16.5.5. Desativação da fusão do kernel na mesma página

Embora a fusão da mesma página do kernel (KSM) melhore a densidade da memória, ela aumenta a utilização da CPU e pode afetar adversamente o desempenho geral, dependendo da carga de trabalho. Nestes casos, você pode melhorar o desempenho da máquina virtual (VM) desativando o KSM.

Dependendo de suas necessidades, você pode tanto desativar o KSM para uma única sessão ou persistentemente.

Procedimento

  • Para desativar o KSM para uma única sessão, use o utilitário systemctl para parar ksm e ksmtuned serviços.

    # systemctl stop ksm
    
    # systemctl stop ksmtuned
  • Para desativar o KSM persistentemente, use o utilitário systemctl para desativar ksm e ksmtuned serviços.

    # systemctl disable ksm
    Removed /etc/systemd/system/multi-user.target.wants/ksm.service.
    # systemctl disable ksmtuned
    Removed /etc/systemd/system/multi-user.target.wants/ksmtuned.service.
Nota

As páginas de memória compartilhadas entre os VMs antes de desativar o KSM permanecerão compartilhadas. Para parar de compartilhar, exclua todas as páginas de PageKSM no sistema usando o seguinte comando:

# echo 2 > /sys/kernel/mm/ksm/run

Depois de páginas anônimas substituírem as páginas do KSM, o serviço do kernel khugepaged reconstruirá hugepages transparentes na memória física da VM.

16.6. Otimizando o desempenho da rede de máquinas virtuais

Devido à natureza virtual da placa de interface de rede (NIC) de uma VM, a VM perde uma parte de sua largura de banda de rede alocada ao host, o que pode reduzir a eficiência geral da carga de trabalho da VM. As seguintes dicas podem minimizar o impacto negativo da virtualização no rendimento virtual da placa de interface de rede (vNIC).

Procedimento

Use qualquer um dos métodos a seguir e observe se tem um efeito benéfico no desempenho de sua rede VM:

Habilitar o módulo vhost_net

No host, certifique-se de que o recurso do kernel vhost_net esteja habilitado:

# lsmod | grep vhost
vhost_net              32768  1
vhost                  53248  1 vhost_net
tap                    24576  1 vhost_net
tun                    57344  6 vhost_net

Se a saída deste comando estiver em branco, ative o módulo do kernel vhost_net:

# modprobe vhost_net
Criar uma rede virtio-multi-frequência

Para configurar o recurso multi-queue virtio-net para uma VM, use o comando virsh edit para editar para a configuração XML da VM. No XML, adicione o seguinte na seção <devices>, e substitua N pelo número de vCPUs na VM, até 16:

<interface type='network'>
      <source network='default'/>
      <model type='virtio'/>
      <driver name='vhost' queues='N'/>
</interface>

Se o VM estiver funcionando, reinicie-o para que as mudanças entrem em vigor.

Pacotes de rede em lotes

Nas configurações Linux VM com um longo caminho de transmissão, a dosagem de pacotes antes de submetê-los ao kernel pode melhorar a utilização do cache. Para configurar o agrupamento de pacotes, use o seguinte comando no host, e substitua tap0 pelo nome da interface de rede que as VMs usam:

# ethtool -C tap0 rx-frames 128
SR-IOV
Se seu NIC hospedeiro suporta SR-IOV, use a designação do dispositivo SR-IOV para seus vNICs. Para maiores informações, veja Seção 10.8, “Gerenciamento de dispositivos SR-IOV”.

Recursos adicionais

16.7. Ferramentas de monitoramento de desempenho de máquinas virtuais

Para identificar o que consome mais recursos de VM e qual aspecto do desempenho da VM necessita de otimização, podem ser utilizadas ferramentas de diagnóstico de desempenho, tanto gerais quanto específicas de VM.

Ferramentas de monitoramento de desempenho padrão do SO

Para avaliação de desempenho padrão, você pode usar as utilidades fornecidas por padrão por seus sistemas operacionais host e guest:

  • Em seu host RHEL 8, como root, use o utilitário top ou o aplicativo system monitor, e procure qemu e virt na saída. Isto mostra a quantidade de recursos do sistema host que seus VMs estão consumindo.

    • Se a ferramenta de monitoramento mostrar que qualquer um dos processos qemu ou virt consome uma grande parte da CPU ou da capacidade de memória do host, use o utilitário perf para investigar. Para obter detalhes, veja abaixo.
    • Além disso, se um processo de thread vhost_net, chamado por exemplo vhost_net-1234, for exibido como consumindo uma quantidade excessiva de capacidade de CPU do host, considere o uso de recursos de otimização de rede virtual, tais como multi-queue virtio-net.
  • No sistema operacional convidado, use utilitários e aplicações de desempenho disponíveis no sistema para avaliar quais processos consomem mais recursos do sistema.

    • Em sistemas Linux, você pode usar o utilitário top.
    • Em sistemas Windows, você pode usar o aplicativo Task Manager.

perf kvm

Você pode usar o utilitário perf para coletar e analisar estatísticas específicas de virtualização sobre o desempenho de seu host RHEL 8. Para fazer isso:

  1. No host, instale o pacote perf:

    # yum install perf
  2. Use o comando perf kvm stat para exibir as estatísticas do seu host de virtualização:

    • Para o monitoramento em tempo real de seu hipervisor, use o comando perf kvm stat live.
    • Para registrar os dados do seu hipervisor durante um período de tempo, ative o registro usando o comando perf kvm stat record. Após o comando ser cancelado ou interrompido, os dados são salvos no arquivo perf.data.guest, que pode ser analisado usando o comando perf kvm stat report.
  3. Analisar a saída de perf para os tipos de eventos VM-EXIT e sua distribuição. Por exemplo, os eventos PAUSE_INSTRUCTION devem ser pouco freqüentes, mas na saída seguinte, a alta ocorrência deste evento sugere que as CPUs anfitriãs não estão lidando bem com as vCPUs em funcionamento. Em tal cenário, considere desligar algumas de suas VMs ativas, remover as vCPUs dessas VMs, ou ajustar o desempenho das vCPUs.

    # perf kvm stat report
    
    Analyze events for all VMs, all VCPUs:
    
    
                 VM-EXIT    Samples  Samples%     Time%    Min Time    Max Time         Avg time
    
      EXTERNAL_INTERRUPT     365634    31.59%    18.04%      0.42us  58780.59us    204.08us ( +-   0.99% )
               MSR_WRITE     293428    25.35%     0.13%      0.59us  17873.02us      1.80us ( +-   4.63% )
        PREEMPTION_TIMER     276162    23.86%     0.23%      0.51us  21396.03us      3.38us ( +-   5.19% )
       PAUSE_INSTRUCTION     189375    16.36%    11.75%      0.72us  29655.25us    256.77us ( +-   0.70% )
                     HLT      20440     1.77%    69.83%      0.62us  79319.41us  14134.56us ( +-   0.79% )
                  VMCALL      12426     1.07%     0.03%      1.02us   5416.25us      8.77us ( +-   7.36% )
           EXCEPTION_NMI         27     0.00%     0.00%      0.69us      1.34us      0.98us ( +-   3.50% )
           EPT_MISCONFIG          5     0.00%     0.00%      5.15us     10.85us      7.88us ( +-  11.67% )
    
    Total Samples:1157497, Total events handled time:413728274.66us.

    Outros tipos de eventos que podem sinalizar problemas na saída do perf kvm stat incluem:

Para mais informações sobre o uso de perf para monitorar o desempenho da virtualização, consulte a página de manual perf-kvm.

numastat

Para ver a configuração atual de seu sistema NUMA, você pode usar o utilitário numastat, que é fornecido através da instalação do pacote numactl.

O seguinte mostra um host com 4 VMs rodando, cada um obtendo memória de múltiplos nós NUMA. Isto não é ideal para o desempenho do vCPU, e garante o ajuste:

# numastat -c qemu-kvm

Per-node process memory usage (in MBs)
PID              Node 0 Node 1 Node 2 Node 3 Node 4 Node 5 Node 6 Node 7 Total
---------------  ------ ------ ------ ------ ------ ------ ------ ------ -----
51722 (qemu-kvm)     68     16    357   6936      2      3    147    598  8128
51747 (qemu-kvm)    245     11      5     18   5172   2532      1     92  8076
53736 (qemu-kvm)     62    432   1661    506   4851    136     22    445  8116
53773 (qemu-kvm)   1393      3      1      2     12      0      0   6702  8114
---------------  ------ ------ ------ ------ ------ ------ ------ ------ -----
Total              1769    463   2024   7462  10037   2672    169   7837 32434

Em contraste, o que se segue mostra a memória sendo fornecida a cada VM por um único nó, o que é significativamente mais eficiente.

# numastat -c qemu-kvm

Per-node process memory usage (in MBs)
PID              Node 0 Node 1 Node 2 Node 3 Node 4 Node 5 Node 6 Node 7 Total
---------------  ------ ------ ------ ------ ------ ------ ------ ------ -----
51747 (qemu-kvm)      0      0      7      0   8072      0      1      0  8080
53736 (qemu-kvm)      0      0      7      0      0      0   8113      0  8120
53773 (qemu-kvm)      0      0      7      0      0      0      1   8110  8118
59065 (qemu-kvm)      0      0   8050      0      0      0      0      0  8051
---------------  ------ ------ ------ ------ ------ ------ ------ ------ -----
Total                 0      0   8072      0   8072      0   8114   8110 32368

Capítulo 17. Instalando e gerenciando máquinas virtuais Windows

Para usar o Microsoft Windows como sistema operacional convidado em suas máquinas virtuais (VMs) em um host RHEL 8, a Red Hat recomenda tomar medidas extras para garantir que essas VMs funcionem corretamente.

Para este fim, as seções seguintes fornecem informações sobre a instalação e otimização das VMs do Windows no host, bem como a instalação e configuração de drivers nessas VMs.

17.1. Instalação de máquinas virtuais Windows

A seguir, são fornecidas informações sobre como criar uma máquina Windows totalmente virtualizada em um host RHEL 8, lançar o instalador gráfico do Windows dentro da máquina virtual (VM), e otimizar o sistema operacional (SO) Windows guest instalado.

Você pode criar uma VM e instalá-la usando o comando virt-install ou o console web RHEL 8.

Pré-requisitos

Procedimento

  1. Crie o VM. Para instruções, ver Seção 2.2, “Criando máquinas virtuais”.

    • Se utilizar o utilitário virt-install para criar a VM, adicione as seguintes opções ao comando:

      • O meio de armazenamento com os drivers da KVM virtio. Por exemplo:

        --disk path=/usr/share/virtio-win/virtio-win.iso,device=disk,bus=virtio
      • A versão Windows que você vai instalar. Por exemplo, para o Windows 10:

        --os-variant win10

        Para obter uma lista das versões disponíveis do Windows e a opção apropriada, use o seguinte comando:

        # osinfo-query os
    • Se utilizar o console web para criar a VM, especifique sua versão do Windows no campo Operating System da janela Create New Virtual Machine. Após a criação da VM e a instalação do sistema operacional convidado, anexe o meio de armazenamento com drivers virtio à VM usando a interface Disks. Para instruções, veja Seção 11.3.7.3, “Fixação de discos existentes em máquinas virtuais usando o console web”.
  2. Instale o sistema operacional Windows na VM.

    Para obter informações sobre como instalar um sistema operacional Windows, consulte a documentação de instalação relevante da Microsoft.

  3. Configure os drivers do KVM virtio no sistema operacional Windows guest OS. Para detalhes, veja Seção 17.2.1, “Instalação de drivers paravirtualizados KVM para máquinas virtuais Windows”.

Recursos adicionais

17.2. Otimização de máquinas virtuais Windows

Ao usar o Microsoft Windows como um sistema operacional convidado em uma máquina virtual (VM) hospedada no RHEL 8, o desempenho do convidado pode ser afetado negativamente.

Portanto, a Red Hat recomenda otimizar seus Windows VMs fazendo qualquer combinação do seguinte:

17.2.1. Instalação de drivers paravirtualizados KVM para máquinas virtuais Windows

O principal método para melhorar o desempenho de suas máquinas virtuais Windows (VMs) é instalar drivers paravirtualizados KVM (virtio) para Windows no sistema operacional (OS) convidado.

Para fazer isso:

  1. Preparar a mídia de instalação na máquina host. Para maiores informações, ver Seção 17.2.1.2, “Preparação do meio de instalação do virtio driver em uma máquina host”.
  2. Anexar a mídia de instalação a um Windows VM existente, ou anexá-lo ao criar um novo Windows VM.
  3. Instale os drivers virtio no sistema operacional Windows guest OS. Para mais informações, veja Seção 17.2.1.3, “Instalação de drivers de virtio em um convidado Windows”.

17.2.1.1. Como funcionam os drivers de virtio do Windows

Os drivers paravirtualizados melhoram o desempenho das máquinas virtuais (VMs) diminuindo a latência de E/S e aumentando a produção para níveis quase nulos de metal nulo. A Red Hat recomenda o uso de drivers paravirtualizados para VMs que executam tarefas e aplicações pesadas de E/S.

virtio drivers são os drivers de dispositivos paravirtualizados da KVM, disponíveis para Windows VMs rodando em hosts KVM. Estes drivers são fornecidos pelo pacote virtio-win, que inclui drivers para:

  • Dispositivos de bloqueio (armazenamento)
  • Controladores de interface de rede
  • Controladores de vídeo
  • Dispositivo de balonamento de memória
  • Dispositivo de porta serial paravirtual
  • Dispositivo de fonte entropia
  • Dispositivo de pânico paravirtual
  • Dispositivos de entrada, tais como ratos, teclados ou tabletes
  • Um pequeno conjunto de dispositivos emulados
Nota

Para informações adicionais sobre dispositivos emulados, virtio, e dispositivos atribuídos, consulte Capítulo 10, Gerenciamento de dispositivos virtuais.

Usando os drivers KVM virtio, espera-se que as seguintes versões do Microsoft Windows sejam executadas de forma similar aos sistemas físicos:

17.2.1.2. Preparação do meio de instalação do virtio driver em uma máquina host

Para instalar os drivers de virtio KVM em uma máquina virtual Windows (VM), você deve primeiro preparar a mídia de instalação para o driver de virtio na máquina host. Para isso, instale o pacote virtio-win na máquina host e use o arquivo .iso que ele fornece como armazenamento para a VM.

Pré-requisitos

  • Certifique-se de que a virtualização esteja habilitada em seu sistema host RHEL 8.

Procedimento

  1. Faça o download dos drivers

    1. Navegue para fazer o download do Red Hat Enterprise Linux.
    2. Selecione o Product Variant relevante para a arquitetura de seu sistema. Por exemplo, para Intel 64 e AMD64, selecione Red Hat Enterprise Linux for x86_64.
    3. Assegure-se de que o site Version é 8.
    4. No site Packages, procure por virtio-win.
    5. Clique em Download Latest.

      O arquivo RPM downloads.

  2. Instale o pacote virtio-win a partir do diretório de download. Por exemplo:

    # yum install ~/Downloads/virtio-win-1.9.9-3.el8.noarch.rpm
    [...]
    Installed:
      virtio-win-1.9.9-3.el8.noarch

    Se a instalação for bem sucedida, os arquivos do driver virtio-win são preparados no diretório /usr/share/virtio-win/. Estes incluem ISO e um diretório drivers com os arquivos de driver em diretórios, um para cada arquitetura e versão Windows suportada.

    # ls /usr/share/virtio-win/
    drivers/  guest-agent/  virtio-win-1.9.9.iso  virtio-win.iso
  3. Anexe o arquivo virtio-win.iso ao Windows VM. Para fazer isso, faça uma das seguintes opções:

    • Use o arquivo como um disco ao criar um novo Windows VM.
    • Adicione o arquivo como um CD-ROM a um Windows VM existente. Por exemplo:

      # virt-xml WindowsVM --add-device --disk virtio-win.iso,device=cdrom
      Domain 'WindowsVM' defined successfully.

Recursos adicionais

17.2.1.3. Instalação de drivers de virtio em um convidado Windows

Para instalar os drivers KVM virtio em um sistema operacional (SO) Windows guest, você deve adicionar um dispositivo de armazenamento que contenha os drivers - seja ao criar a máquina virtual (VM) ou posteriormente - e instalar os drivers no SO guest do Windows.

Pré-requisitos

Procedimento

  1. No sistema operacional convidado do Windows, abra o aplicativo File Explorer.
  2. Clique em This PC.
  3. No painel Devices and drives, abra o meio virtio-win.
  4. Com base na arquitetura do vCPU da VM, execute um dos instaladores no meio.

    • Se utilizar uma vCPU de 32 bits, execute o instalador virtio-win-gt-x86.
    • Se utilizar uma vCPU de 64 bits, execute o instalador virtio-win-gt-x64.
    virtio win installer 1
  5. No assistente de configuração Virtio-win-guest-tools que se abre, siga as instruções exibidas até chegar à etapa Custom Setup.

    virtio win installer 2
  6. Na janela Configuração personalizada, selecione os drivers de dispositivo que você deseja instalar. O conjunto de drivers recomendado é selecionado automaticamente, e as descrições dos drivers são exibidas à direita da lista.
  7. Clique em próximo, depois clique em Instalar.
  8. Após a conclusão da instalação, clique em Finish.
  9. Reinicie a VM para completar a instalação do driver.

Verificação

  1. Em This PC, abra o disco do sistema. Isto é tipicamente (C:).
  2. No diretório Program Files, abra o diretório Virtio-Win.

    Se o diretório Virtio-Win estiver presente e contiver um subdiretório para cada um dos drivers selecionados, a instalação foi bem sucedida.

    virtio win installer 3

Recursos adicionais

17.2.2. Possibilitando o esclarecimento do Hyper-V

As iluminações Hyper-V fornecem um método para a KVM imitar o Hyper-V hypervisor Microsoft. Isto melhora o desempenho das máquinas virtuais Windows.

As seções seguintes fornecem informações sobre os esclarecimentos Hyper-V suportados e como habilitá-los.

17.2.2.1. Habilitando as iluminações Hyper-V em uma máquina virtual Windows

As iluminações Hyper-V proporcionam melhor desempenho em uma máquina virtual Windows (VM) rodando em um host RHEL 8. Para instruções sobre como habilitá-los, veja o seguinte.

Procedimento

  1. Edite a configuração XML da VM, adicionando as iluminações Hyper-V. Nos comandos seguintes, substitua $VMNAME pelo nome da VM do Windows.

    # virt-xml $VMNAME --edit --features hyperv_relaxed=on,hyperv_vapic=on,hyperv_spinlocks=on,hyperv_spinlocks_retries=8191,hyperv_vpindex=on,hyperv_runtime=on,hyperv_synic=on,hyperv_stimer=on,hyperv_frequencies=on
    
    # virt-xml $VMNAME --edit --clock hypervclock_present=yes
  2. Reinicie o VM

Verificação

  • Use o comando virsh dumpxml para exibir a configuração XML da VM modificada. Se incluir os seguintes segmentos, os esclarecimentos Hyper-V são habilitados na VM.

    <hyperv>
      <relaxed state='on'/>
      <vapic state='on'/>
      <spinlocks state='on' retries='8191'/>
      <vpindex state='on'/>
      <runtime state='on' />
      <synic state='on'/>
      <stimer state='on'/>
      <frequencies state='on'/>
    </hyperv>
    
    <clock offset='localtime'>
      <timer name='hypervclock' present='yes'/>
    </clock>

17.2.2.2. Iluminações configuráveis Hyper-V

Você pode configurar certas características do Hyper-V para otimizar as VMs do Windows. A tabela a seguir fornece informações sobre estas características configuráveis do Hyper-V e seus valores.

Tabela 17.1. Características configuráveis do Hyper-V

Século das LuzesDescriçãoValores

evmcs

Implementa protocolo paravirtualizado entre os hipervisores L0 (KVM) e L1 (Hyper-V), o que permite saídas mais rápidas de L2 para o hipervisor. Esta característica é exclusiva dos processadores Intel.

ligado, desligado

freqüências

Permite Registros Específicos de Máquina Hyper-V freqüência (MSRs).

ligado, desligado

ipi

Permite o suporte de interrupções paravirtualizadas entre processadores (IPI).

ligado, desligado

não-correspondência não-alvar

Notifica o sistema operacional convidado que os processadores virtuais nunca compartilharão um núcleo físico, a menos que sejam relatados como roscas SMT irmãs. Esta informação é exigida pelos hóspedes Windows e Hyper-V para mitigar adequadamente as vulnerabilidades de CPU simultâneas relacionadas a multithreading (SMT).

ligado, desligado, automático

re-luzamento

Notifica quando há uma mudança de freqüência do contador de carimbo de tempo (TSC) que só ocorre durante a migração. Também permite que o convidado continue usando a freqüência antiga até que esteja pronto para mudar para a nova freqüência.

ligado, desligado

relaxado

Desativa uma verificação de sanidade do Windows que geralmente resulta em um BSOD quando a VM está rodando em um host com muita carga. Isto é similar à opção no_timer_check do kernel Linux, que é automaticamente ativado quando o Linux está rodando no KVM.

ligado, desligado

reset

Permite a reinicialização do Hyper-V.

ligado, desligado

tempo de execução

Define o tempo gasto pelo processador na execução do código de convidado, e em nome do código de convidado.

ligado, desligado

spinlock

  • Usado por um sistema operacional da VM para notificar o Hyper-V que o processador virtual de chamada está tentando adquirir um recurso que é potencialmente detido por outro processador virtual dentro da mesma partição.
  • Usado por Hyper-V para indicar ao sistema operacional da máquina virtual o número de vezes que uma aquisição de spinlock deve ser tentada antes de indicar uma situação de spinlock excessivo para Hyper-V.

ligado, desligado

estimulante

Possibilita temporizadores sintéticos para processadores virtuais. Note que certas versões do Windows voltam a usar HPET (ou mesmo RTC quando o HPET não está disponível) quando este esclarecimento não é fornecido, o que pode levar a um consumo significativo de CPU, mesmo quando a CPU virtual está ociosa.

ligado, desligado

stimer-direct

Possibilita temporizadores sintéticos quando um evento de expiração é entregue através de uma interrupção normal.

ligado, desligado.

sínico

Junto com o estimulador, ativa o temporizador sintético. O Windows 8 usa este recurso em modo periódico.

ligado, desligado

tempo

Permite as seguintes fontes de relógio específicas do Hyper-V disponíveis para a VM,

  • Fonte de relógio baseada em MSR 82 Hyper-V (HV_X64_MSR_TIME_REF_COUNT, 0x40000020)
  • Referência TSC 83 página que é habilitada via MSR (HV_X64_MSR_REFERENCE_TSC, 0x40000021)

ligado, desligado

tlbflush

Descarrega a TLB dos processadores virtuais.

ligado, desligado

vapor

Permite o APIC virtual, que fornece acesso acelerado MSR aos registros de Controlador de Interrupção Programável Avançado (APIC) de alta utilização e mapeamento de memória.

ligado, desligado

vendor_id

Define a identificação do fornecedor Hyper-V.

  • ligado, desligado
  • Valor de id - cadeia de até 12 caracteres

vpindex

Permite o índice de processador virtual.

ligado, desligado

17.2.3. Configuração dos parâmetros do driver NetKVM

Após a instalação do driver NetKVM, você pode configurá-lo para se adequar melhor ao seu ambiente. Os parâmetros listados nesta seção podem ser configurados usando o Windows Device Manager (devmgmt.msc).

Importante

A modificação dos parâmetros do driver faz com que o Windows recarregue esse driver. Isto interrompe a atividade da rede existente.

Pré-requisitos

Procedimento

  1. Abra o Gerenciador de Dispositivos do Windows.

    Para informações sobre a abertura do Gerenciador de Dispositivos, consulte a documentação do Windows.

  2. Localize o Adaptador Ethernet Red Hat VirtIO.

    1. Na janela Gerenciador de dispositivos, clique em ao lado de Adaptadores de rede.
    2. Sob a lista de adaptadores de rede, clique duas vezes em Red Hat VirtIO Ethernet Adapter. A janela Propriedades para o dispositivo se abre.
  3. Veja os parâmetros do dispositivo.

    Na janela Propriedades, clique na aba Advanced.

  4. Modificar os parâmetros do dispositivo.

    1. Clique no parâmetro que você deseja modificar. As opções para esse parâmetro são exibidas.
    2. Modificar as opções conforme necessário.

      Para obter informações sobre as opções de parâmetros do NetKVM, consulte Seção 17.2.4, “Parâmetros do driver NetKVM”.

    3. Clique em OK para salvar as mudanças.

17.2.4. Parâmetros do driver NetKVM

A tabela a seguir fornece informações sobre os parâmetros configuráveis de registro do driver NetKVM.

Tabela 17.2. Parâmetros de registro

ParâmetroDescrição 2

Logging.Enable

Um valor booleano que determina se o registro está habilitado. O valor padrão é Habilitado.

Logging.Level

Um número inteiro que define o nível de extração. Conforme o número inteiro aumenta, aumenta também a verbosidade do tronco.

  • O valor padrão é 0 (apenas erros).
  • 1-2 adiciona mensagens de configuração.
  • 3-4 adiciona informações sobre o fluxo de pacotes.
  • 5-6 adiciona informações de interrupção e rastreamento de nível de DPC.
Nota

Altos níveis de registro retardarão sua máquina virtual.

A tabela a seguir fornece informações sobre os parâmetros iniciais do driver NetKVM configurável.

Tabela 17.3. Parâmetros iniciais

ParâmetroDescrição

Atribuir MAC

Uma cadeia que define o endereço MAC administrado localmente para o NIC paravirtualizado. Isto não é definido por padrão.

Init.ConnectionRate(Mb)

Um número inteiro que representa a taxa de conexão em megabits por segundo. O valor padrão para Windows 2008 e posteriores é 10G (10.000 megabits por segundo).

Init.Do802.1PQ

Um valor booleano que permite Prioridade/VLAN população de tags e suporte à remoção. O valor padrão é Habilitado.

Init.MTUSize

Um número inteiro que define a unidade máxima de transmissão (MTU). O valor padrão é 1500. Qualquer valor de 500 a 65500 é aceitável.

Init.MaxTxBuffers

Um número inteiro que representa o número de descritores de anéis TX que serão alocados.

O valor padrão é 1024.

Os valores válidos são: 16, 32, 64, 128, 256, 512, e 1024.

Init.MaxRxBuffers

Um número inteiro que representa o número de descritores de anéis RX que serão alocados.

O valor padrão é 256.

Os valores válidos são: 16, 32, 64, 128, 256, 512, e 1024.

Offload.Tx.Checksum

Especifica o modo de descarga do checksum TX.

No Red Hat Enterprise Linux 8, os valores válidos para este parâmetro são:

* Tudo (o padrão) que permite a descarga de checksum IP, TCP e UDP tanto para IPv4 quanto para IPv6

* TCP/UDP(v4,v6) que permite a descarga de checksum TCP e UDP tanto para IPv4 quanto para IPv6

* TCP/UDP(v4) que permite a descarga de checksum TCP e UDP somente para IPv4

* TCP(v4) que permite somente a descarga de checksum TCP somente para IPv4

17.2.5. Otimização dos processos de fundo nas máquinas virtuais Windows

Para otimizar o desempenho de uma máquina virtual (VM) rodando um sistema operacional Windows, você pode configurar ou desativar uma variedade de processos Windows.

Atenção

Certos processos podem não funcionar como esperado se você mudar sua configuração.

Procedimento

Você pode otimizar suas VMs com Windows executando qualquer combinação do seguinte:

  • Remova os dispositivos não utilizados, como USBs ou CD-ROMs, e desative as portas.
  • Desativar atualização automática do Windows. Para mais informações sobre como fazê-lo, consulte Configurar Configurações de Política de Grupo para Atualizações Automáticas ou Configurar Atualização do Windows para Empresas.

    Note que o Windows Update é essencial para instalar as últimas atualizações e hotfixes da Microsoft. Como tal, a Red Hat não recomenda desativar as Atualizações do Windows

  • Desabilitar serviços de fundo, tais como SuperFetch e Windows Search. Para mais informações sobre como desativar os serviços, consulte Desativar os serviços do sistema ou Stop-Service.
  • Desativar useplatformclock. Para fazer isso, execute o seguinte comando,

    # bcdedit /set useplatformclock No
  • Revisar e desativar tarefas programadas desnecessárias, tais como desfragmentação programada de discos. Para mais informações sobre como fazer isso, consulte Desativar tarefas programadas.
  • Certifique-se de que os discos não estejam criptografados.
  • Reduzir a atividade periódica das aplicações do servidor. Você pode fazer isso editando os respectivos temporizadores. Para mais informações, consulte Temporizadores Multimídia.
  • Feche o aplicativo Server Manager no VM.
  • Desativar o software antivírus. Note que a desativação do antivírus pode comprometer a segurança do VM.
  • Desativar o protetor de tela.
  • Mantenha o sistema operacional Windows na tela de entrada quando não estiver em uso.

Capítulo 18. Criando máquinas virtuais aninhadas

RHEL 8.2 e mais tarde fornecer suporte total ao recurso KVM nested virtualization nos hosts Intel. Isto torna possível que uma máquina virtual (também referida como level 1, ou L1) que funciona em um host físico RHEL 8 (level 0, ou L0) possa atuar como um hipervisor e criar suas próprias máquinas virtuais (level 2 ou L2).

Em outras palavras, um host RHEL 8 pode operar máquinas virtuais L1 (VMs), e cada uma dessas VMs pode hospedar VMs L2 aninhadas.

A virtualização aninhada não é recomendada em ambientes de produção de usuários, pois está sujeita a várias limitações de funcionalidade. Em vez disso, a virtualização aninhada destina-se principalmente ao desenvolvimento e testes, para os quais pode ser útil em uma variedade de cenários, como por exemplo:

  • Depuração de hipervisores em um ambiente restrito
  • Teste de implantações virtuais maiores em uma quantidade limitada de recursos físicos

É possível criar VMs aninhadas em múltiplas arquiteturas, mas atualmente a Red Hat suporta VMs aninhadas somente em sistemas Intel. Em contraste, a virtualização aninhada em sistemas AMD, IBM POWER9, e IBM Z é fornecida apenas como uma Technology Preview e, portanto, não é suportada.

18.1. Criando uma máquina virtual aninhada na Intel

Siga os passos abaixo para habilitar e configurar a virtualização aninhada em um host Intel.

Pré-requisitos

  • Um host L0 RHEL8 rodando uma máquina virtual L1 (VM).
  • A CPU hipervisor deve suportar a virtualização aninhada. Para verificar, use o comando cat /proc/cpuinfo no hipervisor L0. Se a saída do comando incluir as bandeiras vmx e ept, a criação de L2 VMs é possível. Este é geralmente o caso nos núcleos Intel Xeon v3 e mais tarde.
  • Garantir que a virtualização aninhada seja habilitada no host L0:

    # cat /sys/module/kvm_intel/parameters/nested
    • Se o comando retornar 1, o recurso estará habilitado e você poderá iniciar o Procedimento abaixo.
    • Se o comando retornar 0 ou N mas seu sistema suportar a virtualização aninhada, use os seguintes passos para habilitar o recurso.

      1. Descarregue o módulo kvm_intel:

        # modprobe -r kvm_intel
      2. Ativar o recurso de aninhamento:

        # modprobe kvm_intel nested=1
      3. O recurso de aninhamento está agora ativado, mas apenas até a próxima reinicialização do host L0. Para ativá-lo permanentemente, adicione a seguinte linha ao arquivo /etc/modprobe.d/kvm.conf:

        opções kvm_intel aninhado=1

Procedimento

  1. Configure sua L1 VM para uma virtualização aninhada.

    1. Abra a configuração XML da VM. O exemplo a seguir abre a configuração da VM Intel-L1:

      # virsh edit Intel-L1
    2. Adicione a seguinte linha à configuração:

      <cpu mode='host-passthrough'/>

      Se o arquivo de configuração XML da VM já contém um elemento <cpu>, reescreva-o.

  2. Criar uma L2 VM dentro da L1 VM. Para fazer isto, siga o mesmo procedimento que ao criar a L1 VM.

18.2. Criando uma máquina virtual aninhada na AMD

Siga os passos abaixo para habilitar e configurar a virtualização aninhada em um host AMD.

Atenção

Atualmente, a virtualização aninhada é fornecida apenas como uma prévia tecnológica sobre a arquitetura AMD64, e, portanto, não tem suporte.

Pré-requisitos

  • Um host L0 RHEL8 rodando uma máquina virtual L1 (VM).
  • A CPU hipervisor deve suportar a virtualização aninhada. Para verificar, use o comando cat /proc/cpuinfo no hipervisor L0. Se a saída do comando incluir as bandeiras svm e npt, a criação de L2 VMs é possível. Este é geralmente o caso nos núcleos do AMD EPYC e mais tarde.
  • Garantir que a virtualização aninhada seja habilitada no host L0:

    # cat /sys/module/kvm_amd/parameters/nested
    • Se o comando retornar Y ou 1, o recurso estará ativado e você poderá iniciar o Procedimento abaixo...
    • Se o comando retornar 0 ou N, use os seguintes passos para habilitar o recurso.

      1. Parar todas as VMs em funcionamento no host L0.
      2. Descarregue o módulo kvm_amd:

        # modprobe -r kvm_amd
      3. Ativar o recurso de aninhamento:

        # modprobe kvm_amd nested=1
      4. O recurso de aninhamento está agora ativado, mas apenas até a próxima reinicialização do host L0. Para habilitá-lo permanentemente, adicione o seguinte ao arquivo /etc/modprobe.d/kvm.conf:

        opções kvm_amd nested=1

Procedimento

  1. Configure sua L1 VM para uma virtualização aninhada.

    1. Abra a configuração XML da VM. O exemplo a seguir abre a configuração da VM AMD-L1:

      # virsh edit AMD-L1
    2. Configure a CPU da VM para usar o modo host-passthrough.

      <cpu mode='host-passthrough'/>

      Se você precisar que a VM utilize uma CPU específica ao invés de host-passthrough, adicione uma linha <feature policy='require' name='vmx'/> à configuração da CPU. Por exemplo:

      <cpu mode ='custom' match ='exact' check='partial'>
      <model fallback='allow'>Haswell-noTSX</model>
      <feature policy='require' name='vmx'/>
  2. Criar uma L2 VM dentro da L1 VM. Para fazer isto, siga o mesmo procedimento que ao criar a L1 VM.

18.3. Criando uma máquina virtual aninhada no IBM Z

Siga os passos abaixo para habilitar e configurar a virtualização aninhada em um host IBM Z.

Atenção

Atualmente, a virtualização aninhada é fornecida apenas como uma prévia tecnológica sobre a arquitetura IBM Z e, portanto, não tem suporte.

Pré-requisitos

  • Um host L0 RHEL8 rodando uma máquina virtual L1 (VM).
  • A CPU hipervisora deve suportar a virtualização aninhada. Para verificar este é o caso, use o comando cat /proc/cpuinfo no hipervisor L0. Se a saída do comando incluir a bandeira sie, a criação de L2 VMs é possível.
  • Garantir que a virtualização aninhada seja habilitada no host L0:

    # cat /sys/module/kvm/parameters/nested
    • Se o comando retornar Y ou 1, o recurso estará ativado e você poderá iniciar o Procedimento abaixo...
    • Se o comando retornar 0 ou N, use os seguintes passos para habilitar o recurso.

      1. Parar todas as VMs em funcionamento no host L0.
      2. Descarregue o módulo kvm:

        # modprobe -r kvm
      3. Ativar o recurso de aninhamento:

        # modprobe kvm nested=1
      4. O recurso de aninhamento está agora ativado, mas apenas até a próxima reinicialização do host L0. Para ativá-lo permanentemente, adicione a seguinte linha ao arquivo /etc/modprobe.d/kvm.conf:

        opções kvm nested=1

Procedimento

  • Criar uma L2 VM dentro da L1 VM. Para fazer isto, siga o mesmo procedimento que ao criar a L1 VM.

18.4. Criando uma máquina virtual aninhada no IBM POWER9

Siga os passos abaixo para habilitar e configurar a virtualização aninhada em um host IBM POWER9.

Atenção

Atualmente, a virtualização aninhada é fornecida apenas como uma prévia tecnológica da arquitetura IBM POWER9 e, portanto, não tem suporte. Além disso, a criação de máquinas virtuais aninhadas (VMs) não é possível nas versões anteriores dos sistemas IBM POWER, como o IBM POWER8.

Pré-requisitos

  • Um host L0 RHEL8 está executando um L1 VM. O L1 VM está usando o RHEL 8 como o sistema operacional convidado.
  • A virtualização aninhada é ativada no host L0:

    # cat /sys/module/kvm_hv/parameters/nested
    • Se o comando retornar Y ou 1, o recurso estará habilitado e você poderá iniciar o Procedimento abaixo.
    • Se o comando retornar 0 ou N, use os seguintes passos para habilitar o recurso:

      1. Parar todas as VMs em funcionamento no host L0.
      2. Descarregue o módulo kvm:

        # modprobe -r kvm_hv
      3. Ativar o recurso de aninhamento:

        # modprobe kvm_hv nested=1
      4. O recurso de aninhamento está agora ativado, mas apenas até a próxima reinicialização do host L0. Para ativá-lo permanentemente, adicione a seguinte linha ao arquivo /etc/modprobe.d/kvm.conf:

        opções kvm_hv aninhado=1

Procedimento

  1. Para garantir que a L1 VM possa criar L2 VMs, adicione o parâmetro cap-nested-hv ao tipo de máquina da L1 VM. Para isso, use o comando virsh edit para modificar a configuração XML da L1 VM, e a seguinte linha para a seção <features>:

    <nested-hv state='on'/>
  2. Criar uma L2 VM dentro da L1 VM. Para fazer isto, siga o mesmo procedimento que ao criar a L1 VM.

    Para melhorar significativamente o desempenho das L2 VMs, a Red Hat recomenda adicionar também o parâmetro `cap-nested-hv` às configurações XML das L2 VMs. Para instruções, veja o passo anterior.

Informações adicionais

  • Note que o uso do IBM POWER8 como arquitetura para a L2 VM atualmente não funciona.

18.5. Restrições e limitaçõ