Origens da cultura DevOps

Damon Edwards faz um excelente vídeo sobre as origens do DevOps, recomendo a todos que querem entender melhor esse movimento e cultura.

[s]
Guto

Puppet vs Ansible?

Essa é uma questão recorrente nas comunidades que participo e portanto vou registrar aqui no blog a minha visão para facilitar a resposta.

Definições

  1. O Puppet é uma ferramenta de gerência de configurações e estados que vem da escola de GCONF do Mark Burgess, criador do CFEngine e destes princípios que vem sendo contruídos desde os anos 90.

  2. O Ansible é uma ferramenta que faz o que chamamos de orquestração, ele não segue os princípios fundamentais de CCONF e o seu desenho não segue a escola do Mark Burgess.

1. Como funciona o Ansible

Imagine que você tem uma VM com o ansible instalado.

Nessa VM voce cria um playbook (código que vai executar alguma ação em um sistema operacional).

Você diz pro ansible a lista de máquinas em que ele vai se conectar para rodar aquele playbook.

A VM que roda o ansible converte aquele playbook em um código python e se conecta (faz o PUSH do código) em N máquinas utilizando sua rede para aplicá-lo. Na VM de destino é necessário ter o python e as python-libs exigidas pelo playbook.

O Ansible se conecta nestas máquinas utilizando o conhecido protocolo SSH, ele depende disso para funcionar, portanto é necessário ter credenciais de acesso ou chaves que te possibilitem chegar nestas VMs, se não houver serviço SSH rodando ou credenciais de acesso, não será possível fazer a orquestração.

Para se conectar as todas essas VMs, a máquina com Ansible tem que ter acesso a todas as redes em que as VMs estão rodando para poder orquestrá-las, portanto, você terá que fazer algumas regras de firewall para garantir o acesso a todos os pontos de sua infraestrutura.

Se você for aplicar um playbook em centenas ou milhares de máquinas paralelamente há de se tomar um cuidado extra pois ele pode gerar throughtput além das capacidades do seu switch/roteador no momento em que for tentar alcançar todos OSs simultâneamente ou dentro do paralelismo que você definir.

Nem tudo no Ansible tem controles rídigos ou é idempotente, algumas coisas são, outras não, idempotência não é uma pedra fundamental em seu desenho, além disto, ele não foi feito para gerar um relatório detalhado, garantir o sucesso ou ter um rídido controle da execução do playbook, no final ele executa o playbook onde você pede - o foco da orquestração é esse - mas a visibilidade é pequena, você não tem como saber de forma precisa se atingiu o seu objetivo ou se tudo o que você queria foi realizado em todas as VMs. No momento, ele não tem o melhor dos feedbacks para o administrador, mesmo assim, como orquestrador ele é uma ferramenta muito interessante e poderosa.

1.1 Orquestração em poucas palavras

Orquestração consiste em executar algo de forma paralela ou não em tempo real em um sistema operacional ou em um grupo de sistemas operacionais.

Quando falarem orquestração, pelo menos do ponto de vista de automação de infraestrutura, tenha em mente alguém que se conecta em N sistemas operacionais e executa algo, pontualmente, sem exigência rígidas ou grandes controles.

2. Como funciona o Puppet?

O puppet foi desenhado dentro dos conceitos fundamentais da “gerência de configurações”, e por isso não tem a característica PUSH. Esses conceitos foram criados em 1993 pelo Professor Mark Burgess da universidade de OSLO. Suas principais características são o drift, convergência, idempotência, gerência de estados e uso de agentes nos “nodes” (termo que usamos para descrever um sistema operacional com um agente instalado).

O conceito GCONF (Gerência de Configurações) foi estabelecido de forma mais concisa em 2004 com a criação da teoria Promisse do Mark Burgess que serviu de norte para a criação de todas as ferramentas modernas de CGCOF como Puppet, Salt, Chef e CFENGINE.

