Existe alguma razão para usar o Puppet junto com o Docker?

16

Eu tentei o Ops parte do DevOps há algum tempo e foi bastante divertido, mas não tenho tempo e motivo para experimentá-lo em nenhum projeto. Mas na semana passada, comecei um novo trabalho, onde o chefe me perguntou se eu posso configurar o servidor para criar algo como um ambiente de preparação para os projetos da empresa. Junto com isso, comecei a pensar em migrar o projeto para ser mais DevOps, em vez de apenas dev.

Eu criei o Docker, o que é ótimo e super fácil para mim. Mas, há algum tempo, eu estava experimentando o Puppet, por isso me perguntei: "Existe alguma razão para usar o Puppet com o Docker?". Docker parece fazer todas as coisas que Puppet faria, mas de maneira mais fácil.

PS: Algum tempo atrás, no Hacker News, havia o Consul, que é uma boa configuração e descoberta de serviços; portanto, mesmo a configuração pode ser resolvida (e estou pensando em implementar isso também).

Hauleth
fonte

Respostas:

18

Puppet e docker podem fazer muitas das mesmas coisas, porém eles os abordam de uma maneira diferente.

Puppet gerencia arquivos + pacotes + serviços. (Chamado trifecta). O Docker encapsula binários e arquivos de configuração dentro de um contêiner.

No momento da redação deste artigo, o docker ainda é instável e não deve ser usado na produção. É provável que muitas APIs sejam alteradas até o lançamento da versão 1.0.

Mesmo quando o docker se tornar estável, será uma grande tarefa converter todos os processos e arquivos de configuração em contêineres do docker.

O fantoche, por outro lado, é um produto estável e vem com um ecossistema inteiro de ferramentas (heira, mcollective, facter, razor). Essas ferramentas podem ser implementadas rapidamente e sem preocupações de quebras.

Eu sugeriria os seguintes recursos.

Um vídeo de como gerenciar pilhas de aplicativos com o fantoche
https://www.youtube.com/watch?v=KSo_mcJxFIA

Um podcast sobre como o estivador e o fantoche podem trabalhar juntos
http://devopscafe.org/show/2014/1/23/devops-cafe-episode-46.html

Um artigo de blog de marionetes sobre como integrar-se ao docker
http://puppetlabs.com/blog/building-puppet-based-applications-inside-docker

Outro artigo de blog sobre fantoches e estivadores coexistindo
http://puppetlabs.com/blog/can-containers-and-configuration-management-co-exist

Um módulo fantoche para interagir com o docker
http://docs.docker.io/use/puppet/

Uma pequena correção na terminologia dos devops. Devops é mais uma metodologia de desenvolvimento de software em que desenvolvedores e operações cooperam, do que qualquer ferramenta específica.

Atualizar

Atualmente minha empresa usa fantoches e estivadores. Aqui está uma ótima apresentação dada no puppet conf 2014 sobre por que você usaria puppet vs docker. Conduzido por James Turnbull, ex-empregador de fantoches e autor do livro docker.

https://puppetlabs.com/presentations/using-docker-puppet-james-turnbull-kickstarter

Também é um bom tutorial em vídeo sobre docker, fornecido por sysadmincasts.com

https://sysadmincasts.com/episodes/31-introduction-to-docker

Profissionais do Docker:

  • Pode acelerar a instância rapidamente
  • Mais fácil de aprender do que o fantoche
  • Fácil de fazer 0 tempo de inatividade

Contras do Docker:

  • Os contêineres têm limite de 10 GB ao usar o back-end do devicemapper
  • Pequenas alterações na configuração levam muito tempo para reconstruir o contêiner
  • Custa dinheiro para usar um registro do docker como hub.docker.com, quay.io (o registro do docker auto-hospedado é extremamente problemático e não possui interface gráfica)
  • Nenhum sistema de inicialização adequado. Alguns aplicativos não são bons.
  • Nenhum controle refinado sobre a rede
  • Os aplicativos que requerem subshells (olhando para você RVM + ruby) são muito complicados para começar a funcionar corretamente
  • Não é possível gerenciar hosts do Windows, nenhum SLES ou outros sistemas operacionais menos populares
  • Atualmente, a orquestração dos estivadores é muito jovem.
  • No momento, não é possível definir seu /etc/resolv.conf no tempo de compilação
  • Vários bugs que precisamos montar / etc / localtime e / dev / urandom para mapear para os hosts localtime e diretórios urandom.
  • O desempenho não é tão rápido (apesar de todas as alegações de que o docker deve ter 99% da velocidade do bare metal, às vezes é 30% mais lento que outras máquinas).
  • Os contêineres pequenos ainda têm centenas de megabytes de sobrecarga. Nossos contêineres são todos de vários gigabytes.

Profissionais de marionetes:

  • Fácil de escalar
  • Funciona com servidores existentes (windows, linux, sles)
  • Rápido para fazer pequenas alterações
  • Comunidade forte de outros usuários e módulos de bonecos
  • API padronizada para instalar pacotes em todas as plataformas

Contras fantoches:

  • Grandes infra-estruturas ficam muito complexas
  • Dependências de módulo condicionais criam código spagetti
  • Mais peso pesado

Atualmente, usamos fantoches para provisionar nossos contêineres. Os contêineres do docker são usados ​​para construções de jenkins e são destruídos após cada construção. Funciona bem e nos oferece um ambiente consistente. Isso significa que precisamos escrever o código apenas uma vez e depois reconstruir as máquinas ubuntu, sles e centos. A reconstrução dos contêineres leva cerca de 15 a 30 minutos e ainda é um processo manual. O Docker é ótimo para ativar vm de teste rápido,

Em resumo, o fantoche é ótimo no gerenciamento de sua infraestrutura existente. O Docker é bom se você tiver um greenfield 100% linux com uma pilha de tecnologia que pode ser incluída em pequenas instâncias efêmeras. Enquanto algumas das funcionalidades se sobrepõem, elas não são mutuamente exclusivas.

spuder
fonte
5
Achei essa resposta subjetiva e especulativa. Eu não acredito que ele realmente responda por que alguém pode continuar usando o Puppet ao lado / em conjunto com o Docker, quando o Docker parece, em um nível alto, ser uma ferramenta mais simples para o mesmo objetivo.
8bitjunkie
1
@ 7SpecialGems Atualizado com mais fatos.
Spuder
1
seria ótimo para ver uma revisão desta resposta no mundo de 2015 e como as coisas mudaram
Oliver Bayes-Shelton
A pergunta / resposta ainda é relativa em 2019? O que poderia ter mudado?
Dr. Abu Taher
2

O Docker ajuda a provisionar e configurar inicialmente contêineres, mas executa comandos únicos na inicialização do contêiner.

O Puppet é mais forte quando você o executa como um daemon, assegura que sua configuração permaneça conforme você o especifica. Por exemplo, se o serviço parar de executar, ele será iniciado novamente.

Uma das melhores coisas sobre a configuração de bonecos (projetada corretamente) é que eles são idempotentes ; é suposto descrever o estado em que você deseja estar e não necessariamente as etapas para chegar lá.

Também permite abstrair e parametrizar configurações e exportar parâmetros criados em um servidor ou contêiner e usá-los em outro (por exemplo, coletando uma lista de nomes de host de nós para um aplicativo de monitoramento).

Eu diria que eles definitivamente servem a propósitos diferentes, mas relacionados. Atualmente, estou procurando usar manifestos fantoches existentes para começar a configurar contêineres para que os ambientes de desenvolvimento sejam mais parecidos com os ambientes de produção.

xtrade
fonte