como automatizar a instalação de servidores com virtualização/LAMP (IaC pequeno)?

como automatizar a instalação de servidores com virtualização/LAMP (IaC pequeno)?

Como automatizar a instalação do servidor? Quais infraestruturas/sistemas atendem às nossas necessidades?

Temos mais de 10 servidores físicos com mais de 100 VMs, principalmente LAMP. Não muitos, mas também nada que possa continuar funcionando sozinho. Todos os servidores possuem virtualização KVM. Hospedamos vários aplicativos personalizados para nossos clientes que modificamos com frequência. Portanto, este não é um único aplicativo que precisa ser dimensionado. As equipes de projeto trabalham diretamente com os clientes e com as VMs e isso é um requisito.

O problema que enfrentamos rotineiramente é que a reinstalação de uma VM/máquina é complicada, pois ninguém controla as alterações recentes nelas, representa um risco de instabilidade, as pessoas adiam o processo o máximo possível e os problemas aumentam com o tempo.

Gostaria de estabelecer um procedimento de reinstalação pelo menos a cada 3 meses e sob demanda. A reinstalação deve começar com um repositório de código e um backup. Isto não deve ser uma duplicação de VM.

Estimamos que isso nos custará cerca de 6 meses a cada 3 meses na configuração atual, se feito manualmente. Como podemos reduzir esse tempo e também aumentar a repetibilidade do processo?

A questão é qual software pode nos ajudar a automatizar essa tarefa. Deve ser o mais leve possível. Não precisamos de alocação automatizada de nós. Só precisamos que as reinstalações sejam o mais automatizadas possível. Assumimos a supervisão humana de cada reinstalação.

Nossos nós são principalmente LAMP com dois sistemas com mais de 1 TB de dados de banco de dados estruturados, vários > 200 GB e cerca de 50 VMs pequenas e personalizadas. Podemos agendar facilmente um tempo de inatividade planejado para cada sistema, portanto não se trata de alta disponibilidade durante a reinstalação.

Só precisamos automatizar a reinstalação tanto quanto possível.

Responder1

Você precisa de uma estrutura de gerenciamento de configuração como Ansible, Saltstack, Puppet ou Chef.

Essa é a ferramenta a ser usada para gerenciar e aplicar configurações. No entanto, selecionar a ferramenta real é uma parte secundária do projeto.

Você precisa projetar e implantar o processo, onde todas as alterações na infraestrutura sejam gerenciadas por meio desta ferramenta.

Isto exige:

  • treinar pessoas para usar a ferramenta
  • alterar a arquitetura do sistema para que as alterações não possam ser feitas sem a ferramenta
  • lidar com a resistência à mudança do modo de operação fundamental das pessoas

Você também deve considerar a unificação da infraestrutura da pilha de software.

Se cada VM tiver uma configuração de software um pouco diferente, você terá

  • muito código duplicado no seu código de gerenciamento de configuração para diferentes instalações
  • lógica complexa para escolher como aplicar qual configuração

Qualquer um desses fatores acrescenta muita sobrecarga de manutenção e o resultado final pode ser tão doloroso quanto a sua situação atual.

Responder2

Sua nuvem possui uma chave API?

A maioria das nuvens possui imagens LAMP de um clique, por exemplo

Vultr:https://www.vultr.com/apps/lamp/

Oceano Digital:https://marketplace.digitalocean.com/apps/lamp

Linode:https://www.linode.com/docs/guides/lamp-stack-marketplace-app/

Se não, minha escolha absoluta é VestaCPhttps://vestacp.com/install/

Ehttps://hestiacp.com/

Ambos adicionam backend Apache, front-end nginx, MySQL/mariadb/postgres e php/php-fpm. Todos os opcionais também.

Para atualizações, eu criaria um servidor separado, colocaria uma chave pública SSH comum /root/.ssh/authorized_keysque o servidor separado possui, que pode efetuar login automaticamente em cada servidor, algo como:

INSTANCES=(
10.0.0.5
10.0.0.6
10.0.0.7
...
)


for INSTANCE in "${INSTANCES[@]}"; do
    ssh root@${INSTANCE} /bin/bash -c "apt update -y && apt upgrade -y"
done

Isso é basicamente Terraform, Kubernetes etc.

Também no GitHub, há vários guias específicos para nuvem, por exemplo:

Outro Oceano Digital:https://github.com/ethanbeyer/DigitalOcean-Droplet-Setup

Um AWS:https://github.com/elionaz/aws-LAMP/blob/master/install_lamp.sh

informação relacionada