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.

Gabriel Mazetto

May 17, 2014
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 Garantir boas práticas Fácilidade de replicação Escalabilidade

    Alta Disponibilidade 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 k n i f e - b l o c k
  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 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/