Na CGONF você define um estado desejado através de uma linguagem declarativa chamada DSL (Domain specific language), armazena isso em um local central (neste caso no puppetmaster). Nas pontas temos os agentes rodando nos nodes, esses agentes vão buscar essa configuração e aplicar no node.

Primeiro o agente verifica o estado atual do node, compara com o estado desejado, se houver divergência ele converge o node para o estado desejado. Todo esse processo gera um relatório robusto que registra todas as mudanças e eventos daquela drift/convergência.

Em resumo se alguém alterar algo que o puppet está gerenciando, o puppet detecta e corrige sem necessidade de intervenção humana, é o que chamamos de auto-healing.

Quaisquer ações ou recursos utilizados no Puppet tem como premissa a idempotência e o rídigo controle durante a aplicação, esse é um princípio fundamental do seu desenho. O agente roda como serviço no sistema operacional, portanto, a cada N minutos ele acorda e executa essa checagem em todo o sistema para garantir o compliance e o estado desejado, essa é sua missão, ele é o guardião dos estados e da integridade do node.

O servidor nunca se conecta nos nós, apenas os nós de conectam no servidor. O servidor que contém as configurações pode ser facilmente replicado e colocado atrás de um balanceador. Você difícilmente tem problemas com throughput em sua rede como aqueles que podem acontecer com orquestradores e praticamente não precisa de preocupar com regras firewall, os nodes precisam se conectar à porta 8140 TCP do master ou do seu LB, apenas isto.

O Puppet não depende de serviços de terceiros como SSH para funcionar, ele utiliza seu próprio agente e a comunicação ocorre através de uma API REST que é utilizada pelo agente para se comunicar com o master.

Toda a comunicação é criptografada ponta-a-ponta e o custo disso para rede é baixíssimo se comparado com outros médotos.

Outra grande vantagem desse modelo é que mesmo que o servidor esteja fora, os agentes continuam funcionando e aplicando a última configuração recebida.

2.1 Gerência de configurações em poucas palavras

Ferramentas de gerência de configuração funcionam em arquitetura agente e servidor, o servidor armazena as configurações dos nodes. O agente que roda no node, busca as configurações e aplica localmente.

O agente funciona com o conceito de gerência de estados. Você usa uma linguagem declarativa para descrever os estados desejados nos nodes de sua rede.

Idempotência é uma princípio fundamental do agente. Há um robusto sistema de relatórios e registro de eventos e mudanças. O servidor nunca se conecta nos nós, apenas os nós se conectam ao servidor.

3. Conclusão

No final ambas são ferramentas de gerência, o Puppet faz a gerência de configurações e estados e o Ansible faz gerência por orquestração. Tais ferramentas atuam de formas distintas e tem objetivos e usos diferentes.

Acima de tudo é importante entender que elas não são concorrentes.

É bom ter as duas no seu cinto de utilidades, dependendo do projeto você terá uso para uma ou para outra.

[s]
Guto

Plugins que uso no ATOM

Sempre me perguntam quais plugins eu uso no ATOM para desenvolvimento Puppet, segue a lista:

De linguagem:

  • language-puppet do atom
  • language-yaml do atom
  • language-ruby do tom

De linter:

  • linter do atom-community
  • linter-puppet-lint do atom-community
  • linter-puppet-parser do asquelt
  • linter-ruby do atomcommunity

De align:

  • aligner do adrianlee44
  • aligner-puppet do bigbrozer
  • aligner-ruby do adrianlee44

Outros:

  • file-icons do DanBrooker
  • git-control do jacogr
  • open-recent do zren
  • minimap do atom-minimap
  • remote-edit do sveale

Normalmente monto - via sshfs - o diretório com o código que está em alguma VM de desenvolvimento e trabalho no conforto do ATOM.

Meus alunos preferem que eu mostre o código no ATOM e eles sempre falam muito bem do linter.

#ficaadica

Se você tiver dica de plugins pro ATOM manda nos comentários ;)

[s]
Guto

Estarei no DevOpsDays 2016 em Porto Alegre

