Por que usar Chef / Puppet sobre scripts de shell?

81

Novo nas ferramentas Puppet e Chef. Parece que o trabalho que eles estão fazendo pode ser feito com scripts de shell. Talvez tenha sido feito em scripts de shell até que eles surgissem.

Eu concordo que eles são mais legíveis. Mas, existem outras vantagens sobre os scripts de shell, além de serem legíveis?

em repouso
fonte

Respostas:

56

Uma linguagem específica de domínio faz uma grande diferença na quantidade de código que você escreve. Por exemplo, você pode argumentar que não há muita diferença entre:

chmod 640 /my/file

e

file { "/my/file":
    mode => 640,
}

mas há muita diferença entre estes:

FILE=/my/file
chmod 640 $FILE
chown foo $FILE
chgrp bar $FILE
wget -O $FILE "http://my.puppet.server/dist/$FILE"
     # where the URL contains "Hello world"

e

file { "/my/file":
    mode => 640,
    owner => foo,
    group => bar,
    content => "Hello world",
}

O que acontece se o wget falhar? Como seu script lidará com isso? E o que acontece se houver algo depois disso em seu script que exija que $ FILE esteja lá com o conteúdo correto?

Você pode argumentar que é possível simplesmente inserir echo "Hello world" > $FILEo script, exceto que, no primeiro exemplo, o script deve ser executado no cliente, enquanto o puppet compila tudo isso no servidor. Portanto, se você alterar o conteúdo, precisará alterá-lo apenas no servidor e para todos os sistemas que desejar. E o fantoche lida com dependências e transfere problemas automaticamente para você.

Simplesmente não há comparação - as ferramentas de gerenciamento de configuração adequadas economizam tempo e complexidade. Quanto mais você tenta fazer, mais scripts de shell parecem inadequados e mais esforço você economizará ao fazê-lo com o fantoche.

Paul Gear
fonte
9
@ Paul Gear, é uma simplificação excessiva dizer que as ferramentas de gerenciamento de configuração são o caminho a longo prazo. Por exemplo, usando a AWS, um script de shell pode criar o servidor do zero, executar alguns testes e, depois de garantir que a instalação da AWS esteja correta, faça uma imagem. Em seguida, você pode implantar essa imagem em um ambiente de pré-visualização ou armazenamento temporário para testes adicionais, depois de validar a imagem para seus propósitos e depois avançar para a produção. As ferramentas de gerenciamento de configuração não ajudam em nada neste cenário.
Derek Litz 12/12
Agora, se você deseja gerenciar centenas de servidores dedicados que as pessoas estão usando diariamente (e você tem pouco controle sobre o que eles fazem, por engano ou não), é aí que as ferramentas de gerenciamento de configuração devem ser usadas.
Derek Litz 12/12
6
Este não é um exemplo muito convincente. Eu poderia começar com o wget e depois não acabaria em um estado estranho. O arquivo é como uma transação que será revertida se alguma das etapas não for bem-sucedida?
PSKocik 16/05
33

Esta será uma opinião impopular, mas os sistemas de gerenciamento de configuração não são necessariamente melhores. Às vezes simples é realmente o melhor.

Há uma curva de aprendizado definida e uma sobrecarga administrativa associada ao sistema de configuração que você escolher. Afinal, você está introduzindo uma dependência. Como em qualquer automação, você também deve ter cuidado para que a segurança seja mantida nas configurações implementadas.

Eu só tive algumas instâncias em que implantamos o gerenciamento de configuração e ele ficou parado. Era sempre quando havia um grande número de sistemas com configuração repetitiva e a necessidade de executar implantações configuráveis ​​de cortadores de biscoito.

kenchilada
fonte
10
Quando o custo de gerenciamento do ambiente é tão alto, o gerenciamento da automação é realmente mais barato. Se é mais simples criar scripts de alterações gerenciadas no Git ou configurar um multiplexador ssh, fazemos isso. O mais importante para mim é monitorar os sistemas e verificar se tudo está funcionando conforme o esperado. Desde que eu seja alertado quando algo estiver configurado incorretamente, não será tão importante como ele será configurado.
Kenchilada
10
@ewwhite "quando você decide para automatizar vs. não" xkcd.com/1205
MikeyB
3
Ferramentas mais modernas, como o Ansible, têm uma sobrecarga de implantação / gerenciamento consideravelmente menor do que o Chef ou o Puppet, exigindo pouca ou nenhuma dependência (o Ansible em particular é sem agente). Isso realmente reduz o nível de adoção.
GomoX 5/11
2
@ewwhite Você automatiza quando deseja obter produtividade pessoal. Você aprende automatizando, não aprende executando tarefas mundanas. Aprendizagem = aumento de produtividade e melhoria iterativa. A automação se combina com isso para produzir mais pontos positivos. É uma bola de neve positiva em vez de negativa. Progresso técnico versus dívida técnica.
Derek Litz
2
@ABB Não, isso não está implícito. Eu nem mencionei scripts de shell, mencionei a automação como uma prática geral. Você pode automatizar as coisas com scripts de shell e aprender a abstração de scripts em vez de fazer as coisas manualmente, o que não apenas poupará o tempo de executar essa tarefa novamente, mas também evitará erros. Além disso, você deve conseguir escrever seu próximo script um pouco melhor do que o último. Uma bola de neve positiva ... No entanto, se você é especialista em escrever scripts e não está escrevendo algo que irá executar novamente, isso não ajuda a aprender ou a economizar tempo de forma alguma.
Derek Litz 25/09
23

Você respondeu sua própria pergunta ...

A automação está se tornando mais escalável e formalizada . Atualmente, Puppet e Chef são considerados padrões (consulte os anúncios de emprego ).

Scripts shell-juntos calçada têm o seu lugar, mas eles são não escalável no contexto do movimento DevOps. A legibilidade faz parte disso.

ewwhite
fonte
7
Os scripts shell são de alguma forma menos formalizados? Citar anúncios de emprego faz um argumento convincente? E um devops é uma pena, pois ele é subexplorado como desenvolvedor. O link não diz nada sobre escalabilidade. A alegação de que os scripts de shell não são escaláveis? Eu acho que Puppet é interessante, mas não necessariamente pelas razões da resposta.
Acumenus
Os anúncios de emprego refletem o mercado real de habilidades específicas. Sim, o uso do gerenciamento de configuração para a finalidade pretendida é mais escalável, mais robusto e mais fácil de documentar do que os scripts de shell. Eu já estive em muitos ambientes, e a maioria dos scripts que vejo não são construídos de uma maneira que seria considerada "qualidade de produção" e organizados para lidar com exceções. Veja a resposta aceita para entender o porquê.
ewwhite
1
"E um devops é uma pena, pois ele é subexplorado como desenvolvedor". Isso simplesmente não é verdade. O DevOps é uma especialização de desenvolvimento, assim como o Desenvolvimento Web. Os padrões e práticas de desenvolvimento de software ainda se aplicam. Você deve ler sobre o DevOps.
Chaim Eliyah
13

O Chef facilita muito o gerenciamento e a versão da configuração de uma infraestrutura complexa, especialmente em qualquer tipo de ambiente em nuvem, em comparação com a necessidade de ftp ou scp manualmente de vários scripts de shell organizados de maneira não padronizada. Dependendo de quantas dependências você precisa gerenciar, o tamanho dessa vitória pode variar bastante, tornando a decisão de mudar para uma solução CM uma solução não óbvia para muitas pessoas.

O benefício real (muitas vezes desconhecido) do Chef é a idempotência . Ser capaz de ter certeza do estado de um recurso, independentemente da combinação de receitas executadas com interesses sobrepostos, é um grande benefício sobre a configuração do script de shell. Se você possui scripts de shell para configuração agora, pergunte-se quantos deles podem ser executados várias vezes sem consequências indesejadas / indesejadas?

Uma solução CM adequada ajuda a garantir o sucesso em escala, simplificando a automação de plataforma cruzada e a colaboração da equipe. Embora seja possível realizar tudo isso com um grupo de scripts de shell bem organizado, com manutenção adequada e com versão; você precisa se perguntar "por que". O Chef / Puppet e tecnologias similares surgiram porque um grupo de SysOps talentosos estava cansado de ter que resolver esses mesmos problemas repetidamente e se propôs a nos dar uma opção melhor.

Peças-chave:

  • Idempotência
  • Gerenciamento de Facilidade de Dependência (versionamento)
  • Organização padronizada (aceita no nível do setor)
  • Abstração para separar tarefas de configuração do servidor dos detalhes no nível do sistema
  • Capacidade de alavancar o conhecimento da comunidade (que garante a adoção de todos os princípios acima)
Matt Surabian
fonte
3
Idempotência é dificilmente impossível com ss. As dependências são bem gerenciadas pelo yum / apt, etc. A aceitação é irrelevante. Existe conhecimento comunitário para ss. Aceito, no entanto, que não ter que copiar vários scripts e também configurar sistemas centralmente são úteis. Ouvi que o fantoche exige um agente do lado do cliente.
Acumenus
10

Ferramentas modernas de gerenciamento de configuração, como Puppet e Chef, permitem definir o estado de um sistema em vez de se preocupar com as atividades necessárias para obter um servidor configurado.

Por exemplo, seu comando chmod assume que o arquivo existe, que o usuário que possui o arquivo existe, que os diretórios foram criados e assim por diante. Portanto, seu script deve considerar todos esses pré-requisitos.

As ferramentas de gerenciamento de configuração baseadas em estado são mais simples: você apenas se importa que o arquivo tenha as permissões corretas. Como isso é alcançado é o problema da ferramenta.

Jon Jaroker
fonte
1
Na verdade, meu chmodnão supõe que o arquivo exista porque o arquivo foi criado ou testado quanto à existência pelo script.
Acumenus
9

Se os servidores são descartáveis ​​para você ou você tem motivos para resistir mais de um par de cada vez, um sistema CM completo atenderá melhor às suas necessidades do que uma série de scripts de shell.

Se suas necessidades de compilação são modestas (ou gostam de criar artesanalmente servidores orgânicos de livre comércio orgânicos), mantenha-o simples.

Pessoalmente, depois de usar extensivamente o Chef em um show passado, tentei 'simplificar' esse show, mas realmente senti falta das primitivas, abstrações e poder que o Chef fornecia. Mesmo que você chegue a uma situação em que você pode obter o que precisa de alguns comandos do shell, você pode simplesmente executá-los com um bloco 'command', inserindo os comandos do shell exatamente como você os escreveria no shell.

Com isso dito, você pode executar o Chef sem um servidor (chef-solo), e tenho certeza de que o Puppet tem um análogo, onde você ainda pode aproveitar os livros de receitas e receitas de outras pessoas sem executar um servidor central.

Outro benefício é a comunidade: há muitas pessoas (muitas das quais serão mais inteligentes e / ou mais experientes que você). Pessoalmente, adoro quando outra pessoa faz o meu trabalho por mim, muitas vezes mais extensivamente do que eu faria.

gWaldo
fonte
1

Criei uma estrutura de automação de servidor baseada em script de shell: https://github.com/myplaceonline/posixcube

Tenho certeza de que não sou o primeiro a fazer esse tipo de projeto, mas não consegui encontrar algo parecido para atender às minhas necessidades, então achei que outras pessoas poderiam achar isso útil. Eu só tinha experiência com o Chef, mas quando comecei a olhar para o Ansible e outros, queria dar uma chance aos scripts de shell e gosto do resultado até agora.

Kevin
fonte