Quais são os benefícios de executar o chef-server em vez do chef-solo?

33

Estou procurando soluções de implantação automatizada para minha equipe e tenho jogado com o Chef nos últimos dias. Consegui obter um aplicativo da Web simples em execução a partir de uma VM Red Hat base usando chef-solo.

Nosso objetivo final é usar o Chef (ou outro sistema) para implantar automaticamente topologias de aplicativos na nuvem enquanto executamos as compilações. Nosso processo seria basicamente executado assim:

  1. Nossos códigos de aplicativos da web, dependências e livros de receitas do chef são armazenados no SCM
  2. Uma compilação é executada e cria um único pacote para aquisição e teste de imagens.
  3. O mecanismo de construção implementa novas imagens na nuvem que executam um cliente chef para instalar os pacotes.
  4. As imagens adquirem os livros de receitas do SCM ou do servidor Chef e instalam tudo para começar a funcionar

Quais são os benefícios e / ou casos de uso para a execução de um Chef Server?

Há algum benefício importante para um Chef Server manter e adquirir os livros de receitas do SCM vs. usar o chef-solo e ter um script que puxe os livros de receitas do SCM?

linusthe3rd
fonte

Respostas:

67

Vou orientar esta resposta como se a pergunta fosse "quais são as vantagens do chef-solo", porque é a melhor maneira que conheço para cobrir as diferenças entre as abordagens.

Minha recomendação resumida está alinhada com outras: use um chef-server se precisar gerenciar um ambiente virtualizado e dinâmico em que você adicionará e removerá os nós com frequência. Um servidor chef também é um bom CMDB , se você precisar. Use chef-solo se você tiver um ambiente menos dinâmico, onde os nós não mudarão com muita frequência, mas os papéis e as receitas mudarão. O tamanho e a complexidade do seu ambiente são mais ou menos irrelevantes. Ambas as abordagens escalam muito bem.

