Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Automatizar provisionamento das VMs #50

Open
3 of 4 tasks
lucaslehnen opened this issue Nov 2, 2021 · 7 comments · Fixed by #51
Open
3 of 4 tasks

Automatizar provisionamento das VMs #50

lucaslehnen opened this issue Nov 2, 2021 · 7 comments · Fixed by #51

Comments

@lucaslehnen
Copy link
Owner

lucaslehnen commented Nov 2, 2021

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:

  • Ansible: Conecta no host e instala e configura o libvirt;
  • Packer: Builda as imagens a serem utilizadas;
  • Ansible: Roda a partir do Packer para instalar o que vai na imagem (provisioner)
  • Terraform: Provisiona as máquinas virtuais

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

Tarefas

  • Ansible playbook para configurar o servidor com libvirt;
  • Packer para construção da imagem base;
  • Terraform para provisionar as vms;
  • Ansible playbook para configurar a imagem da VM (Tem uma issue pra isso)
@lucaslehnen lucaslehnen changed the title Provisionamento das VMs com libvirt e Terraform Automatizar provisionamento das VMs Nov 2, 2021
@lucaslehnen lucaslehnen linked a pull request Nov 4, 2021 that will close this issue
3 tasks
@lucaslehnen
Copy link
Owner Author

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
Copy link
Owner Author

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
Copy link
Owner Author

lucaslehnen commented Nov 12, 2021

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
Copy link
Owner Author

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
Copy link
Owner Author

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.

  • O ESXi então rodará no VMWare Player que estará rodando no Debian;
  • O Packer será utilizado para buildar as imagens, ou conectará remoto no ESXi, ou se funcionar no Player;
  • Ansible para provisionar as ações dentro da golden image;
  • Com a imagem pronta, usar o Terraform para ajustar o estado do ESXi, assim como seria na nuvem;

@lucaslehnen
Copy link
Owner Author

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:

  • Instalaria o VMWare Workstation, o Packer e o Terraform;
  • Baixaria o template do Packer, criando uma imagem de instalação do ESXi dentro do VMWareWorkstation;
  • Com a imagem criada, o Terraform montaria a vm para o ESXi;
  • As maquinas virtuais podem ser elencadas no ESXi ou no VMWare Workstation, mas ai já seria interessante colocar a chamada do Terraform no GitOps;

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:

  • Instalação do QEMU e libvirt;
  • As máquinas seriam elencadas diretamente no Qemu, rodando no Debian.

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
Copy link
Owner Author

lucaslehnen commented Dec 23, 2021

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 #56

lucaslehnen added a commit that referenced this issue Apr 23, 2022
* Documentação ajustada;
* Estrutura inicial para virtualização no servidor desktop
@lucaslehnen lucaslehnen reopened this Apr 23, 2022
@lucaslehnen lucaslehnen added this to the Cluster K8s Virtualizado milestone Apr 23, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment