O documento apresenta sobre infraestrutura como código usando Puppet e Mcollective. Ele discute sobre os desafios da administração manual de sistemas à medida que o ambiente cresce e propõe a automação, padronização e controle da infraestrutura como solução. Em seguida, apresenta o Puppet como ferramenta de gerência de configurações que permite declarar a infraestrutura desejada de forma idempotente e tratar recursos de forma abstrata. Por fim, discute brevemente sobre o Mcollective.
3. José Augusto (Guto) Carvalho
Consultor/SysAdmin/DevOp (LPIC-3 e PCP-201);
14 anos de experiência com TI e FOSS;
Blogueiro TI/FOSS há 10 anos no site gutocarvalho.net;
Atuação em vários projetos de Governo no MDA, MINC, EBC/RADIOBRÁS,
MPS/DATAPREV, ITI/PR, CAIXA, MD/SIPAM, DETRAN/DF;
Entusiasta DevOps (sysadmin em recuperação) desde 2010.
whoami
FOSS => Free and Open Source Software
sábado, 21 de setembro de 13
4. Plano de Trabalho
40 minutos de apresentação
10 minutos para perguntas
Faça perguntas quando quiser
Slidedeck disponível em slideshare.com/gutocarvalho
sábado, 21 de setembro de 13
5. Agenda
Gerência de configurações
Infraestrutura como código
Ferramentas de infraestrutura como código;
Puppet como solução de gerência de configurações
Puppet arquitetura, funcionamento e recursos
Mcollective
Perguntas
sábado, 21 de setembro de 13
12. Tarefas Repetitivas
Criação de usuários
Elaboração de scripts
Configuração de serviços
Configurações de monitoramento
Criação de imagens de ambientes
Configuração do sistema operacional
Instalação, atualização e remoção de pacotes
sábado, 21 de setembro de 13
13. A medida que o parque aumenta
administrá-lo fica mais complicado
sábado, 21 de setembro de 13
14. Você vai percerber que...
Fica mais difícil identificar e corrigir problemas
Fica mais difícil manter ambientes complexos funcionando
Fica mais difícil manter seu parque padronizado
Sua produtividade diminui a media que o ambiente cresce
Sua capacidade de entrega não é mais a mesma
Você nunca chega em casa no mesmo horário
Você trabalha muitos finais de semana e madrugadas
sábado, 21 de setembro de 13
15. Maior risco de ocorrer falhas
sábado, 21 de setembro de 13
16. Maior tempo gasto para
executar mudanças
sábado, 21 de setembro de 13
17. Quanto tempo
se gasta para
criar um usuário em
450 servidores?
sábado, 21 de setembro de 13
18. Procedimento para criar usuário
Acessar o servidor por ssh
Se tornar root
Criar usuário
Especificar senha temporária
Especificar permissões no sudoers
sábado, 21 de setembro de 13
40. Puppet em poucas palavras
Nos permite parar de administrar e começar a desenvolver nossa infra
Nos permite reaproveitar código para construir configurações
Oferece linguagem declarativa para criar configurações
Sintaxe simples, prática e natural para sysadmins
Oferece suporte a Linux, BDBs, OSX e Windows
sábado, 21 de setembro de 13
42. Sobre a ferramenta
Ferramenta Open Source - Apache License
Ferramenta mantida pela empresa Puppetlabs
Empresa oferece suporte e versão enterprise
Criado por Luke Kaines (CEO e Fundador Puppetlabs)
Cases de uso com gandes players (HP, CISCO, VMWARE...)
Recebeu pesados investimentos
sábado, 21 de setembro de 13
43. Sobre a ferramenta
Ferramenta Open Source - Apache License
Ferramenta mantida pela empresa Puppetlabs
Empresa oferece suporte e versão enterprise
Criado por Luke Kaines (CEO e Fundador Puppetlabs)
Cases de uso com gandes players (HP, CISCO, VMWARE...)
Recebeu pesados investimentos
sábado, 21 de setembro de 13
44. Feito por um SysAdmin para SysAdmins
sábado, 21 de setembro de 13
48. Tech Specs
Escrito em Ruby
Extensível usando código Ruby
Funciona em modo autônomo (serverless)
Funciona em modo cliente.servidor
Usa RESTful API
Oferece comunicação segura com uso de certificados digitais
sábado, 21 de setembro de 13
58. Resource Abstraction Layer
Camada de Abstração de Recursos
Fale o que você quer que seja feito
Não se preocupe em como será feito
O Puppet sabe como fazer
sábado, 21 de setembro de 13
64. Tratamento de informações
No Puppet tudo é modelado e tratado como ‘dados’
O estado atual de um node (servidor) é um dado
Um pacote instalado em um node é um dado
Um usuário em um servidor é um dado
A versão do sistema operacional é um dado
A arquitetua do sistema é um dado
sábado, 21 de setembro de 13
65. Os dados são inseridos em
catálogos pelo master
O catálogo é processado pelo node e as modificações
são aplicadas de acordo com o que foi declarado.
sábado, 21 de setembro de 13
66. Processamento
do Catálogo
1) Agente Requisita Catálogo
1.1) Agente envia Fatos para Master
2) Master Processa Fatos e Compara
2.1) Master Produz e envia Catálogo
3) Node Recebe, Compara e Aplica
4) Node informa estado atual ao Master
5) Sistema reflete catálogo
sábado, 21 de setembro de 13
67. Processamento
do Catálogo
1) Agente Requisita Catálogo
1.1) Agente envia Fatos para Master
2) Master Processa Fatos e Compara
2.1) Master Produz e envia Catálogo
3) Node Recebe, Compara e Aplica
4) Node informa estado atual ao Master
5) Sistema reflete catálogo
sábado, 21 de setembro de 13
69. Configurações
Voláteis e Dados
Puppet
Master
Módulos Estáticos
Visão ampla do Puppet
LDAP DNS MONIT SYSLOG
JBOSS APACHE MYSQL PGSQL
Puppet Agents
Camada de Aplicação
Camada de Serviços Estruturantes
sábado, 21 de setembro de 13
70. Você pode fazer deploy de sua APP
Você pode controlar a versão de sua APP
Você pode controlar fazer rollback
sábado, 21 de setembro de 13
72. Modo Cliente/Servidor
O agente gera um certificado digital
O master precisa autorizar o certificado
Sem autorização o agente não pode se comunicar
Toda a comunicação entre agente e master é segura
sábado, 21 de setembro de 13
73. Puppet Visão em Rede
Puppet Master
Puppet Client
8140/ TCP
puppet agent
acesso
seguro ssl
sábado, 21 de setembro de 13
80. Fluxo Cliente/Servidor
Instalação do
node
Geração de
Certificado
Agente
Sincroniza
Master Assina
Certificado
Envio de
Certificado
Inicialização
do puppet
Modalidades de Assinatura de Certificado
Assinatura pode ser manual
Assinatura pode ser automática por domínio
Assinatura pode ser automática em qualquer requisição
sábado, 21 de setembro de 13
81. O agente se comunica com o
master a cada N minutos
sábado, 21 de setembro de 13
83. Funcionalidades
Resource Types
Parâmetros e Meta-parâmetros para Resource Types
Templates (arquivo dinâmicos)
Definições (configurações dinâmicas)
Classes e Módulos
Funções e Condicionais
sábado, 21 de setembro de 13
84. Puppet Resource Types
Arquivos e Diretórios
Usuários
Alias
Pacotes
Serviços
Yum Repos
Augeas
Hosts
SSH
Cron
O puppet oferece 38 tipos de recursos nativos, e você pode estendê-lo.
sábado, 21 de setembro de 13
85. Resource Type: Packages
Suporte a 23 tipos de
provedores de pacotes
Faz a abstração do OS
Declare se o pacote deve estar
presente ou ausente
Declare se o pacote deve
sempre estar em sua última
versão
sábado, 21 de setembro de 13
86. Resource Type: Services
Suporta 11 tipos de sistemas
INIT para inicializar serviços
Declare se um serviço deve
estar sempre rodando
Declare se um serviço deve ser
carregado no boot
Declare se um serviço depende
de um pacote ou arquivo
sábado, 21 de setembro de 13
87. Resource Type: File
Especifique permissões e
owners
Declare arquivos,
diretórios e links
Controle de mudanças
usando até 15 tipos de
checksums
sábado, 21 de setembro de 13
89. Instala, Configura e Inicia
instalar um pacote
ativar um serviço no boot
copiar arquivo de configuração
iniciar serviço instalado
o que queremos fazer?
sábado, 21 de setembro de 13
90. Instala, Configura e Inicia
# aptitude install apache2
# insserv apache2
# cp ~/httpd.conf /etc/apache2/
# invoke-rc.d apache2 start
no debian seria assim:
sábado, 21 de setembro de 13
91. Instala, Configura e Inicia
# yum install httpd
# chkconfig httpd on
# cp ~/httpd.conf /etc/httpd/conf/
# service httpd start
no redhat/centos seria assim:
sábado, 21 de setembro de 13
93. Puppet Manifests
Arquivo com extensão.pp em que expressamos nossas
necesidades utilizando a sintaxe declarativa do Puppet.
sábado, 21 de setembro de 13
94. package { 'apache2':
ensure => present,
}
service { 'apache2':
ensure => running,
enable => true,
}
file { '/etc/apache2/httpd.conf':
ensure => present,
mode => ‘0644’,
owner => ‘root’,
group => ‘root’,
ensure => “puppet:///files/apache/httpd.conf”,
}
Instala, Configura e Inicia
sábado, 21 de setembro de 13
95. package { 'apache2':
ensure => present,
}
service { 'apache2':
ensure => running,
enable => true,
}
file { '/etc/apache2/httpd.conf':
ensure => present,
mode => ‘0644’,
owner => ‘root’,
group => ‘root’,
ensure => “puppet:///files/apache/httpd.conf”,
}
Instala, Configura e Inicia
resource type
parameter
title
value
sábado, 21 de setembro de 13
97. Declarando um node (site.pp)
node “servidor.dominio” {
include linux-server
include module
}
node “balancer.dominio” {
include linux-server
include cyrus::backend
include postfix::hub
include haproxy::mailproxy
}
sábado, 21 de setembro de 13
103. Base Class
class linux-server {
include sysadmin-utils
include zabbix-agent
include ntpconf
include locales
include hosts
include users
include localmta
include vimrc
include backup-agent
include apt-repos
}
sábado, 21 de setembro de 13
108. Marionette Collective
Orquestrador de nodes
Execução de Tarefas Paralelas
Interação com centenas de nodes
Inventário descentralizado
Leitura de meta-dados do Puppet
Similar a Fabric e Capistrano
sábado, 21 de setembro de 13
118. Benefícios Reais
Maior produtividade em menor tempo
Poucos sysadmins para muitos nodes
Diminuição de falhas humanas
Maior controle de todo o seu parque
Diminuição do tempo gasto em mudanças
Diminuição do custo de manutenção
Você chegará cedo em casa e suas madrugas e finais de semana serão seus
sábado, 21 de setembro de 13
119. Comparando
Ambiente com 450 nodesAmbiente com 450 nodesAmbiente com 450 nodes
modo manual puppet
instalando zabbix 75 horas 10 minutos
criando usuário 22 horas 10 minutos
sábado, 21 de setembro de 13
122. Insira o puppet nos templates
de seu hypervisor
sábado, 21 de setembro de 13
123. Use o puppet para executar e
controlar mudanças em seu parque
sábado, 21 de setembro de 13
124. Para de administrar e comece a
desenvolver a sua infraestrutura
sábado, 21 de setembro de 13
125. Nova demanda? Já execute utilizando o Puppet,
escreva classes e módulos para que você só tenha
que fazer isto 1 vez e reaproveitar o código depois.
sábado, 21 de setembro de 13
127. Crie manifests pensando em reaproveitamento
código, escreva seus módulos e classes da forma
mais flexível possível.
sábado, 21 de setembro de 13
128. Não precisa começar do zero, use
módulos prontos do GitHub e
PuppetForge.
sábado, 21 de setembro de 13
129. Pesquise, há muita informação
sobre puppet na rede!
sábado, 21 de setembro de 13
130. Puppet em números
700+ pessoas online no canal
#puppet da irc.freenode.net
8.500+ repositórios no GitHub
1000+ módulos no PuppetForge
5000+ usuários ativos na lista
puppet-users com 8000+ tópicos de
discussão
sábado, 21 de setembro de 13
131. Puppet Labs & Luke Kaines
sábado, 21 de setembro de 13