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.