Melhores Práticas / Perguntas do Chef

48

Eu uso e amo Puppet. Mudei-me para uma nova empresa e eles estão adotando o Chef. Então, eu estou tentando aprender Chef, mas estou tendo dificuldade em juntar tudo porque ainda penso em Puppet =)

Estas são as minhas perguntas:

  • É melhor configurar funções no Ruby DSL, JSON ou no console de gerenciamento? Por que existem várias maneiras de fazer a mesma coisa?
  • Você pode organizar livros de culinária em subdiretórios? por exemplo: temos um software personalizado para o qual eu gostaria de escrever um livro de receitas e colá-lo em: chef-repo / cookbooks / ourcompanystuff / costumesoftwarecookbook, seria uma boa prática?
  • Crio um livro de receitas para cada tipo de função que especifica o que faz? Esses livros de receitas incluem outros livros de receitas (ou seja, o livro de receitas da minha função de servidor da web inclui o livro de receitas do apache)? Não tenho certeza de como são tratadas as interdependências e a herança do livro de receitas.
  • Existe algo como o classificador de nó externo do Puppet para que os nós determinem automaticamente suas funções?
  • Parece que você pode configurar as coisas com faca ou no console de gerenciamento ou editar arquivos JSON? Isso é super confuso para mim, porque há tantas maneiras de fazer as coisas, é paralisante! Existe um motivo para usar um ou outro? Vindo de fantoches, parece que seria fácil configurar algo acidentalmente com essas ferramentas (por exemplo, deixar algo de fora)
  • Como posso provisionar nós automaticamente com o Chef no meu cluster de desenvolvimento? Com o Puppet, eu inicio uma VM que se conecta ao puppermaster e inicia uma execução de fantoche e se configura (a função é determinada pelo classificador de nó externo). Como faço isso com o Chef? Instale o chef com arquivos pem / rb que o vinculam a um servidor chef, informe manualmente o nó de suas funções com faca ou edite-o na interface de gerenciamento e inicie uma corrida chef-cliente para se configurar?

Concluí os tutoriais de introdução e vejo que eles têm tutoriais do EC2, mas nunca usei o EC2, por isso é difícil seguir. Neste ponto, hospedei o Chef em execução e estou começando a brincar com a configuração de um único nó. Para onde eu vou daqui? Preciso começar a olhar para os livros de receitas públicos?

Os documentos do Opscode estão ok, mas não tão bons quanto os do Puppet. Existem outros bons recursos de Chef que possam estar faltando em minhas pesquisas?

rizen
fonte
5
Muitas perguntas em um post. Considere dividir cada um em seu próprio. É melhor para a comunidade como um todo e também oferece respostas melhores e mais detalhadas.
Wesley

Respostas:

84

Editar Esta pergunta e resposta têm anos. As melhores práticas definitivas são ensinadas por meio dos módulos de treinamento individualizado do Learn Chef Rally, produzidos pela Chef Software, Inc. A maior parte da resposta original está abaixo.

Nesta resposta, "Chef" ou "chef-client" geralmente se refere ao Chef Infra, o produto. Opscode renomeado para Chef Software, Inc em 2013 . Em abril de 2019, o Chef abriu o código-fonte para todos os seus produtos, além de criar nomes de marcas consistentes.

Não está claro se é melhor configurar funções no ruby ​​DSL, JSON ou no console de gerenciamento? Por que existem várias maneiras de fazer a mesma coisa?

Atualização de 2019 : os arquivos de políticas são o melhor fluxo de trabalho a ser usado. As funções são consideradas uma prática inferior e a Chef Software, Inc. recomenda a migração para os Policyfiles.

Existem várias maneiras de fazer a mesma coisa, porque as pessoas têm fluxos de trabalho diferentes. Você escolhe o fluxo de trabalho melhor para o seu ambiente. Deixe-me explicar quais são as diferenças para que você possa tomar uma decisão informada.

O Ruby DSL for Roles existe para facilitar a gravação de funções sem conhecer a sintaxe do JSON. É uma maneira simples de começar com as Funções. Depois de fazer as alterações, você as carrega no Chef Server com faca.

knife role from file myrole.rb