Galera fui convidado para apresentar alguns cases de automação de infraestrutura no DevOpsDays de Porto Alegre, será no dia 09 de julho de 2016. Ainda não sei o horário, mas fica a dica do evento.

Faça sua inscrição!

http://www.devopsdays.org/events/2016-portoalegre/welcome/

Vejo vocês lá!

[s]
Guto

Estarei no TDC SP 2016 :)

Fui convidado para ajudar a coordenar a trilha de “Infra Ágil” no “The Developers Conference São Paulo” que vai acontecer em Julho de 2016.

Devo apresentar uma palestra de nome homônimo no evento. A trilha deve acontecer no dia 08 de Julho, ainda não está definido o horário, aviso por aqui assim que souber.

A chamada de trabalhos ainda está aberta, mande sua proposta até o dia 4 de Junho.

http://www.thedevelopersconference.com.br/tdc/2016/saopaulo/call4papers

Vejo vocês lá!

[s]
Guto

Resultado do Meetup Puppet DF 20160518

O Meetup foi execelente, tivemos cerca de noventa inscritos, compareceram cerca de sessenta pessoas, se contarmos a turma da organização e os palestantres acho que tivemos umas setenta pessoas presentes.

Meus agradecimentos à faculdade evangélica, em especial do Prof. Maurício e ao Prof. Dirceu que cederam espaço e nos ajudaram na logística do encontro.

Não conseguimos apresentar do jeito que queríamos o último trabalho (Integração de GitLab com Puppet) devido ao tempo que ficou apertado, mas conseguimos avançar com conteúdo de Puppet para a comunidade local.

A experiência nos mostrou que é melhor reduzir os temas nos próximos encontros, portanto, o próximo meetup terá tema específico, seja desenvolvimento de módulos, seja testes, seja pcp, apenas um tema que iremos desenvolver do início ao fim.

Agradeço aos palestrantes Adriano, Taciano, Rafael e Dirceu pelo tempo que investiram no encontro e por terem compartilhado experiência e conhecimento conosco.

Estamos estudando fazero próximo agora em junho, aguardo sugestões de temas, ideias e quem sabe uma nova parceria para hospedar o Meetup.

Fotos

Acesse as fotos no link abaixo:

https://www.flickr.com/photos/puppet-br/albums/72157666275683673

Slides

Os slides estão no speakerdeck:

  1. https://speakerdeck.com/gutocarvalho/meetup-puppet-br-20160518-intro-puppet

  2. https://speakerdeck.com/gutocarvalho/meetup-puppet-br-20160518-integracao-entre-puppet-e-vagrant

  3. https://speakerdeck.com/gutocarvalho/meetup-puppet-br-20160518-projeto-pcp

  4. https://speakerdeck.com/gutocarvalho/meetup-puppet-br-20160518-desenvolvendo-modulos-e-fatos-puppet

  5. https://speakerdeck.com/gutocarvalho/meetup-puppet-br-20160518-testes-de-codigo-puppet

[s]
Guto

Foi liberado o PCP 1.0.2

O projeto PCP está em casa nova e com nova versão. Movemos o projeto para a organização Puppet-BR no github para facilitar a contribuição. Agora a documentação está toda em inglês o que facilita o uso para pessoas de qualquer parte do mundo.

Já fizemos a homologação das versões mais recentes do puppet nesta release:

  • Puppet Server 2.3.2
  • Puppet Agent 1.4.2
  • Mcollective 2.8.8
  • PuppetDB 4.0.2
  • PostgreSQL 9.4.6
  • Puppet Explorer 2.0.0
  • ActiveMQ 5.13.2

Agradeço por todas as ideias e por todas as contribuições recebidas no GitHub, agradeço pela turma que participou do Meetup PCP em Brasília e por todos que ajudaram a testar a nova versão. [s]
Guto

Meetup Puppet-BR em BSB no dia 18-05

Foi marcado um Meetup Puppet-BR em Brasília no dia 18 de Maio, será no edifício Parque Cidade Corporate, vai começar às 18:30.

