Configuração do Servidor de Virtualização

Introdução

Este documento relata os passos utilizado para configurar o ambiente de vitualização que será utilizado na infraestrutura do Bambu.

Definições

  • LVM: Logical Volume Manager, é usado em sistemas GNU/Linux para mapear dispositivos físicos em volumes lógicos.
  • VG: Volume Group, agrupamento de dispositivos que fornecem uma camada de abstração unificada para criação de volumes lógicos.
  • LV: Logical Volume, volume lógico criado acima da abstração de um VG.
  • <TAMANHO DO DISCO>: Tamanho do LV que será criado, geralmente expresso em bytes, mas permite a especificação da unidade de medida logo após o tamanho (exemplo: MB, GB, TB e etc...).
  • <NOME DO VOLUME>: Nome do volume lógico.
  • <DIRETORIO DE DESTINO>: Nome do diretório que será usado para montar o LV, geralmente uma pasta criada (usando o nome <NOME DO VOLUME>) em um diretório apropriado para montagem de discos.
  • <NOME DO VOLUME GROUP>: Nome do VG que será usado para criar o LV.
  • <PATH PARA O VOLUME LOGICO>: Caminho completo até o LV criado.

Descrição das etapas

1. Instalação do LVM e KVM

Todas as ferramentas para gerenciar um volume LVM estão disponíveis no pacote lvm2:

# apt install lvm2

Criar um grupo para o volume lógico:

# vgcreate <NOME DO VOLUME GROUP> /dev/sda*

Criar um volume lógico:

# lvcreate -L <TAMANHO DO DISCO>GB --name <NOME DO VOLUME> <NOME DO VOLUME GROUP>

  • Observação: A opção -L serve para especificar o tamanho do disco, que nesse caso foi especificado em Gigabytes.

Caso queira verificar o novo volume lógico criado anteriormente, execute o comando abaixo:

# lvdisplay

Montagem do disco

É necessário criar o diretório onde será montado o volume lógico, o que depende da motivação de utilização do disco, um diretório possível é o /srv/ que normalmente abriga dados de um serviço especifico da máquina em questão. Para criar o diretório execute o seguinte comando.

# mkdir <DIRETORIO DE DESTINO>

Agora é necessário configurar a montagem do volume de forma permanente no sistema, e posteriormente montar a partição em tempo de execução.

# echo "<PATH PARA O VOLUME LOGICO>  <DIRETORIO DE DESTINO>   ext4   errors=remount-ro   0   2" >> /etc/fstab
# mount <PATH PARA O VOLUME LOGICO>

  • Observações: As opções usadas na montagem do volume lógico pode variar a depender do tipo de utilização que será dada ao disco.

Nesse momento temos um novo volume lógico criado, configurado e montado.

Configuração do pool para o hypervisor

Também é necessário definir um storage pool usado pelo nosso hypervisor através de uma ferramenta que utilize a libvirt. Podemos usar o virsh ou virt-manager. Abaixo usaremos o virsh.

Ainda logado no servidor de virtualização, basta executar os seguintes comandos.

# virsh pool-define-as <NOME DO VOLUME> dir --target "<DIRETORIO DE DESTINO>"
# virsh pool-autostart <NOME DO VOLUME>
# virsh pool-start <NOME DO VOLUME>

Para checar se o pool está correto, basta executar o seguinte comando.

# virsh pool-list --all

Pronto, temos o pool criado e configurado.

Instalando o KVM

# apt install qemu-kvm libvirt-clients libvirt-daemon-system

Afim de gerenciar virtual machines (VMs) com usuário regular, o mesmo deve ser adicionado em alguns grupos:

# adduser <youruser> libvirt
# adduser <youruser> libvirt-qemu

Listar as VMs:

# virsh list --all

2. Instalação do docker

# apt-get install apt-transport-https

Adicionando repositório do docker:

# add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/$(. /etc/os-release; echo "$ID") \
   $(lsb_release -cs) stable"

Instalando a última versão do Docker CE.

# apt-get update && apt-get install docker-ce

3. Configuração do ONOS

A imagem do ONOS é construida e publicada no docker hub. para obter-la basta executar:

# docker pull onosproject/onos

Agora que a imagem tem sido baixada, basta instancia-la:

# docker run  -t -d --name onos1 onosproject/onos

# TODO: precisamos ver como mapear a porta 6633 de dentro da imagem para fora. Uma possiblidade é: iptables -t nat -A PREROUTING -p tcp --dport 6633 -j DNAT --to 172.17.0.2:6633 (cuidado pq essa regra eh muito generica)

O próximo comando irá acessar a instância:

# ssh -p 8101 karaf@172.17.0.2   ( senha: karaf)

# TODO: como monitorar que o docker está radando e fazer o restart se necessario

Habilitar as aplicações que irão rodar no ONOS:

onos> app activate org.onosproject.openflow-base 
onos> app activate org.onosproject.lldpprovider

Desativar LLDP nas portas de acesso:

onos> config-link-discovery of:00000004df1a9cb6 14 
onos> config-link-discovery of:0000400000000004 14

Para checar a lista de switches e a lista de links, podemos executar:

onos> devices
onos> links

Para adicionar um intent entre a porta 14 do switch 1 e a porta 14 do switch 2 (ida e volta), na vlan 200:

onos> add-point-intent --vlan 200 of:0000400000000004/14 of:00000004df1a9cb6/14 
onos> add-point-intent --vlan 200 of:00000004df1a9cb6/14 of:0000400000000004/14