Isso converte a função em JSON e a armazena no servidor. Se você tem um ambiente que aplica o Repositório do Chef, onde seus papéis são a fonte da verdade, isso funciona muito bem.

JSON é o que o Chef Server armazena, então você também edita JSON diretamente no console de gerenciamento. Requer mais campos do que o DSL Ruby para que o Knife o reconheça adequadamente. Esses detalhes estão ocultos até certo ponto através da interface do usuário da web.

A desvantagem de usar o console do webui / gerenciamento para editar funções é que elas não estão no seu sistema de controle de versão local, a menos que você faça o download delas do servidor. Você pode fazer isso com uma faca:

knife role show myrole -Fj

O -Fjinstrutor diz para "exibir no formato JSON". Você pode redirecionar a saída para um arquivo .json, se quiser.

Anos atrás, atualização : Existem comandos de faca adicionais para trabalhar com os arquivos no repositório do chef local. Atualmente, esses comandos suportam apenas arquivos no formato JSON. É aberta uma RFC da comunidade que abordará a adição de suporte ao DSL Ruby para esses plugins. Aqui está um breve resumo do fluxo de trabalho.

Verifique as diferenças de conteúdo entre o servidor e o arquivo local.

knife diff roles/myrole.json

Faça o upload de um arquivo de função formatado em JSON. O roles/caminho é obrigatório. Isso é mapeado para o mesmo ponto de extremidade da API no servidor.

knife upload roles/myrole.json

Faça o download do conteúdo do servidor substituindo o conteúdo do arquivo no repositório.

knife download roles/myrole.json

Esses comandos são originários knife-essentialsdo pacote do cliente chef.

Você pode organizar livros de culinária em subdiretórios? por exemplo, temos um software personalizado para o qual gostaria de escrever um livro de receitas e colá-lo em: chef-repo / cookbooks / ourcompanystuff / costumesoftwarecookbook, seria uma boa prática?

Não. O Knife tem uma expectativa de onde os livros de receitas devem residir, pois usa uma API para fazer upload de livros de receitas no servidor. Isso é definido no knife.rbcom cookbook_path. Nas versões mais antigas do Chef Infra, você poderia especificar uma variedade de caminhos para os livros de receitas, mas isso está sendo preterido, porque requer mais manutenção e confunde os usuários.

Por convenção, nomeamos livros de receitas específicos do cliente ou do site, com o nome prefixado no diretório do livro de receitas. Para o seu exemplo, seria:

chef-repo/cookbooks/ourcompany_customsoftware

Pode haver vários livros de receitas diferentes para "nossa empresa", dependendo do que você está fazendo.

Referência adicional:

Crio um livro de receitas para cada tipo de função que especifica o que faz? Eu tenho esses livros de receitas que incluem outros livros de receitas (ou seja, o livro de receitas da minha função de servidor da Web inclui o livro de receitas do apache). Não tenho certeza de como são tratadas as interdependências e a herança do livro de receitas.

Não há relacionamento ou dependência direta entre funções e livros de receitas.

As funções têm uma lista de execução, que especifica as receitas e outras funções que devem ser aplicadas a qualquer nó que tenha essa função. Os nós têm uma lista de execução que pode conter funções ou receitas. Quando o Chef for executado no nó, ele expandirá a lista de execuções para todas as funções e receitas incluídas e fará o download dos livros de receitas necessários. Em uma lista de execução de nó:

recipe[apache2]

O Chef fará o download do apache2livro de receitas do nó para que ele possa aplicar esta receita.

Você pode ter um livro de receitas específico para uma função em sua infraestrutura. Mais comumente, você terá livros de receitas para configurar certos tipos de serviços como apache2, mysql, redis, haproxy, etc. Em seguida, você os colocará nas funções apropriadas. Se você tem coisas específicas de aplicativos personalizados que precisam acontecer para desempenhar uma função, você pode escrever isso em um livro de receitas personalizado (como referenciei acima).

Referência adicional:

Existe algo como classificador de nó externo de fantoches para que os nós determinem automaticamente suas funções?

"Sim." O Chef Infra Server faz o armazenamento de dados do nó (em JSON) automaticamente, e o servidor também indexa automaticamente todos os dados do nó para pesquisa.

