lucaslehnen / homelab

Ambiente para laboratórios e estudos de Kubernetes e outras ferramentas
0 stars 0 forks source link

Automatizar provisionamento das VMs #50

Open lucaslehnen opened 3 years ago

lucaslehnen commented 3 years ago

Problema:

Preciso configurar máquinas virtuais para utilizar no ambiente. Instalei um Debian no meu PC desktop.

Proposta

A ideia inicial é utilizar o libvirt/qemu para rodar as máquinas virtuais.

Detalhes

Pode ser automatizado com Terraform ou Ansible. Como eu preciso configurar o host físico de virtualização, que é uma máquina já instalada mas sem pacote algum, eu posso usar o Ansible como primeira etapa para instalar o libvirt e configurar a máquina e na sequência o Terraform para provisionar as vms com libvirt. O Ansible também tem o módulo do libvirt, mas acredito que seja uma oportunidade de já encaixar o Terraform. Da pra usar o Packer para montar imagens customizadas também.

Um fluxo possível seria:

Neste cenário, seria um teste de trabalho com o conceito de imutabilidade.

Tarefas

  • [x] Ansible playbook para configurar a imagem da VM (Tem uma issue pra isso)
lucaslehnen commented 3 years ago

Achei a possibilidade de utilizar o ESXI para a emulação das máquinas dentro do Qemu. Isso pode trazer a possibilidade mais clara de reaproveitar o conhecimento e arquivos de irei construir futuramente, mesmo que a performance seja inferior, já que estarei com um um ambiente triplamente virtualizado: Qemu -> ESXI -> VM

lucaslehnen commented 3 years ago

Apesar de termos recursos de Packer e Terraform para automatizar a criação da VM com ESXI no libvirt, como eu já tenho uma automação no Ansible, para mim faz mais sentido que essa parte também fique nele. Terraform e Packer, ainda sim seguem para serem utilizados conforme planejado, nas vms do kubernetes, que agora serão executadas no ESXI.

lucaslehnen commented 2 years ago

Apesar de termos recursos de Packer e Terraform para automatizar a criação da VM com ESXI no libvirt, como eu já tenho uma automação no Ansible, para mim faz mais sentido que essa parte também fique nele. Terraform e Packer, ainda sim seguem para serem utilizados conforme planejado, nas vms do kubernetes, que agora serão executadas no ESXI.

O Packer ainda utilizei para criar a imagem do ESXi via builder do Qemu, pois seria mais fácil para servir o arquivo de kickstart. Uma possível alternativa seria fazer na mão uma customização da imagem de instalação, mas isso daria mais trabalho e precisaria subir mais recursos temporários no ambiente.

O Terraform também avaliei a utilização, mas como não consegui conectar remotamente no qemu e são poucas opções no provider, resolve não utiliza-lo. https://registry.terraform.io/providers/dmacvicar/libvirt/latest/docs

lucaslehnen commented 2 years ago

Decidi montar um único Playbook Ansible para provisionamento do Homelab. Apesar de usar outras ferramentas, como executar o Terraform para criação da infra na nuvem, tudo vai partir deste playbook, de uma role específica

lucaslehnen commented 2 years ago

Li muito sobre como Qemu, libvirt e afins, fiz vários testes, tentei rodar o ESXI nestes virtualizadores mas não tive sucesso, o hardware virtual é incompatível. Ai fui para uma solução menos glamurosa: Coloquei o Debian com o LXDE (usa uns 300 MB de ram), e instalei manualmente o VMWare Workstation Player. Este sim tem o suporte adequado, inclusive já reconhece ao colocar a ISO. Notei também que ficou mais rápido.

O código que escrevi do Packer para o libvirt e virtualbox irei separar em outros repositórios e evoluir em outro momento futuro.

lucaslehnen commented 2 years ago

Estudando mais, cheguei em dois cenários:

1º - Debian >> VMWare Workstation >> ESXi:

Neste caso, o Ansible faria as seguintes alterações na máquina com o Debian:

Obs.: O VMWare Player não tem os complementos para acesso programático exigidos pelo Packer. Pode ser utilizado ele, mas o ESXi teria de ser instalado manualmente, como já havia comentado acima.

2º - Debian >> Qemu

Neste cenário, o Ansible faria:


Para acelerar o aprendizado do Kubernetes, e subir logo esse ambiente, vou focar no cenário 2, mas manterei o código referente ao cenário 1 para continuar evoluindo nele posteriormente.

lucaslehnen commented 2 years ago

Por hora deixei o Packer buildando localmente a partir de script no repositório e fazendo o upload da imagem para o S3. No playbook do desktop, coloquei para baixar estes discos pré-gerados, diferente da ideia original, onde eu construiria eles pelo playbook. A ideia depois, é por em CI/CD https://github.com/lucaslehnen/homelab/issues/56