Se você implementar o chef-solo, use um cronjob com rsync, 'git pull' ou algum outro mecanismo de transferência de arquivo idempotente para manter uma cópia completa do repositório do chef em cada nó. O cronjob deve ser facilmente configurável para (a) não ser executado e (b) ser executado, mas sem sincronizar o repositório local. Inclua um nó / diretório no repositório do chef com um arquivo json para cada nó. Seu cronjob pode ser tão sofisticado quanto você deseja em termos de identificação do arquivo de nó correto (embora eu recomende simplesmente $ (hostname -s) .json. Você também pode criar uma conta opscode e configurar um cliente com chef hospedado, se nenhuma outra razão senão poder usar a faca para baixar livros de receitas da comunidade e criar esqueletos.

Existem várias vantagens nessa abordagem, além do óbvio "não ter que administrar um servidor". Seu controle de origem será o árbitro final de todas as alterações na configuração, o repositório incluirá todos os nós e listas de execução, e cada servidor totalmente independente facilita alguns cenários de teste convenientes.

O Chef-server introduz um furo no qual você usa o "upload de faca" para atualizar um livro de receitas e deve corrigir esse buraco sozinho (como em um gancho pós-confirmação) ou corre o risco de que as alterações no site sejam substituídas silenciosamente por alguém que "faça o upload da faca" s uma receita obsoleta do repositório local desatualizado em seu laptop. É menos provável que isso aconteça com o chef-solo, pois todas as alterações serão sincronizadas com os servidores diretamente do repositório principal. A questão aqui é disciplina e número de colaboradores. Se você é um desenvolvedor solo ou uma equipe muito pequena, o upload de livros de receitas por meio da API não é muito arriscado. Em uma equipe maior, pode ser se você não colocar bons controles no lugar.

Além disso, com o chef-solo, você pode armazenar todas as funções, atributos personalizados e listas de execução dos nós como arquivos node.json no repositório principal do chef. Com o chef-server, funções e listas de execução são modificadas dinamicamente usando a API. Com chef-solo, você pode rastrear essas informações no controle de revisão. É aqui que o conflito entre ambientes estáticos e dinâmicos pode ser visto com clareza. Se sua lista de nós (não importa quanto tempo seja) não muda com frequência, é muito útil ter esses dados no controle de revisão. Por outro lado, se você está gerando novos nós frequentemente e destruindo os antigos (nunca mais ver seu nome de host ou fqdn novamente), manter tudo no controle de revisão é apenas um aborrecimento desnecessário, e ter uma API para fazer alterações é muito conveniente. O Chef-server também possui um conjunto de recursos voltados para o gerenciamento de ambientes dinâmicos de nuvem, como a opção de nome em "inicialização de faca", que permite substituir o fqdn como a maneira padrão de identificar um nó. Porém, em um ambiente estático, esses recursos têm um valor limitado, especialmente se comparados a ter funções e listas de execução no controle de revisão com todo o resto.

Finalmente, os ambientes de teste de receita podem ser configurados em tempo real para quase nenhum trabalho extra. Você pode desativar os cronjobs em execução em um servidor e fazer alterações diretamente em seu repositório local. Você pode testar as alterações executando chef-solo e verá exatamente como o servidor se configurará na produção. Depois que tudo estiver testado, você poderá fazer o check-in das alterações e reativar os cronjobs locais. Ao escrever receitas, no entanto, você não seria capaz de usar a API "Search", o que significa que se você quiser escrever receitas dinâmicas (por exemplo, loadbalancers), precisará contornar essa limitação, reunindo os dados dos arquivos json em seus nós / diretório, o que provavelmente será menos conveniente e carecerá de alguns dos dados disponíveis no CMDB completo. Mais uma vez, ambientes mais dinâmicos favorecerão a abordagem orientada a banco de dados, ambientes menos dinâmicos ficarão bem com os arquivos json no disco local. Em um ambiente de servidor em que uma execução de chef deve fazer chamadas de API para um banco de dados central, você dependerá do gerenciamento de todos os ambientes de teste nesse banco de dados.

O último também pode ser usado em emergências. Se você estiver solucionando um problema crítico nos servidores de produção e resolvê-lo com uma alteração na configuração, poderá fazer a alteração imediatamente no repositório do servidor e enviá-la para o mestre.

Essas são as principais vantagens do chef-solo. Existem alguns outros, como não ter que administrar um servidor ou pagar pelo chef hospedado, mas essas são preocupações relativamente menores.

Para resumir: Se você é dinâmico e altamente virtualizado, o chef-server fornece vários recursos excelentes (abordados em outros lugares) e a maioria das vantagens do chef-solo será menos perceptível. No entanto, existem algumas vantagens definidas, muitas vezes não mencionadas, do chef-solo, especialmente em ambientes mais tradicionais. Observe que a implantação na nuvem não significa necessariamente que você tem um ambiente dinâmico. Se você não pode, por exemplo, adicionar mais nós ao seu sistema sem liberar uma nova versão do seu software, provavelmente não é dinâmico. Finalmente, de uma perspectiva de alto nível, um CMDB pode ser útil para várias coisas relacionadas tangencialmente à administração e configuração do sistema, como contabilidade e compartilhamento de informações entre equipes. Usar chef-server pode valer a pena apenas por esse recurso.

Goladus
fonte
Como você armazenaria / distribuiria dados confidenciais (por exemplo: chaves privadas / senhas) com o chef-solo? Como faço para controlá-lo com controle de revisão sem armazená-lo como texto sem formatação?
Limbo Peng
@LimboPeng Você pode armazenar sacos de dados criptografados no repositório do Chef. Você precisa armazenar a chave de criptografia externamente.
Willie Wheeler
27

Divulgação: Eu trabalho para o Opscode.

O principal benefício do Chef Server sobre Solo é a capacidade de usar a pesquisa com sua infraestrutura. O exemplo clássico é um balanceador de carga com servidores da web. O balanceador de carga pode atualizar automaticamente sua configuração à medida que os servidores da Web são adicionados e removidos da infraestrutura, simplesmente pesquisando-os. Solo é apenas isso, máquinas únicas, enquanto o Chef Server oferece a capacidade de consultar coisas como "todas as máquinas com mais de 4 GB de RAM" ou "o mestre do banco de dados".

O Chef Server também oferece a capacidade de gerenciar sua infraestrutura sem copiar tarballs, visualizar sua infraestrutura com o console de gerenciamento e gerenciar quais máquinas estão executando quais versões dos livros de receitas com Ambientes. Existem outros benefícios, mas esses são os que estão em cima da minha cabeça. Se você quiser experimentar o Chef Server sem instalá-lo, basta se inscrever em uma conta Opscode Hosted Chef, os 5 primeiros nós são gratuitos.

mray
fonte
1
Obrigado mray, essa informação ajuda a um TON. Você sabe como alguém adotaria as filosofias do DevOps ao usar o servidor Chef? O que quero dizer com isso é ter todos os nossos livros de receitas morando no SCM. Existe uma maneira fácil de fazer com que o servidor Chef receba livros de receitas atualizados à medida que entregamos um novo código?
linusthe3rd
2
@ strife25 Você definitivamente deve ter seus livros de receitas em um sistema de controle de versão. Se você não gosta de um, o Opscode recomenda o Git, pois é fácil trabalhar com ramificações e rochas para equipes distribuídas. Você pode escrever um gancho pós-confirmação que carrega livros de receitas no servidor Chef. Você não clona apenas os livros de receitas no servidor Chef porque os carrega por meio de uma API, e isso é muito específico por design.
precisa saber é o seguinte
1

O chef-server gerencia livros de receitas e dados de configuração para seus nós.

Você adiciona livros de receitas ao chef-servidor usando a ferramenta faca e, em seguida, fornece a cada nó uma lista de receitas para que eles obtenham os livros de que precisam quando o nó se configura usando o cliente-chef. Como o chef-client é executado em segundo plano, seus nós verificarão periodicamente se há livros de receitas atualizados em seu chef-server.

O chef-server também mantém seus dados e variáveis ​​de configuração, para que você possa alterar as configurações dos seus nós automaticamente. Isso é bom para configurações mais dinâmicas que não devem ou não podem ser codificadas em suas receitas.

Andrew Vit
fonte