As duas maneiras de distribuir manifestos são usando um mestre de marionetes ou em uma configuração sem mestre. Eles não são mutuamente exclusivos e usamos ambas as abordagens no meu trabalho.
Magistral
Com a configuração magistral, você tem um mestre de marionetes que contém uma coleção de todos os módulos da sua infraestrutura. Os nós então relatam (a cada 30 minutos por padrão) e solicitam um catálogo de qual software deve ser instalado.
Este modelo é mais comum. Se sua empresa tiver dezenas ou centenas de servidores, você poderá definir facilmente a configuração uma vez e ela será enviada magicamente para todos os nós.
Vantagens:
- Gerenciamento de configuração distribuída simples e escalável
- Reverte automaticamente alterações acidentais a cada execução de fantoche
- O painel de fantoches fornece feedback em tempo real e relatórios
Desvantagens:
- O agente fantoche não é dimensionado para dezenas de milhares de nós facilmente. (Grandes empresas como o PayPal usam o cron para seus relatórios)
- Ao adicionar ou remover nós com frequência, torna-se tedioso gerenciar os certificados.
Masterless
Masterless ainda usa as vantagens do fantoche, mas faz isso manualmente chamando módulos. Basicamente, basta executar puppet apply foo --modulepath=bar
no seu servidor. Eu escrevi uma explicação muito mais detalhada deste modelo aqui: link
Vantagens:
- Forneça facilmente laptops e estações de trabalho que não precisam ser gerenciados centralmente
- Não há necessidade de usar laptops de cowboys que frequentemente saem e entram na infraestrutura
- Módulos fantoches sem masterização são tão simples quanto escrever scripts bash, porém eles são mais fáceis de manter, facilmente feitos para serem multiplataformas.
- Ainda dá a você a vantagem da camada de abstração que o fantoche fornece (tente escrever um script bash para instalar pacotes com nomes diferentes. Por exemplo, openssl-devel em todas as máquinas CentOS, mas openssl-dev em máquinas Ubuntu, yuck).
Desvantagens:
- Mais difícil de distribuir para nós, precisa de polpa, git ou outra técnica de distribuição
Eu recomendo que você dê uma olhada nos seguintes recursos