Upgrade to Pro — share decks privately, control downloads, hide ads and more …

TDC2014: Cozinhando com o Chef: Orquestramento de Máquinas e Dev-Machines

TDC2014: Cozinhando com o Chef: Orquestramento de Máquinas e Dev-Machines

Como utilizar receitas para manter configuração de servidores, sob controle de versão, replicáveis, e conseguir escalar para milhões de máquinas em (quase) poucos segundos. Bonus: Como manter as máquinas de desenvolvimento com as aplicações e bibliotecas essenciais sempre instaladas e atualizadas. A palestra vai ser uma repaginada da versão apresentada no RS On Rails 2013. A parte inicial da palestra faz um levantamento histórico de como era realizado a tarefa de se administrar um conjunto grande de máquinas antes da automação, o caminho que se percorreu até chegar na situação atual e por que é importante utilizar as novas alternativas. A segunda parte da palestra entra com os conceitos fundamentais da solução, alguns deles são universais, outros específicos. Vai ser apresentado instruções de instalação, trechos de código para exemplificar os principais componentes da solução, e espera-se que até o final da palestra, as pessoas consigam dar os primeiros passos sem muita dificuldade. A ultima parte passa alguns conselhos e um pouco de experiência prática sobre dificuldades e soluções. Apesar do tema ser mais complexo, é necessário pouco conhecimento da linguagem, e algum conhecimento de ambientes Linux.

2c8545cf821ed984bae91dcda758e105?s=128

Gabriel Mazetto

May 17, 2014
Tweet

