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

Cozinhando com o Chef: Orquestramento de servid...

Cozinhando com o Chef: Orquestramento de servidores e Dev machines.

Como utilizar receitas para manter configuração de servidores, sob controle de versão, replicável, 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 blibiotecas essenciais sempre instaladas e atualizadas.

Gabriel Mazetto

October 19, 2013
Tweet

More Decks by Gabriel Mazetto

Other Decks in Programming

Transcript

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

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

    "sistemas" Comoditização Não é viável contratar para suprir a demanda
  3. POR QUE? Padronização Boas práticas Fácil replicação Escalabilidade Alta Disponibilidade

    Monitoramento OpenSource (suporte comercial) "Eu odeio bash :)"
  4. 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
  5. CONCEITOS PROVIDERS São as ações da sua receita, o "como

    fazer" package, directory, cron, file, template...
  6. 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
  7. 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
  8. 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
  9. 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
  10. 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
  11. CONSIDERAÇÕES FINAIS 1. Comece com um servidor e coloque o

    client nas máquinas 2. Crie receitas simples que mantenham os pacotes essenciais atualizados 3. Nunca confie nos pacotes oficiais: leia o fonte! 4. Nunca teste em produção, use o Vagrant. 5. RTFM: http://docs.opscode.com/