Referência adicional:

Parece que você pode configurar as coisas com faca ou no console de gerenciamento ou editar arquivos JSON? Isso é super confuso para mim, porque há tantas maneiras de fazer as coisas, é paralisante! Existe um motivo para usar um ou outro?

O Chef Infra Server possui uma API RESTful que envia e recebe respostas JSON. O Knife e o console de gerenciamento são interfaces de usuário para interagir com a API do ponto de vista da administração.

Você pode usar a ferramenta que mais lhe agrada, embora o console de gerenciamento não tenha tantos recursos quanto o Knife. A maioria das pessoas que usam o Chef Infra prefere a interface da linha de comando pelo poder e flexibilidade que ele fornece, mesmo as pessoas que usam o Chef Infra no Windows. Além disso, knifeé uma ferramenta baseada em plugins que você pode criar novos plugins para interagir com o Chef Infra Server ou com outras partes da sua infra-estrutura.

Chef Infra é um conjunto de bibliotecas, primitivas e uma API. Ele oferece a flexibilidade de criar o sistema de gerenciamento de configuração que funciona melhor para sua infraestrutura.

Leitura adicional:

Como posso provisionar nós automaticamente com o chef no meu cluster de desenvolvimento? Com o fantoche, inicio uma VM que se conecta ao puppermatser e inicia uma execução de fantoche e se configura (a função é determinada pelo classificador de nó externo). Como faço isso com o chef? - Instale o chef com arquivos pem / rb que o vinculam a um servidor chef, informe manualmente o nó de suas funções com faca ou edite-o na interface de gerenciamento e inicie uma corrida chef-cliente para se configurar?

Você deseja usar o plug-in de inicialização da faca. Este é um plug-in embutido que vem com uma faca. Você o invoca assim:

knife bootstrap 10.1.1.112 -x root -i ~/.ssh/root_id_rsa -r 'role[webserver]'

Isso vai:

  • SSH para o sistema de destino (10.1.1.112) como o rootusuário usando uma chave SSH (você pode ssh como outro usuário e depois usá-lo --sudo).
  • Instale o Ruby
  • Instalar Chef
  • Crie o arquivo de configuração do Chef para o Chef Server, lendo a configuração da faca (.chef / knife.rb).
  • Copie a chave privada RSA de "validação", que o nó usará para se registrar automaticamente no Chef Server.
  • Execute chef-clientusando a execução separada por vírgula listada especificada. Neste exemplo, apenas a webserverfunção é aplicada.

Isso pressupõe que o sistema de destino tenha sido provisionado, tenha um endereço IP e você possa fazer o SSH como root. Dependendo das políticas locais e do processo de provisionamento, pode ser necessário ajustar como isso funciona. A página de inicialização da faca no wiki descreve mais sobre como isso funciona.

A Knife também possui plugins para vários provedores públicos de computação em nuvem, como Amazon EC2 e Rackspace Cloud. Existem plugins disponíveis para ambientes de nuvem privada como Eucalyptus e OpenStack. Existem também plugins para VMware, Vsphere e outros. Você pode ver mais informações na documentação.

Leitura adicional:

Existem outros recursos de bom chef que possam estar faltando em minhas pesquisas?

A documentação do chef é a principal fonte de documentação.

O Learn Chef Rally é uma série de módulos autoguiados que você pode aprender sobre vários aspectos do Chef Infra e outros produtos Chef.

Eu costumava manter um blog onde publicava dicas, truques e guias sobre o Chef Infra: http://jtimberman.housepub.org/ . Eu tive uma série chamada " dicas rápidas ". Devido a circunstâncias da vida real e outros compromissos, não tenho mais tempo para manter o site, mas posso retornar a ele no futuro.

Os clientes Chef podem obter ajuda e suporte no site de suporte:

A comunidade de usuários do Chef é uma excelente fonte de ajuda adicional:

Recursos adicionais estão disponíveis no Chef Software, o site da Inc. .

Eu espero que isso ajude.

jtimberman
fonte
2
Este é um recurso valioso, vincule-o com mais frequência.
Pooyan Khosravi
Alguma coisa para adicionar / atualizar 7 anos depois? ;)
Spechal