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

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

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. COZINHANDO COM O
    CHEF
    RSONRAILS 2013
    Gabriel Mazetto
    blog.gabrielmazetto.eti.br
    Github: /
    BrodocK @brodock

    View Slide

  2. INÍCIO
    "Eu tinha um sonho...
    Conseguir fazer deploy de servidor com um único comando!"

    View Slide

  3. ORIGEM

    View Slide

  4. PRÉ-HISTÓRIA
    Mainframes e grandes computadores
    Configuração manual das máquinas
    Poucas pessoas com "poder de root"
    Poucos usuários - Yey!

    View Slide

  5. IDADE MÉDIA
    Computadores interligados em rede
    Manuais de procedimentos
    Princípio de boas práticas
    Scripts em bash

    View Slide

  6. IDADE MODERNA
    Golden Images
    Princípio de automatização
    Scripts complexos
    ps, sed, awk...
    "Pipe Hell"

    View Slide

  7. A NUVEM

    View Slide

  8. A QUEDA DO HOMEM
    "Ta tudo funcionando, ninguem sabe como."
    "Não está nada funcionando, ninguem sabe
    como."

    View Slide

  9. O PROBLEMA
    Bash não resolve tudo!
    Virtualização
    Crescimento esponencial de "sistemas"
    Comoditização
    Não é viável contratar para suprir a demanda

    View Slide

  10. MOTIVAÇÃO

    View Slide

  11. POR QUE?
    Padronização
    Boas práticas
    Fácil replicação
    Escalabilidade
    Alta Disponibilidade
    Monitoramento
    OpenSource (suporte comercial)
    "Eu odeio bash :)"

    View Slide

  12. #COMOFAZ?

    View Slide

  13. CHEF

    View Slide

  14. 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

    View Slide

  15. CONCEITOS
    RECIPES:
    São as instruções do que precisa ser feito...
    sem detalhar muito sobre como fazer

    View Slide

  16. CONCEITOS
    COOKBOOKS
    Pacote com receitas, atributos, templates...
    (é o que você vai versionar e fazer push)

    View Slide

  17. CONCEITOS
    PROVIDERS
    São as ações da sua receita, o "como fazer"
    package, directory, cron, file, template...

    View Slide

  18. 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

    View Slide

  19. COMANDOS
    knife
    berks
    chef-client
    chef-shell
    chef-solo

    View Slide

  20. 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

    View Slide

  21. 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

    View Slide

  22. 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

    View Slide

  23. 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

    View Slide

  24. 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/

    View Slide

  25. PERGUNTAS?

    View Slide

  26. OBRIGADO

    View Slide