Introdução ao Chef Ops
@wevtimoteo
Lightning Talks - Tech Talk
O que é provisionamento?
• Em linhas curtas: disponibilizar ou "prover" algo.
Exemplo de provisionamento de um web server: !
Instalar e configurar nginx, assim como todas as
dependências que ele possa ter, tornando-o
pronto para uso.
O que é Chef?
• Uma ferramenta de provisionamento, desenvolvida
para "programar"/automatizar a infra.
• Sendo assim é possível preparar uma máquina em
questão de segundos.
• DevOps
Idempotência
• É considerado idempotente se o resultado de uma
ação realizada com sucesso é independente do
número de vezes que é executada.
• No caso do `chef` seria: não importa quantas vezes
o chef-client rode, o resultado será o mesmo.
Node
• São máquinas que estão sendo gerenciadas pelo
Chef, seja no chef-solo (receita local) ou no chef-
server.
Run-List
• É a lista de cookbooks que o node está
configurado para rodar
Role
• Permite criar um grupo de cookbooks facilitando a
configuração da Run-List
Chef-server
• Através de uma interface web, permite
gerenciamento dos nodes, configuração da run-
list de cada node ou role.
• Também atua como repositório de receitas para o
chef-client.!
• Possui um sistema de gerenciamento de usuários
para gerir toda a infra automatizada.
Chef Development Kit
• Comando chef na linha de comando
• Berkshelf (como se fosse um Gemfile, porém de receitas)
• Framework de testes: Test Kitchen
• ChefSpec, ferramenta de testes unitários para cookbooks
• Foodcritic, uma ferramenta de linting e análise de código
para cookbooks.
• Chef Client, Knife e Chef Zero.
Criando um cookbook
$ knife cookbook create COOKBOOK_NAME (options)
• cookbook/attributes
• cookbook/CHANGELOG.md
• cookbook/definitions
• cookbook/files/default
• cookbook/libraries
• cookbook/metadata.rb
• cookbook/providers
• cookbook/README.md (or .rdoc)
• cookbook/recipes/default.rb
• cookbook/resources
• cookbook/templates/default
Testando uma receita
• Através do Vagrant:
Vagrant.configure("2") do |config|!
config.vm.box = "precise64"!
config.vm.provision :chef_solo do |chef|!
chef.cookbooks_path = "~/src/toolkit-chef/cookbooks"!
chef.add_recipe("toolkit")!
end!
config.vm.network :forwarded_port, guest: 80, host: 11180!
end
Enviando um cookbook para
o Chef-Server
$ knife upload environments/production.json
$ knife upload cookbooks_dir
.chef/knife.rb!
!
validation_key "#{current_dir}/mycompany.pem"!
chef_server_url "https://mychef-server.com"
Adicionando uma máquina
ao Chef-server
$ knife bootstrap yourserveraddress -x username -P password --sudo
Referências
• Learn Chef - http://learn.chef.io/
• Chef Style DevOps Kungfu - ChefConf 2015 -
https://www.youtube.com/watch?v=_DEToXsgrPc
• DevOps Kungfu - https://github.com/chef/devops-
kungfu

Introdução ao Chef Ops

  • 1.
    Introdução ao ChefOps @wevtimoteo Lightning Talks - Tech Talk
  • 2.
    O que éprovisionamento? • Em linhas curtas: disponibilizar ou "prover" algo. Exemplo de provisionamento de um web server: ! Instalar e configurar nginx, assim como todas as dependências que ele possa ter, tornando-o pronto para uso.
  • 3.
    O que éChef? • Uma ferramenta de provisionamento, desenvolvida para "programar"/automatizar a infra. • Sendo assim é possível preparar uma máquina em questão de segundos. • DevOps
  • 4.
    Idempotência • É consideradoidempotente se o resultado de uma ação realizada com sucesso é independente do número de vezes que é executada. • No caso do `chef` seria: não importa quantas vezes o chef-client rode, o resultado será o mesmo.
  • 5.
    Node • São máquinasque estão sendo gerenciadas pelo Chef, seja no chef-solo (receita local) ou no chef- server.
  • 6.
    Run-List • É alista de cookbooks que o node está configurado para rodar
  • 7.
    Role • Permite criarum grupo de cookbooks facilitando a configuração da Run-List
  • 8.
    Chef-server • Através deuma interface web, permite gerenciamento dos nodes, configuração da run- list de cada node ou role. • Também atua como repositório de receitas para o chef-client.! • Possui um sistema de gerenciamento de usuários para gerir toda a infra automatizada.
  • 9.
    Chef Development Kit •Comando chef na linha de comando • Berkshelf (como se fosse um Gemfile, porém de receitas) • Framework de testes: Test Kitchen • ChefSpec, ferramenta de testes unitários para cookbooks • Foodcritic, uma ferramenta de linting e análise de código para cookbooks. • Chef Client, Knife e Chef Zero.
  • 10.
    Criando um cookbook $knife cookbook create COOKBOOK_NAME (options) • cookbook/attributes • cookbook/CHANGELOG.md • cookbook/definitions • cookbook/files/default • cookbook/libraries • cookbook/metadata.rb • cookbook/providers • cookbook/README.md (or .rdoc) • cookbook/recipes/default.rb • cookbook/resources • cookbook/templates/default
  • 11.
    Testando uma receita •Através do Vagrant: Vagrant.configure("2") do |config|! config.vm.box = "precise64"! config.vm.provision :chef_solo do |chef|! chef.cookbooks_path = "~/src/toolkit-chef/cookbooks"! chef.add_recipe("toolkit")! end! config.vm.network :forwarded_port, guest: 80, host: 11180! end
  • 12.
    Enviando um cookbookpara o Chef-Server $ knife upload environments/production.json $ knife upload cookbooks_dir .chef/knife.rb! ! validation_key "#{current_dir}/mycompany.pem"! chef_server_url "https://mychef-server.com"
  • 13.
    Adicionando uma máquina aoChef-server $ knife bootstrap yourserveraddress -x username -P password --sudo
  • 14.
    Referências • Learn Chef- http://learn.chef.io/ • Chef Style DevOps Kungfu - ChefConf 2015 - https://www.youtube.com/watch?v=_DEToXsgrPc • DevOps Kungfu - https://github.com/chef/devops- kungfu