Este será o terceiro encontro técnico do ano, foco nas atividades práticas.

Faça sua inscrição, temos apenas 50 vagas.

http://www.meetup.com/pt-BR/puppet-br/events/230816720/

Programação:

1. Intro CGONF & Puppet 4

Palestrante: Rafael Sales & Guto Carvalho
Tempo: 40 min

  • Introdução rápida a gerência de configurações;
  • Introdução ao Puppet 4.

2. Projeto PCP

Palestrante: Taciano Tres & Guto Carvalho
Tempo: 20 min

  • Apresentação do projeto PCP;
  • Demo de instalação do PCP.

3. Oficina de desenvolvimento de módulos e fatos Puppet

Palestrante: Rafael Sales & Guto Carvalho
Tempo: 40 minutos

  • Demo de desenvolvimento de módulos;
  • Demo de desenvolvimento de fatos.

4. Integração do Puppet com Vagrant

Palestrante: Taciano Tres
Tempo: 20 minutos

  • Introdução rápida ao Vagrant;
  • Uso do Provider Puppet Apply;
  • Uso do Provider Puppet Agent;
  • Demo de integração de Puppet com Vagrant.

5. Testes de código Puppet

Palestrante: Adriano Vieira & Guto Carvalho
Tempo: 30 minutos

  • Porque testar?
  • Puppet Parser Validate
  • Puppet Lint
  • Entendendo teste unitário;
  • Entendendo teste de aceitação;
  • Introdução rápida ao Rspec-Puppet;
  • Introdução rápida ao ServerSpec;
  • Introdução rápida ao Beaker;
  • Demo de desenvolvimento de teste unitário para o módulo que criamos;
  • Demo de desenvolvimento de teste de aceitação.

6. Integração do Puppet com GitLab

Palestrantes: Douglas Andrade e Guto Carvalho

  • Introdução rápida ao GitLab;
  • Demo de instalação do GitLab;
  • Demo GitLab CI;
  • Integrações com Puppet (VCSREPO);
  • Integrações com Puppet (R10k).

[s]
Guto

Meetup Puppet-BR em BSB Hackaton

Foi marcado um meetup Puppet em Brasília no dia 03 de Abril.

Este meetup é mais técnico, vai ser estilo hackaton, vamos nos reunir em uma grande mesa e contribuir com o projeto PCP (Puppet Community Platform).

Requisitos:

  • Cada um traz seu notebook ou desktop
  • Cada um traz o que desejar beber ou comer

Recursos:

  • Mesas e cadeiras
  • Internet 120 Mbits Wifi

Atividades planejadas:

  • Homologar última versão do Puppet Server com o PCP;
  • Homologar última versão do Puppet Agent com o PCP;
  • Homologar última versão do PuppetDB;
  • Homologar Puppet Explorer com versão recente do * PuppetDB;
  • Homologar última versão do ActiveMQ (repo externo);
  • Iniciar estudo de compatibilidade para Debian 8;
  • Tradução do README.md para ingles
  • Tradução do CHANGELOG para ingles
  • Criação de site para PCP com hugo;
  • Criação de sub-dominio pcp.infraagil.io.
  • Deploy do novo site com hugo
  • Planejamento de PCP em docker
  • Estudo para merge dos projetos PCP e PCP-M

Faça sua inscrição no site:

Nos vemos lá!

[s]
Guto

Meetup Puppet-BR em Sao Paulo

Foi marcado um meetup Puppet em São Paulo no dia 07 de Abril.

Programação:

  • Introdução DevOps (20 min) - Guto
  • Introdução Infraestrutura como código (20 min) - Daniel
  • Introdução Puppet & Puppet 4 (20 min) - Miguel
  • Demo de instalação de ambiente Puppet Community (15 min) - Guto
  • Demo de instalação do Wordpress usando Puppet (15 min) - Miguel
  • Bate papo aberto sobre DevOps, IAC, CM e Puppet (30 min) - Todos

Faça sua inscrição no site:

Nos vemos lá!

[s]
Guto