Transcript

  1. COZINHANDO COM O CHEF Gabriel Mazetto blog.gabrielmazetto.eti.br Github: / BrodocK

    @brodock
  2. COZINHANDO COM O CHEF: ORQUESTRAMENTO DE MÁQUINAS E DEV- MACHINES

  3. INÍCIO "Eu tinha um sonho... Conseguir fazer deploy de servidor

    com um único comando!"
  4. "PARA ENTENDER O FUTURO, É PRECISO OLHAR PARA O PASSADO"

  5. ORIGEM

  6. PRÉ-HISTÓRIA Mainframes e grandes computadores Configuração manual das máquinas Poucas

    pessoas com "poder de root" Poucos usuários - Yey!
  7. IDADE MÉDIA Computadores interligados em rede Manuais de procedimentos Princípio

    de boas práticas Scripts em bash
  8. IDADE MODERNA Golden Images Princípio de automatização Scripts complexos ps,

    sed, awk... "Pipe Hell"
  9. A NUVEM

  10. A QUEDA DO HOMEM "Ta tudo funcionando, ninguem sabe como."

    "Não está nada funcionando, ninguem sabe como."
  11. O PROBLEMA Bash não resolve tudo! Virtualização Crescimento esponencial de

    "sistemas" Comoditização Não é viável contratar para suprir a demanda
  12. MOTIVAÇÃO

  13. POR QUE? Padronização Garantir boas práticas Fácilidade de replicação Escalabilidade

    Alta Disponibilidade OpenSource (suporte comercial) "Eu odeio bash :)"
  14. CHEF

  15. CONCEITOS RECIPES: São as instruções do que precisa ser feito...

    sem detalhar muito sobre como fazer
  16. CONCEITOS IDEMPOTÊNCIA: "a idempotência é a propriedade que algumas operações

    têm de poderem ser aplicadas várias vezes sem que o valor do resultado se altere após a aplicação inicial." - Wikipedia
  17. CONCEITOS COOKBOOKS Pacote com receitas, atributos, templates... (é o que

    você vai versionar e fazer push)
  18. CONCEITOS PROVIDERS São as ações da sua receita, o "como

    fazer" package, directory, cron, file, template...
  19. #COMOFAZ?

  20. INSTALAÇÃO DO CHEF Com o Ruby instalado na máquina: $

    g e m i n s t a l l c h e f b e r k s h e l f k n i f e - b l o c k
  21. COMANDOS knife (bootstrap, search, status, upload, edit...) berks chef-client chef-solo

  22. CRIANDO UM COOKBOOK $ k n i f e c

    o o k b o o k c r e a t e d e v m a c h i n e s * * C r e a t i n g c o o k b o o k d e v m a c h i n e s * * C r e a t i n g R E A D M E f o r c o o k b o o k : d e v m a c h i n e s * * C r e a t i n g C H A N G E L O G f o r c o o k b o o k : d e v m a c h i n e s * * C r e a t i n g m e t a d a t a f o r c o o k b o o k : d e v m a c h i n e s $ l s C H A N G E L O G . m d a t t r i b u t e s f i l e s m e t a d a t a . r b r e c i p e s t e m p l a t e s R E A D M E . m d d e f i n i t i o n s l i b r a r i e s p r o v i d e r s r e s o u r c e s
  23. RECEITA: EXEMPLO # I n s t a l a

    o v i m p a c k a g e " v i m " # R e m o v e o a p a c h e p a c k a g e " a p a c h e 2 " { : a c t i o n = > : r e m o v e } # I n s t a l a e m a n t e m o n g i n x a t u a l i z a d o p a c k a g e " n g i n x - f u l l " { : a c t i o n = > : u p g r a d e } # G e r a u m t e m p l a t e b a s e a d o e m t e m p l a t e s / n g i n x . c o n f . e r b t e m p l a t e " / e t c / n g i n x / n g i n x . c o n f " d o s o u r c e " n g i n x . c o n f . e r b " v a r i a b l e s ( : w o r k e r _ p r o c e s s e s = > n o d e [ " n g i n x " ] [ " w o r k e r _ p r o c e s s e s " ] ) e n d
  24. RECEITA: EXEMPLO 2 # D e f i n e

    p a c o t e s e s p e c í f i c o s p r a c a d a p l a t a f o r m a p a c k a g e s = v a l u e _ f o r _ p l a t f o r m ( [ " u b u n t u " , " d e b i a n " ] = > { " d e f a u l t " = > [ " v i m " ] } , [ " c e n t o s " , " f e d o r a " ] = > { " d e f a u l t " = > [ " v i m - m i n i m a l " , " v i m - e n h a n c e d " ] } , " d e f a u l t " = > [ " v i m " ] ) # I n s t a l a e m a n t e m a t u a l i z a d o p a c k a g e s . e a c h d o | p k g | p a c k a g e p k g { : a c t i o n = > : u p g r a d e } e n d
  25. EXEMPLO ATTRIBUTES d e f a u l t [

    : n g i n x ] [ : d i r ] = " / e t c / n g i n x " d e f a u l t [ : n g i n x ] [ : l o g _ d i r ] = " / v a r / l o g / n g i n x " d e f a u l t [ : n g i n x ] [ : u s e r ] = " w w w - d a t a " d e f a u l t [ : n g i n x ] [ : b i n a r y ] = " / u s r / s b i n / n g i n x " d e f a u l t [ : n g i n x ] [ : i n i t _ s t y l e ] = " i n i t " d e f a u l t [ : n g i n x ] [ : w o r k e r _ p r o c e s s e s ] = c p u [ : t o t a l ] d e f a u l t [ : n g i n x ] [ : w o r k e r _ c o n n e c t i o n s ] = 1 0 2 4
  26. CONSIDERAÇÕES FINAIS

  27. CONSIDERAÇÕES FINAIS 1. Comece instalando o chef-client nas máquinas (knife

    bootstrap) 2. Crie receitas simples instalar os pacotes essenciais 3. Nunca confie nos pacotes oficiais: leia o fonte! 4. Nunca teste em produção, use o Vagrant. 5. RTFM: http://docs.opscode.com/
  28. PERGUNTAS?

  29. OBRIGADO