Modelo de servidor imutável com Docker / Ansible vs. Ansible, Puppet e Foreman na AWS?

9

Estamos entrando em uma discussão interessante e estamos caindo em dois campos. Estou interessado em qualquer problema em particular com a idéia ou as dicas que podemos estar perdendo. Realmente, qualquer coisa que possa nos ajudar a tomar uma decisão ou apontar coisas pelas quais não estamos respondendo. Eu sei que isso contorna a regra "sem opinião" um pouco mais de perto, mas espero que ainda seja uma pergunta aceitável. Desculpe pelo tamanho também, há um pouco de nuance.

1) Um lado (o meu - não estou sem viés) considera o modelo de servidor imutável muito interessante para os sistemas em nuvem. Para esse fim, prototipamos a transferência de todos os componentes de nossa infraestrutura para o Docker. Nossos aplicativos personalizados são construídos via Jenkins diretamente nas imagens do Docker que são implantadas em um Registro do Docker local. Em seguida, criamos um grande conjunto de funções Ansible e um manual capaz de acessar um servidor vazio, instalar o Docker e depois solicitar ao Docker que instale todos os contêineres, conforme necessário. Após alguns minutos, todo o aplicativo e toda a infraestrutura de suporte estão conectados e funcionando - registro, monitoramento, criação / população de banco de dados, etc. A máquina finalizada é um ambiente de controle de qualidade ou desenvolvimento independente, com uma cópia exata do inscrição. Nosso plano de dimensionar isso seria criar novos Playbooks para criar novos servidores da AWS a partir de uma AMI confiável (provavelmente uma imagem muito simples), fazer implantações contínuas do aplicativo de produção para lidar com o gerenciamento e as liberações de configuração e, geralmente, nunca editar servidores novamente - apenas faça-os novamente. Não estou preocupado em conseguir o que descrevi funcionando na prática - apenas se for um modelo razoável.

2) O outro campo quer usar o Puppet para lidar com o gerenciamento de configuração, Ansible para implantar nossos aplicativos personalizados que são tarballs gerados em nosso processo de compilação, o Foreman para lidar com o acionamento e o gerenciamento do processo como um todo e o Katello para fazer alguma quantidade de base gerenciamento de imagens. As versões envolveriam a alteração da configuração do Puppet, conforme necessário, e a Ansible implantaria componentes atualizados com alguma coordenação do Foreman. Os servidores seriam construídos razoavelmente rapidamente se precisássemos de novos, mas a intenção não é torná-los descartáveis ​​como parte do processo padrão. Isso está mais próximo do modelo de servidor phoenix, embora com uma vida útil longa.

Então, minha pergunta realmente se resume a isso: o modelo de servidor imutável com as ferramentas como as descrevi acima é realmente tão realista quanto parece? Adoro a idéia de que nosso processo de preparação pode literalmente criar um clone inteiro dos aplicativos ao vivo, deixe o controle de qualidade martelar e depois inverter o armazenamento do banco de dados e algumas configurações de DNS para torná-lo ativo.

Ou o modelo de servidor imutável falha na prática? Temos uma boa experiência com os ambientes da AWS e da nuvem, então essa não é realmente a preocupação - mais uma questão de como obter um aplicativo razoavelmente sofisticado implantado de forma confiável no futuro. Isso é de particular interesse, pois lançamos com bastante frequência.

Temos o Ansible fazendo a maioria das coisas necessárias, exceto a criação de servidores EC2 para nós e isso não é difícil. Estou tendo problemas para entender por que você realmente precisa de Puppet / Foreman / Katello neste modelo. O Docker é muito mais limpo e simples do que os scripts de implantação personalizados em qualquer ferramenta disponível no mercado. O Ansible parece muito mais simples de usar do que o Puppet quando você para de se preocupar em configurá-los no local e simplesmente constrói-os novamente com a nova configuração. Sou fã do diretor do KISS - particularmente em automação, onde a Lei de Murphy é desenfreada. Quanto menos máquinas, melhor a IMO.

Quaisquer pensamentos / comentários ou sugestões sobre a abordagem serão muito apreciados!

Doctor John Wick
fonte
Meus preconceitos estão alinhados com os seus. Eu uso todos os principais sistemas de gerenciamento de configuração há meses, senão anos, que não consigo imaginar usar o fantoche para um novo projeto hoje em dia. O Chef é uma escolha mais madura se você quiser usar sistemas baseados em rubi. O Ansible parece ser o melhor da raça atualmente, mas o sal também é uma escolha decente.
pintainhos
Fantoche e ansível? Você vai ter um mau momento.
Dmourati 19/16
Docker abre a possibilidade de utilizar Kubernetes, o que significa autoscaling, campo Container de auto-cura etc. está amadurecendo agora e é muito boa opção se o seu aplicativo pode caber paradigma Microservice
Droopy4096

Respostas:

1

Em nossa empresa, implementamos com sucesso o Puppet na infraestrutura herdada do cliente. Também estamos usando contêineres do Docker para executar um serviço dedicado (que é de fato um aplicativo antigo aparado e torcido para caber nos contêineres).
Eu não estava feliz com os contêineres na primeira vez em que comecei a trabalhar com eles (sim ... o aplicativo de 30kb se torna uma imagem pesada de 200MB), mas quando tive que recriar todo o ambiente após um pequeno desastre, mudei de idéia. Acho que o Docker foi inventado exatamente para isso: implantações rápidas e frequentemente sem preocupações com a configuração do servidor. Se você projetar os contêineres corretamente, poderá alternar entre provedores de nuvem, laptops de desenvolvedor e datacenters de colocation com facilidade. Porque tudo o que você precisa é de uma caixa de baunilha do Linux com o daemon do Docker.

  • No cenário 1) você tem tudo em um só lugar (quero dizer, um porque, com o Docker, você terá código E configuração no mesmo repositório) fácil de gerenciar, ler e implantar.
  • No cenário 2), você precisa armazenar partes de configuração para três ferramentas (!) Diferentes em um repositório e código de aplicativo no outro, o que torna as coisas mais complicadas

Eu também estava usando o Puppet no meu projeto anterior e minha experiência até agora é que o servidor imutável é possível com o Docker do que com o Puppet ou o Chef. Acredito que as ferramentas de gerenciamento de configuração são mais úteis para os provedores de nuvem do que para a equipe de desenvolvimento.

alxndr
fonte
0

Aqui estão os meus 2 centavos de euro.

As 2 opções que você propõe são opções válidas para atingir (algum tipo de) imutabilidade.
Eu acho que você deve escolher o que você está mais confortável.
No entanto, pelo que você escreve, parece que ainda não há consenso.
Talvez uma terceira opção seja necessária, então? ;)

No entanto, como essa imutabilidade não é uma meta, é um meio de garantir outras propriedades (sem desvio de configuração, melhor estabilidade, ...).
Eu declararia claramente meus objetivos, colocaria algumas métricas para validá-los e faria alguns testes usando as 2 opções. Você terá alguns números para selecionar o que está mais alinhado com o seu negócio.

Boa sorte!

sebbrochet
fonte