Author
jose-augusto-carvalho
View
1.019
Download
4
Embed Size (px)
DESCRIPTION
Free Software Day - Taguatinga/DF - 2013
sábado, 21 de setembro de 13
Infraestrutura como códigoPuppet & Mcollective
TAGUATINGA/DF - 2013--09-21sábado, 21 de setembro de 13
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
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
AgendaGerê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
Administração de sistemas e serviços
sábado, 21 de setembro de 13
Virtualização
sábado, 21 de setembro de 13
Cloud Computing
sábado, 21 de setembro de 13
Administração Manual
sábado, 21 de setembro de 13
Administração Manual
Tarefas repetitivas
Não existem padrões
Não existem procedimentos
sábado, 21 de setembro de 13
Cada sysadmin faz do seu jeito
sábado, 21 de setembro de 13
Tarefas RepetitivasCriaçã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
A medida que o parque aumenta administrá-lo fica mais complicado
sábado, 21 de setembro de 13
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
Maior risco de ocorrer falhas
sábado, 21 de setembro de 13
Maior tempo gasto para executar mudanças
sábado, 21 de setembro de 13
Quanto tempo se gasta para criar um usuário em 450 servidores?
sábado, 21 de setembro de 13
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
Criação de usuário450 máquinas 3 minutos por máquina1350 minutos ou 22,5 horas450 trocas de senhas
sábado, 21 de setembro de 13
Quanto tempo se gasta parainstalar um agente de monitoramento em 450 servidores removendo o agente antigo?
sábado, 21 de setembro de 13
Procedimento para instalar zabbix
Acessar servidor via ssh
Adicionar repositório APT
Atualizar índices
Instalar pacote
Ajustar arquivo zabbix_agentd.conf
Reiniciar agente zabbix
Remover agente antigo (nagios).
sábado, 21 de setembro de 13
Instalação de agente de monitoramento450 máquinas 10 minutos por máquina4500 minutos ou 75 horas9 dias trabalhando 8 h.p.d
sábado, 21 de setembro de 13
Documentação inexistente
sábado, 21 de setembro de 13
Não há rastreamento de mudanças
sábado, 21 de setembro de 13
Demandas pipocando...
sábado, 21 de setembro de 13
Ambiente pipocando...
sábado, 21 de setembro de 13
Estresse aumentando...
sábado, 21 de setembro de 13
E você começa a ter a sensação de estar sendo engolido por seu ambiente.
sábado, 21 de setembro de 13
Como resolver estes problemas?Como obtenho controle e padronização em meu ambiente ?
sábado, 21 de setembro de 13
Gerência de Configurações
sábado, 21 de setembro de 13
Padronização
sábado, 21 de setembro de 13
Automatização
sábado, 21 de setembro de 13
Controle
sábado, 21 de setembro de 13
Integridade
sábado, 21 de setembro de 13
Agilidade nas mudanças
sábado, 21 de setembro de 13
Ferramentas de GC
sábado, 21 de setembro de 13
sábado, 21 de setembro de 13
PuppetFerramenta de nova geração que implementa gerência de
configurações para seu ambiente.
sábado, 21 de setembro de 13
Puppet em poucas palavras
sábado, 21 de setembro de 13
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
Sobre a ferramenta
sábado, 21 de setembro de 13
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
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
Feito por um SysAdmin para SysAdmins
sábado, 21 de setembro de 13
Desenhada para uso DevOps
sábado, 21 de setembro de 13
Visão DevOpssábado, 21 de setembro de 13
Tech Specs
sábado, 21 de setembro de 13
Tech SpecsEscrito 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
Clientes Puppet Enterprise
sábado, 21 de setembro de 13
Parcerias
sábado, 21 de setembro de 13
Parcerias
sábado, 21 de setembro de 13
ArquiteturaComo funciona o Puppet?
sábado, 21 de setembro de 13
sábado, 21 de setembro de 13
AbstraçãoÉ mais fácil e rápido usar o Puppet!
sábado, 21 de setembro de 13
Resource Abstraction Layer (RAL)
sábado, 21 de setembro de 13
sábado, 21 de setembro de 13
Resource Abstraction Layer
sábado, 21 de setembro de 13
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
Instale Pacote X
sábado, 21 de setembro de 13
Remova usuário Z
sábado, 21 de setembro de 13
(Re)inicie serviço Y
sábado, 21 de setembro de 13
Tratamento de Informações
O grande diferencial do Puppet é a forma como ele trata as informações de seus nodes
sábado, 21 de setembro de 13
Tratamento de informações
sábado, 21 de setembro de 13
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
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
Processamento do Catálogo
1) Agente Requisita Catálogo1.1) Agente envia Fatos para Master2) Master Processa Fatos e Compara2.1) Master Produz e envia Catálogo3) Node Recebe, Compara e Aplica4) Node informa estado atual ao Master5) Sistema reflete catálogo
sábado, 21 de setembro de 13
Processamento do Catálogo
1) Agente Requisita Catálogo1.1) Agente envia Fatos para Master2) Master Processa Fatos e Compara2.1) Master Produz e envia Catálogo3) Node Recebe, Compara e Aplica4) Node informa estado atual ao Master5) Sistema reflete catálogo
sábado, 21 de setembro de 13
Idempotência
sábado, 21 de setembro de 13
ConfiguraçõesVoláteis e Dados
Puppet MasterMó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
Você pode fazer deploy de sua APPVocê pode controlar a versão de sua APP
Você pode controlar fazer rollback
sábado, 21 de setembro de 13
Puppet em rede, como funciona?
sábado, 21 de setembro de 13
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
Puppet Visão em Rede
Puppet Master
Puppet Client
8140/ TCPpuppet agent
acesso seguro ssl
sábado, 21 de setembro de 13
Fluxo Cliente/Servidor
Instalação do node
sábado, 21 de setembro de 13
Fluxo Cliente/Servidor
Instalação do node
Inicialização do puppet
sábado, 21 de setembro de 13
Fluxo Cliente/Servidor
Instalação do node
Geração de Certificado
Inicialização do puppet
sábado, 21 de setembro de 13
Fluxo Cliente/Servidor
Instalação do node
Geração de Certificado
Envio de Certificado
Inicialização do puppet
sábado, 21 de setembro de 13
Fluxo Cliente/Servidor
Instalação do node
Geração de Certificado
Master Assina Certificado
Envio de Certificado
Inicialização do puppet
sábado, 21 de setembro de 13
Fluxo Cliente/Servidor
Instalação do node
Geração de Certificado
Agente Sincroniza
Master Assina Certificado
Envio de Certificado
Inicialização do puppet
sábado, 21 de setembro de 13
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 CertificadoAssinatura pode ser manualAssinatura pode ser automática por domínioAssinatura pode ser automática em qualquer requisição
sábado, 21 de setembro de 13
O agente se comunica com o master a cada N minutos
sábado, 21 de setembro de 13
Quais funcionalidades estão disponíveis?
sábado, 21 de setembro de 13
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
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
Resource Type: PackagesSuporte 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
Resource Type: ServicesSuporta 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
Resource Type: FileEspecifique 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
Exemplossábado, 21 de setembro de 13
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
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
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
Como seria no Puppet?
sábado, 21 de setembro de 13
Puppet ManifestsArquivo com extensão.pp em que expressamos nossas
necesidades utilizando a sintaxe declarativa do Puppet.
sábado, 21 de setembro de 13
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
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 typeparameter
titlevalue
sábado, 21 de setembro de 13
Mais exemplos
sábado, 21 de setembro de 13
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
Variáveis e FatosFatos (facter)
vimpackage => vim-puppet,
apacheservice => apache2,
ntpconfrhel => ntp.conf.rhel,
Variáveisdomainfqdnhostnameinterfacesipaddress_eth0ipaddress_eth1ipaddress_lolsbdistidlsbdistrelease
=> hacklab,=> puppetmaster.hacklab,=> puppetmaster,=> eth0,eth1,lo,=> 10.0.2.15,=> 192.168.56.150,=> 127.0.0.1,=> debian,=> 6.0.5,
sábado, 21 de setembro de 13
Condicionaiscase $operatingsystem { CentOS,RedHat: { $package_name = 'ntp', $service_name = 'ntpd', $conf_file = 'ntp.conf.el', } Debian,Ubuntu: { $package_name = 'ntp', $service_name = 'ntp', $conf_file = 'ntp.conf.debian', }}....
sábado, 21 de setembro de 13
Definiçõesproxy::squid { 'ProxyFilial' : http_port squid_mode squid_hostname cache_mem maximum_object_size_in_memory maximum_object_size memory_replacement_policy cache_replacement_policy cache_dir cache_mgr cache_effective_user cache_effective_group dns_nameservers ips_squid }
=> '3128',=> 'transparent',=> 'proxy.4linux',=> '2 GB',=> '6 MB',=> '128 MB',=> 'heap GDSF',=> 'heap LFUDA',=> 'aufs /var/spool/squid 1024 16 256',=> '[email protected]',=> 'proxy',=> 'proxy',=> '127.0.0.1 10.61.12.2 172.16.1.1',=> '127.0.0.1 192.168.12.3',
sábado, 21 de setembro de 13
Templates
myorigin = <%= hostname %>mydestination = $myhostname, ..., localhost, <%= fqdn %>
Trecho do template postfix/main.cf
myorigin = servidor.dominiomydestination = $myhostname, ..., localhost, servidor.dominio
Substituição de variáveis por fatos
sábado, 21 de setembro de 13
Padronizando nodes
sábado, 21 de setembro de 13
Base Classclass 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
Como acompanho mudanças?
sábado, 21 de setembro de 13
Puppet Dashboard
sábado, 21 de setembro de 13
sábado, 21 de setembro de 13
Posso fazer mudanças em tempo real?
sábado, 21 de setembro de 13
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
Demonstração
sábado, 21 de setembro de 13
Posso provisionar VMs/Instâncias?
sábado, 21 de setembro de 13
Ferramentas de Provisionamento
Puppet/Chef/Ansible
Foreman
Vagrant
Razor
Sprinkle
sábado, 21 de setembro de 13
Qual o resultado concreto?
sábado, 21 de setembro de 13
Documentação Instantânea
sábado, 21 de setembro de 13
Processos bem definidos
sábado, 21 de setembro de 13
Ambiente Padronizado
sábado, 21 de setembro de 13
Restore e backup de mudanças
sábado, 21 de setembro de 13
Tarefas Automatizadas
sábado, 21 de setembro de 13
Benefícios ReaisMaior 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
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
Tecnologia trabalhando para você
sábado, 21 de setembro de 13
Boas Práticassábado, 21 de setembro de 13
Insira o puppet nos templates de seu hypervisor
sábado, 21 de setembro de 13
Use o puppet para executar e controlar mudanças em seu parque
sábado, 21 de setembro de 13
Para de administrar e comece a desenvolver a sua infraestrutura
sábado, 21 de setembro de 13
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
Versione as configurações (git) criadas no Puppet.
sábado, 21 de setembro de 13
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
Não precisa começar do zero, use módulos prontos do GitHub e PuppetForge.
sábado, 21 de setembro de 13
Pesquise, há muita informação sobre puppet na rede!
sábado, 21 de setembro de 13
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
Puppet Labs & Luke Kaines
sábado, 21 de setembro de 13
Site/Bloghttp://www.puppetlabs.comhttp://www.puppetlabs.com/blog/http://puppet-br.org/
[email protected]@puppetmasterd
GitHubhttp://www.github.com/puppelabs
Puppet na rede
Google GroupsPuppet-camp,puppet-users,puppet-users-br,puppet-dev
IRCirc.freenode.org#puppet#puppet-br
sábado, 21 de setembro de 13
Perguntas?
sábado, 21 de setembro de 13
Obrigado!
Linkedin: http://br.linkedin.com/in/gutocarv
E-mail: [email protected]
Contato
Slides: slideshare.net/gutocarvalhoBlog: gutocarvalho.net
Twitter: @gutocarvalho
sábado, 21 de setembro de 13