Chef - Automaticamente adiciona nós ao servidor do chef

3

Como você configuraria uma VM para que ela se registrasse automaticamente em um servidor de chef?

Eu sei que eu poderia usar bootstrap de faca, no entanto, isso é muito entediante se você estiver iniciando dezenas de servidores de uma só vez.

A documentação do Chef diz para usar chef-client -j /etc/chef/file.json e assar isso na imagem junto com seus arquivos client.rb e validation.pem. No entanto, isso ainda requer ssh-ing na máquina para executar o comando chef-client .

Não há uma maneira mais automatizada de fazer isso?
Como outras pessoas provisionam milhares de máquinas de uma só vez?

Atualizar

Entrei em contato com o suporte do Chef, eles disseram que você pode começar o chef no boot das seguintes maneiras.

  1. Adicione /usr/bin/chef-client ao arquivo /etc/rc.local e assegure-se de ter um arquivo client.rb e validatation.pem em / etc / chef

  2. Use o livro de receitas chef-client para gerenciar o chef e controlar o script de inicialização.

Eles também disseram que o chef-client não é executado como um daemon. Em vez disso, ele só é executado quando precisa fazer uma convergência. (O que parece contraditório com a documentação).

Estas soluções introduzem novos problemas. 1. Você terá dois processos chef-cliente em execução se você adicioná-lo ao arquivo rc.local 2. Você precisa executar o chef para gerenciar o chef com o livro de receitas do chef. Como você, então, limpar e cancelar o registro do nó para que você possa tirar um instantâneo?

    
por spuder 26.01.2015 / 23:14

2 respostas

3

Você tem muitas opções.

  1. Use o cloud-init para executar o comando chef-client depois que o nó aparecer.
  2. Inclua um 'serviço' que é executado na inicialização para executar o chef-client
  3. crie scripts para a criação de seus nós usando knife ec2 server create ou comandos semelhantes para outras nuvens. Isso criará e inicializará o nó em um comando. Envolto em um script, você poderia fazer qualquer número de servidores dessa maneira.

Não importa qual abordagem você tenha, você precisa perceber a carga que virá se você não escalonar a criação do servidor. Milhares de máquinas em poucos minutos exigirão um incrível chef-servidor, ou talvez um grupo de servidores chef.

    
por 27.01.2015 / 16:06
2

O que você basicamente precisa é:

  • URL do chef-servidor
  • certificado chef-server
  • validation.pem
  • chef-cliente

existente na máquina que você deseja inicializar.

No seu processo de inicialização da máquina, coloque o conteúdo do valiadtion.pem, e. %código%. Obtenha o certificado do servidor do chef e coloque-o em /etc/chef/validation.pem

Crie um /etc/chef/trusted_certs/chef-server.pem com o conteúdo como

log_level        :info
log_location     STDOUT
chef_server_url  "https://yourchefserver.example.com"
validation_client_name "chef-validator"
file_backup_path   "/var/lib/chef"
file_cache_path    "/var/cache/chef"
pid_file           "/var/run/chef/client.pid"

Se você executar /etc/chef/client.rb agora, estará terminando com o nó no servidor do chef.

Se você quiser definir um livro de receitas básico como uma lista de execução, poderá criar algo como chef-client

{
"run_list": ["recipe[my_base_cookbook]"]
}

e aplique /tmp/base-run_list.json

    
por 11.10.2018 / 15:18