Olá. Aqui é a Komiya.
Como aconteceu
Se estiver com pressa, pode pular. Foi há cerca de meio ano que o Chef-Solo foi descontinuado (obsoleto) e o desenvolvedor me informou para usar o chef-zero (localmode). Naquela época, comparei várias coisas e finalmente verifiquei depois de um tempo. Parece que há casos em que você não quer deixar dívida técnica mesmo gastando dinheiro com a premissa de que vai durar muito tempo em vez de ser substituído em alguns anos. Pessoalmente, para ser honesto, migrar a um custo é um ponto delicado, e não acho que seja uma história que o SOLO vá desaparecer tão cedo. No mundo, o Cookpad lançou itamae e o Ansible é popular. Ouvi dizer que o Ansible é fatal porque não pode ser feito um teste se você tentar ter uma função equivalente a não_if, mas não testei porque não há custo para reescrevê-lo para YAML em primeiro lugar. Também fiquei curioso sobre o itamae, mas parecia que haveria um transtorno em reconverter papéis e ambientes em atributos. Tanto os papéis quanto os ambientes são deliberadamente fundidos e inicializados com atributos de array em ordem de prioridade, e sinto que a modificação é bem pesada. Além disso, a falta de função de dados_bags\ é super irritante. Parece que fiquei preso no pântano do chef para migrar para outros lugares. Além disso, houve momentos em que a função de HA do Chef-Server era NG na versão comunitária.
Realisticamente, seria o modo local, então tentei verificar de um lado para o outro como de costume, então é um memorando.
Há muita informação sobre chef, mas como só existem Mohawks (pessoas com nível técnico muito alto), é difícil entender os pontos-chave dos iniciantes que não conseguem imaginar onde estão confusos. Existem muitas formas de usar, e cada ambiente é diferente, então pode ser fácil enlouquecer e ficar um pouco confuso.
Vou adicionar depois porque vi um gráfico legal que é fácil de entender. Qual Chef é o ideal para você? 〜 Tabela de confirmação de configuração recomendada #getchef - Creationline Co., Ltd.
Acho que a facilidade de entendimento é muito importante para a disseminação e o desenvolvimento. Espero que um artigo como este contribua um pouco para isso.
Referências
Bem, eu já analisei várias coisas, então vamos apresentá-las a partir das informações de referência. Vou dividir o padrão. Acho que é mais fácil entender o mecanismo e as funções do Chef-Zero se você pesquisar no Google separadamente, mas há uma diferença entre o Chef-Server em memória e o modo local, e o que quero fazer é o modo local. Se você quiser usá-lo como um Chef-Server em memória, precisa iniciar o Chef-Zero e registrar os dados do livro de receitas, função, ambiente e _bags dados\ com o comando knife. Como está na memória, os dados registrados desaparecem quando você para o Chef-Zero. Então, considerando o tempo, achei útil usá-lo quando quiser ver informações que podem ser obtidas no chef-shell antecipando a migração para o Chef-Server. Pode ser conveniente ver as informações JSON registradas quando acessadas de um navegador, mas acho que foi no nível do git. Quando uso como modo local, o Chef-Zero inicia internamente apenas quando o comando é executado, e parece cair quando a receita é aplicada, e parece não haver nenhum incômodo extra porque ele acessa o caminho do Chef-repo escrito no knife.rb sem esforço extra.
・Tipo que quer rodar o Chef-Zero como um Chef-Server na memória Tentei rodar um Chef Server simples (chef-zero) na Amazon Linux | Developers.IO Instalando o chef-zero no CentOS - Clavier's Journal Eu construí o chef-zero e o vinculei com knife-xenserver - Yohei no Daily Devotion XP Ruby - knife zero bootstrap Não consigo instalar o chef remotamente - Qiita Vamos usar o leve e simples Chef Server "chef-zero" #opschef_ja « CREATIONLINE, INC. #Docker Use o Chef Zero como um Chef Server leve em memória para gerenciar containers Docker do sistema operacional host com o Chef #Chef #GetChef_ja - Qiita
・Tipo que quer rodar o Chef-Zero no modo local Eu criei o Knife-Zero para operar um servidor remoto apenas no modo local do Chef-Zero e no modo local do Chef. Você também pode obter informações de configuração do Node. - Introduction Chef Super para Administradores de Servidores Qiita (2): Crear/Executar/Deletar Livros de Receitas com Knife-Zero & Obter Livros de Receitas com o comando clone git (2/1) - @IT chef_localmode_tutorial/knife.rb na master · higanworks/chef_localmode_tutorial Vamos usar a ferramenta de gerenciamento de configuração Chef - Chef Super Introdução para Administradores de Servidores Privados Virtuais (2) - Suplemento ao @IT, Diretório de Livros - Instruções para Instalar o Chef na Amazon EC2 com bootstrap Qiita Knife-Zero - Migração do Qiita Chef-Solo para o Modo Local Chef-Cliente #opschef_ja #getchef_ja « CREATIONLINE, INC. Notas sobre a Orano Knife-Zero - Orenoblog
・Outras Técnicas Práticas do Chef para Implementar DevOps Começando com o Chef #1 – Visão geral, Instalação do Chef Server no EC2 e Configuração da Workstation | Developers.IO #GetChef_ja - Pesquisa no Twitter Criei um plugin chamado "knife-helper" porque o comando knife era muito trabalhoso #getchef_ja - Notas diversas Criei um plugin chamado "knife-helper" porque o comando knife era muito complicado - Qiita knife.rb — Chef Docs Tentei GNU paralelo | Ore no homepage
Além disso, dê uma olhada mais de perto no "guia de uso do chef". Parece um dicionário sem tutorial, mas recentemente achei que tinha sorte♪ de conseguir ler o homem em japonês.
Instalando Chef-Zero, Knife-Zero
O sistema operacional é CentOS 6.5. Por enquanto, senti que o ohai ficaria bravo se a versão do rubi estivesse baixa, então coloquei a 2.1.5 no rbenv e tornei global. (No entanto, recebo um pequeno aviso de DL.) Também tem um chef-dk, mas fiquei preocupado com o caminho para entrar, então coloquei com o gem por enquanto.
Bundler depende mais de você, então não faça o seguinte: $ sudo -i gem install chef-zero json --no-ri --no-rdoc $ sudo -i gem install knife-zero --no-ri --no-rdoc
Root no pacote de usuários antes do switch
$ sudo su -
# CD /path_to_chef-repo/
# vi Arquivo de Gemas
fonte 'https://rubygems.org'
gem 'berkshelf', '~>3.0.0'
# Berkshelf exige arquivo Hashie/hash_extensions.
gema 'hashie', '>=2.0.2', gema '<3.0.0' 'chef' #追加 gema 'chef-zero' #追加 gema 'faca-zero' #追加 grupo :teste do gem 'foodcritic', '~>3.0.0'
gem 'cozinha-teste', '~>1.3.0'
gem 'mixlib-despacho', '~>1.3.0'
gem 'kitchen-ec2', '~>0.8.0'
gem 'serverspec'
fim
# instalação de pacotes
Instalado com sucesso net-ssh-2.9.3.beta1
Instalado com sucesso net-scp-1.2.1
~Omitido~
Instalei com sucesso o mixlib-authentication-1.3.0
Chef-12.2.1 instalado com sucesso *Chef12 está incluído
Instalação bem-sucedida do knife-zero-1.4.0
34 gemas instaladas
Lista
# Show de feixes
Para chef-client, também existe a seguinte forma de colocar sudo curl -L https://www.opscode.com/chef/install.sh | bash -x Se fizer isso, a estação de trabalho tentará colocar chef-12.2.1-1.el6.x86_64.rpm. (Em abril de 2015) Se você colocar knife-zero, chef-12 também entrará sozinho, e ainda funcionará por enquanto. No entanto, se você colocar no lado remoto com knife zero bootstrap, chef (11.12.4) e chef-zero (2.0.2) serão incluídos. Receitas podem ser aplicadas.
A ajuda pode listar o que parece ser '$ Knife Help List'. Se você disser 'knife zero bootstrap --help', também deve ver ajuda para knife zero. Se você não vê, provavelmente não está em Well.
Aplicando receitas ao Localhost no modo local do Chef-Cliente
Se você quiser usar um papel IAM e um cloud-init para aplicar uma receita ao localhost no momento em que começa a partir de uma AMI, provavelmente não precisa configurar o chef-zero, e seria bom clonar o Chef-Repositorio por git, obter a chave, passar os parâmetros e executar o seguinte.
$ sudo chef-client -z -r role[web] -E sandbox --validation_key /etc/chef/validation.pem
Se você adicionar -z, chef-zero parece rodar apenas nesse momento, e se chef-zero já estiver iniciado e a porta estiver em conflito, o erro termina. Parece que os detalhes da opção podem ser adicionados ao comando --help. Você não precisa especificar a opção desde que esteja escrita no client.rb. Depois de eliminar o repositório chef com o git clone ou algo assim, parece que esse tipo de coisa está ok. Se você não adicionar sudo, o erro terminou em um processo que requer permissões. Embora seja necessário definir knife.rb, client.rb e varidation-key. (Eu não precisei modificar o repositório chef!) sim!! Na verdade, mesmo que chef-zero não esteja incluído, chef-client parece conseguir aplicar receitas rodando com a opção de modo local. (No INFO, o servidor chef-zero aparece como NotFound, e internamente, ele só começa quando o comando é executado, e não existe tal coisa como travar após terminar, mas a receita flui.)
chef-repo/.chef/knife.rb da seguinte forma: Localmode verdade, parecia funcionar no modo local sem -z.
chef_repo = File.join(File.dirname(__FILE__), "..")
current_dir = File.dirname(__FILE__)
log_level :info
log_location STDOUT
#node_name 'uname -n'
client_key "#{current_dir}/dummy.pem"
validation_client_name 'chef-validador'
validation_key "#{current_dir}/dummy.pem"
#validation_key "/etc/chef/validation.pem"
cookbook_path ["#{chef_repo}/livros de receitas", "#{chef_repo}/site-livros de receitas"]
node_path "#{chef_repo}/nós"
role_path "#{chef_repo}/roles"
environment_path "#{chef_repo}/ambientes"
data_bag_path "#{chef_repo}/data_bags"
encrypted_data_bag_secret "path_to_databagkey"
faca[:berkshelf_path] = "#{chef_repo}/livros de receitas"
#knife[:ssh_user] = ""
#knife[:ssh_password] = ""
faca[:ssh_port] = 22
faca[:editor] = "vim"
localmode true
chef_server_url 'http://127.0.0.1:8889'
syntax_check_cache_path "#{current_dir}/syntax_check_cache"
#puts Chef::Config.inspect
De alguma forma, percebi que o arquivo de configuração do chef é parecido com um rubi. (Tentei passar para node_name com uma citação retroativa, e funcionou, mas o chef-cliente parecia travado. Preparei a chave com os seguintes passos. O chef-zero parece exigir autenticação, mas se não parece exigir uma chave formal, a faca não pode ser executada e ocorre um erro.
$ ssh-keygen -t rsa -N "" -f ~/chef-repo/.chef/dummy.pem
/etc/chef/client.rb é o seguinte. Os parâmetros que podem ser escritos estão listados no "Guia de Uso do Chef".
log_level :info
log_location STDOUT
chef_server_url "https://127.0.0.1:8889" ## Endpoint da API do Chef-Zero
#validation_client_name 'chef-validador'
client_fork verdade
client_registration_retries 5
#node_name 'uname -n'
#puts Chef::Config.inspect
Se você quiser aplicar uma receita do Workstation para um cliente remoto
Depois de reviravoltas, funcionou com KniFe Zero da seguinte forma.
URL=https://www.opscode.com/Chef/install.sh
newip=xxx.xxx.xxx.xxx.xxx
role=web
env=sandbox
usuário=hoge
DPAs='Gato /pashto_sshpassword_file'
$ faca zero bootstrap --nome-nó $newip --bootstrap-url $url -i .chef/dummy.pem -x $user --sudo \
-E $env -r papel\[nome do papel\] -z -s $(gato ./databag_key) -P $dpas $newip
Era bootstrap, mas acabava com um comando para aplicar a receita. Quando eu fiz login, /etc/chef/client.rb era criado automaticamente, e a chave para dados_bags era copiada e colocada. Não precisei de -s depois da próxima vez. (Não havia repositório em lugar nenhum, e eu achava que, se a carga no rsync terminasse, um dos processos rodando vários na estação de trabalho cairia.) Acho que vi um artigo verificando que o Sr. Sawanobori podia chegar a até 2000 nós, mas lembro de pensar que as especificações da máquina não estavam cobertas. )
$ ls /etc/chef
Client.PEM Client.RB encrypted_data_bag_secret first-boot.json Validation.PEM
$ sudo cat /etc/chef/client.rb
log_location STDOUT
chef_server_url "http://localhost:8889"
validation_client_name "chef-validador"
node_name "10.xxx.xxx.xxx"
Então fiquei feliz. Quero autenticar a chave por um tempo, mas não entendo que isso vira autenticação por senha! Acho, mas ainda não fiz nada a respeito. Pode ser bem fácil travar. Será que é porque não estou acostumado com redirecionamento de portas. Não sei direito. Consigo escrever em texto simples no knife.rb, então acho que é como tomar cuidado para não se comprometer com isso. #knife[:ssh_user] = "" #knife[:ssh_password] = ""
Existem mais dois subcomandos para faca zero, cliente e diagnóstico. Cliente parece ser usado para aplicar receitas para a segunda e as vezes seguintes, e Diagnosticar parece ir para as configurações.
・O cliente trabalhou quando eu fiz o seguinte: -o Este é um exemplo de aplicação parcial de uma receita.
$ faca zero chef_client -c ~/chef-repo/.chef/knife.rb 'name:10.xxx.xxx.xxx' \
-x $user -i .chef/dummy.pem --sudo -E $env -o base::openssl -a endereço IP 10.xxx.xxx.xxx --remote-chef-zero-port 8889 -z
・diagnose é como uma lista de valores atualmente reconhecidos, conforme mostrado abaixo. Se você verificar quando o comando não funciona, pode ver se há configurações ou opções faltando.
$ faca zero diagnóstico -c ~/Chef-Repo/.chef/knife.rb -z
Chef::Config
====================
---
:local_mode: verdade
:knife_zero: Verdade
:verbosidade:
:config_file: "/path-to-config/.chef/knife.rb"
:log_level: :erro
:log_location: !ruby/objecto:IO {}
:node_name: |
~Omitido~
"Knife Zero bootstrap ≒ knife solo prepare+cook", "knife zero chef_client ≒ knife ssh+search+cook", etc. Tenho mantido o knife zero até agora, mas parece que o knife solo também tem planos para suportar o modo local. (Se você não quiser gerenciar a configuração do nó porque ela muda bastante dinamicamente na operação de troca de implantação tipo BlueGreen, o knife zero parece ser demais para você.) ) Chef-Solo, Chef-Client LocalMode, Knife-Solo, Knife-Zero e nós. — sawanoboly.net adicionar local_mode ao solo.rb · Edição #353 · matschaffer/knife-solo (transferir todo o diretório relacionado, alterá-lo remotamente para um formato executável equivalente ao LocalMode, etc.)
Se o knife-zero for problemático, acho que tudo bem fazer a mesma quantidade de processamento que o knife-solo no modo local você mesmo. Em outras palavras, acho uma boa ideia transferir o Chef-Repo e usar chef-client via ssh. (Se quiser fazer sudo, pode adicionar -t ao ssh)
Sobre Processamento Paralelo
Não senti paralelismo, provavelmente porque a CPU era de um núcleo, mas consegui movê-lo usando o seguinte comando chamado paralelo do GNU. A saída padrão parecia vir uma a uma após a conclusão. A saída não era mista para cada host.
$ paralelo -j 3 faca zero bootstrap -c ~/Chef-Repo/.chef/knife.rb -z -E $env -r papel\[nome-de-papel\] \
-i .chef/dummy.pem -s $(cat ~/path_to_databag-key) --sudo --no-host-key-verify ::: $host 1 $host 2
O homem do Parallel parecia conseguir comer do arquivo. Pode ser mais fácil do que olhar para a ajuda da faca e sofrer com erros. No entanto, como não há rpm, você precisa fazer ou aumentar o rpm você mesmo.
Eu tentei usar a função de Busca
・Exemplo de busca por dados_bags
$ Faca mostrar data_bags/base/* --modo local
$ Knife Search nginx 'id:nginx_status' --modo-local
$ knife search nginx 'servername:"proxy01"' --local-mode
$ Knife Search nginx 'servername:"*.net"' --local-mode --id-only
$ knife search nginx 'servername:*.net And certificatename:xxx-wildcard' --local-mode
Se você adicionar '--id-only', só receberá id. Além de AND, parece que OR e NOT também podem ser usados. Parece que o próximo caractere especial deve ser barrado ao contrário (de por volta do Chef Usage Guide P242) '+ - &&& || ! () {} [] ^ " ~ * ? : `
Eu ficaria feliz se pudesse rodar os resultados da busca em paralelo, mas achei que teria que gerenciar o nó corretamente.
Bem, é um pouco longo, então vou te desculpar aqui. Obrigado por assistir.