SlideShare uma empresa Scribd logo
Gerência de Configurações com Puppet
por Péricles S. da C. Jr.
SEMCOMP 2015
Salvador/BA 2015.09.04
$ whoami
● Péricles S. da C. Jr.
● Bolsista na CRI/STI UFBA
● Sysadmin Voluntário no
grupo GRACO/DCC-UFBA
● Entusiasta FOSS (Debian
GNU/Linux)
Automação de Infraestrutura
● Processo de criar scripts de ambientes
● Replicação de configuração no ativo da Instituição
● Automatização das atividades operacionais.
● Infraestrutura Ágil.
○ Ter qualquer ambiente, seja PaaS, IaaS ou servidores físicos e
independente do fornecedor utilizado.
● Gerência de configurações.
Como é feita geralmente...
● Configuração manual de ambientes (humano)
● Processos propensos à erros
● Aumento dos tempos de ciclo
● Impossibilidade de escalabilidade
Tarefas Repetivas
● Criação de usuários em servidores
● Elaboração de scripts
● Configuração de serviços
● Configuração de monitoramentos
● Criação de imagens de ambientes
● Configuração do sistema
operacional
● Instalação, atualização e remoção
de pacotes
O que é o Puppet?
● Ferramenta com versão Opensource, sob
licença Apache
● Desenvolvida pelo Luke Kanie (CEO da
Puppetlabs )
● Foco na Gerência de configurações
● Linguagem DSL declarativa
● Outras alternativas:
○ Chef
○ Salt
○ CFEngine
○ Ansible
Quem usa?
Fonte: https://puppetlabs.com/about/customers
A Comunidade
Fonte: https://puppetlabs.com/community/overview
Legal não é! Mas pra que usar isso?
● Escalabilidade
● Gerenciamento de
configurações:
○ Laboratórios (Ex: Desktops
e Notebooks)
● Administrar Infraestrutura de
grande escala
● Replicação de ambiente de
produção
● Distribuição de atualizações
críticas
Imperativa vs. Declarativa
● Imperativa:
● Descrição de um algoritmo
ou processo específico;
● Declarativa:
● Descrição do estado ou
objetivo a ser alcançado.
Exemplo
● Imperativa
○ “Faça um sanduíche”
○ Step by step
○ Receitas, procedimentos ou
algoritmos
● Declarativa
○ “Desejo um sanduíche”
○ Deve existir um saduíche
com pão francês, presunto,
alface, tomate e etc, após
essa apresentação no
coffe-break para o
palestrante!
Como
funciona?
Componentes Descrição
Agente Um daemon executando que coleta informações sobre o nó e envia essas informações ao
Puppet principal.
Catalog Compilação de fatos que especificam como configurar o nó.
Facts Dados sobre um nó, enviados pelo nó para o Puppet Server.
Manifest Descreve recursos e as dependências entre eles.
Recursos Por exemplo, o pacote, arquivo ou serviço.
Módulo Relacionados a grupos (em um diretório). Por exemplo, um module pode definir como um
banco de dados como o MySQL é instalado, configurado e executado.
Classes Coleção de recurso no puppet. Uma unidade lógica aplicada pelo agente através de uma
definição de um nó.
Nó Um host gerenciado. Os nós são definidos como classes, mas contêm o nome do host ou
nome completo do domínio.
Puppet Server O servidor que gerencia todos os nós do Puppet.
Repositório de módulos
Fonte: https://forge.puppetlabs.com/
GIVE ME THE CODES
Declaração de um nó
node /^node[0-9][0-9].lab$/ {
$rede= "homologacao"
include apache
include tomcat
include ntp
include aliases
include openjdk_jre
}
root@puppetserver:~# tree /etc/puppet/modules/ssh/
/etc/puppet/modules/ssh/
├── manifests
│ ├── config.pp
│ ├── init.pp
│ ├── install.pp
│ ├── params.pp
│ └── service.pp
└── templates
└── sshd_config.erb
2 directories, 6 files
class ssh {
include ssh::install
include ssh::params
include ssh::config
include ssh::service
}
class ssh::install {
include ssh::params
package { $ssh::params::packages:
ensure => present,
require => Class['repository::config'],
}
}
class ssh::config {
include ssh::params
file { "/etc/ssh/sshd_config":
ensure => present,
owner => 'root',
group => 'root',
mode => '0600',
content => template('ssh/sshd_config.erb'),
require => Class["ssh::install"],
notify => Class["ssh::service"],
}
}
class ssh::service {
include ssh::params
service { $ssh::params::service:
ensure => running,
hasstatus => true,
hasrestart => true,
enable => true,
require => Class["ssh::config"],
}
}
class ssh::params {
$packages = hiera('ssh_packages')
$service = hiera('ssh_service')
$port_var = hiera('ssh_port')
$allow_groups_var = hiera('ssh_allow_groups')
}
---
ssh_packages: openssh-server
ssh_service: ssh
ssh_port: 6666
ssh_allow_groups: sysadmins devels
case $rede {
'desenvolvimento': {
$nameserver_var = ['192.168.xxx.xx']
$domain_var = ['foo.exemlo.br']
}
'dmz': {
$nameserver_var = ['10.0.x.xxx','10.0.1.xxx']
$domain_var = ['bar.exemplo.br']
}
'homologacao': {
$nameserver_var = ['192.168.xx.xx', '200.xxx.x.xx']
$domain_var = ['bla.exemplo.br']
}
default: {
fail("A ${rede} nao pertence a nenhuma rede de servidores")
}
<% @nameserver_var.each do |val| -%>
nameserver <%= val %>
<% end -%>
<% @domain_var.each do |val_domain| -%>
search <%= val_domain -%>
<% end -%>
A Pilha
Exemplos
Profiles e Roles
class java(
$distribution = 'jdk',
$version = 'present',
$package = undef,
$java_alternative = undef,
$java_alternative_path= undef
) {
include java::params
...
class profile::java::jre {
class { 'java':
distribution => 'jre',
}
contain ::java
}
class logstash {
yumrepo { 'logstash-1.5':
...
}
->
package { 'logstash':
...
}
->
file {'/etc/logstash/conf.d/central.conf':
...
}
~>
service {'logstash':
...
}
}
class role::logserver {
include profile::java::jre
include profile::elasticsearch
include profile::logstash
include profile::kibana
include profile::logging
Class['profile::java::jre'] -> Class['profile::elasticsearch']
Class['profile::elasticsearch'] -> Class['profile::logstash']
Class['profile::logstash'] -> Class['profile::kibana']
}
Pensamento do dia!
O “sucesso” do projeto de um
bolsista depende do mouse ( by
Madson )
Dashboard
Dashboard
Opa!!! “Peraí”!!!
● Que opressão é
essa?
● E seu meu ativo
tiver somente
M$-Window$,
como é que eu
fico!?!?!?
Plataformas Suportadas
● Server 2003
e 2003 R2
● Server 2008
e 2008 R2
● Window$ 7
● Server 2012
Tipos de recursos Suportados
● File
● User
● Group
● Schedule_task
● Package
● Service
● Exec
● Host
Fonte: https://docs.puppetlabs.com/references/latest/type.html
Obs: 49 tipos de recursos em ambientes *nix.
Chocolatey Package Manager
Chocolatey Puppet Provider
Dúvidas??
Contato
Email: pericles.junior@ufba.br
Github: http://github.com/periclesjunior
Linkedin: http://br.linkedin.com/in/periclesjunior
Referências
● http://www.ibm.com/developerworks/br/library/a-devops2/
● http://softwarelivre.gov.br/palestras-tecnicas-cisl/palestra_puppet
● http://spin.atomicobject.com/2012/09/13/from-imperative-to-declarativ
e-system-configuration-with-puppet/
● http://www.example42.com/tutorials/PuppetTutorial
● http://www.olindata.com/blog/2014/02/how-can-i-use-puppet
● https://chocolatey.org/
● http://docs.puppetlabs.com/windows/index.html
● http://www.slideshare.net/PuppetLabs/plugging-chocolatey-into-your-
puppet-infrastructure-rob-reynolds-puppet-labs
● https://github.com/instruct-br/webinar-elk
● https://www.youtube.com/playlist?list=PLwbuDNhcHQgAr-d5sOB0xw
pQw3SNbsnDa

Mais conteúdo relacionado

Mais procurados

Mais procurados (20)

Vagrant + Puppet
Vagrant + PuppetVagrant + Puppet
Vagrant + Puppet
 
01 notações iniciais
01   notações iniciais01   notações iniciais
01 notações iniciais
 
Aula 2
Aula 2Aula 2
Aula 2
 
Apache proxy
Apache proxyApache proxy
Apache proxy
 
07 - Atividade III
07 - Atividade III07 - Atividade III
07 - Atividade III
 
Monitoramento de serviços com Zabbix + Grafana + Python - Marcelo Santoto - D...
Monitoramento de serviços com Zabbix + Grafana + Python - Marcelo Santoto - D...Monitoramento de serviços com Zabbix + Grafana + Python - Marcelo Santoto - D...
Monitoramento de serviços com Zabbix + Grafana + Python - Marcelo Santoto - D...
 
Memcached, Gearman e Sphinx
Memcached, Gearman e SphinxMemcached, Gearman e Sphinx
Memcached, Gearman e Sphinx
 
Apache
ApacheApache
Apache
 
Proftpd
ProftpdProftpd
Proftpd
 
PostgreSQL Dump e Restor - O básico
PostgreSQL Dump e Restor - O básicoPostgreSQL Dump e Restor - O básico
PostgreSQL Dump e Restor - O básico
 
Linux - DNS
Linux - DNSLinux - DNS
Linux - DNS
 
Roteiro nfs
Roteiro nfsRoteiro nfs
Roteiro nfs
 
Maonamassa Pga
Maonamassa PgaMaonamassa Pga
Maonamassa Pga
 
SENAI - Segurança firewall
SENAI - Segurança   firewall SENAI - Segurança   firewall
SENAI - Segurança firewall
 
Linux - Instalação de Programas
Linux - Instalação de ProgramasLinux - Instalação de Programas
Linux - Instalação de Programas
 
Aula PIT 3 - Ambientes
Aula PIT 3 - AmbientesAula PIT 3 - Ambientes
Aula PIT 3 - Ambientes
 
Instalação e configuração apache Ubuntu Server
Instalação e configuração apache Ubuntu ServerInstalação e configuração apache Ubuntu Server
Instalação e configuração apache Ubuntu Server
 
Prog web 07-pdo
Prog web 07-pdoProg web 07-pdo
Prog web 07-pdo
 
4 instalação no Ubuntu
4 instalação no Ubuntu4 instalação no Ubuntu
4 instalação no Ubuntu
 
Servidor de internet (NAT, Squid, Sarg)
Servidor de internet (NAT, Squid, Sarg)Servidor de internet (NAT, Squid, Sarg)
Servidor de internet (NAT, Squid, Sarg)
 

Semelhante a Gerência de Configurações com o Puppet

Gestão automática de configuração usando puppet
Gestão automática de configuração usando puppetGestão automática de configuração usando puppet
Gestão automática de configuração usando puppetDaniel Sobral
 
Ferramentas para Automação de Datacenter
Ferramentas para Automação de DatacenterFerramentas para Automação de Datacenter
Ferramentas para Automação de DatacenterWilson Lopes
 
Gerenciamento de configuração com puppet
Gerenciamento de configuração com puppetGerenciamento de configuração com puppet
Gerenciamento de configuração com puppetElton Simões
 
Oficina Puppet - Aprenda a Gerenciar Configurações
Oficina Puppet - Aprenda a Gerenciar ConfiguraçõesOficina Puppet - Aprenda a Gerenciar Configurações
Oficina Puppet - Aprenda a Gerenciar ConfiguraçõesJose Augusto Carvalho
 
Oficina postgresql avançado_consegi2010
Oficina postgresql avançado_consegi2010Oficina postgresql avançado_consegi2010
Oficina postgresql avançado_consegi2010Fabrízio Mello
 
Palestra DataFlow - II São Paulo Perl Workshop
Palestra DataFlow - II São Paulo Perl WorkshopPalestra DataFlow - II São Paulo Perl Workshop
Palestra DataFlow - II São Paulo Perl WorkshopAlexei Znamensky
 
Project HA
Project HAProject HA
Project HAKarpv
 
Monitoramento de Serviços de Bancos de Dados - Nagios
Monitoramento de Serviços de Bancos de Dados - NagiosMonitoramento de Serviços de Bancos de Dados - Nagios
Monitoramento de Serviços de Bancos de Dados - NagiosEduardo Legatti
 
Técnicas para preparação e desenvolvimento de sites em django
Técnicas para preparação e desenvolvimento de sites em djangoTécnicas para preparação e desenvolvimento de sites em django
Técnicas para preparação e desenvolvimento de sites em djangoMario Chaves
 
Puppet – Torne Seu Datacenter áGil
Puppet – Torne Seu Datacenter áGilPuppet – Torne Seu Datacenter áGil
Puppet – Torne Seu Datacenter áGiljefesrodrigues
 
Entre na fila. Processamento distribuído usando Gearman
Entre na fila. Processamento distribuído usando GearmanEntre na fila. Processamento distribuído usando Gearman
Entre na fila. Processamento distribuído usando GearmanElton Minetto
 
Gerenciamento de Configurações - Puppet
Gerenciamento de Configurações - PuppetGerenciamento de Configurações - Puppet
Gerenciamento de Configurações - PuppetRoberto Scudeller
 

Semelhante a Gerência de Configurações com o Puppet (20)

Gestão automática de configuração usando puppet
Gestão automática de configuração usando puppetGestão automática de configuração usando puppet
Gestão automática de configuração usando puppet
 
Consegi 2011: Puppet
Consegi 2011: PuppetConsegi 2011: Puppet
Consegi 2011: Puppet
 
Puppet overview
Puppet overviewPuppet overview
Puppet overview
 
Ferramentas para Automação de Datacenter
Ferramentas para Automação de DatacenterFerramentas para Automação de Datacenter
Ferramentas para Automação de Datacenter
 
Automação de Data Center
Automação de Data CenterAutomação de Data Center
Automação de Data Center
 
Gerenciamento de configuração com puppet
Gerenciamento de configuração com puppetGerenciamento de configuração com puppet
Gerenciamento de configuração com puppet
 
Oficina Puppet - Aprenda a Gerenciar Configurações
Oficina Puppet - Aprenda a Gerenciar ConfiguraçõesOficina Puppet - Aprenda a Gerenciar Configurações
Oficina Puppet - Aprenda a Gerenciar Configurações
 
Oficina postgresql avançado_consegi2010
Oficina postgresql avançado_consegi2010Oficina postgresql avançado_consegi2010
Oficina postgresql avançado_consegi2010
 
Palestra DataFlow - II São Paulo Perl Workshop
Palestra DataFlow - II São Paulo Perl WorkshopPalestra DataFlow - II São Paulo Perl Workshop
Palestra DataFlow - II São Paulo Perl Workshop
 
Project HA
Project HAProject HA
Project HA
 
Servlets
ServletsServlets
Servlets
 
Puppet webcast 4linux
Puppet webcast 4linuxPuppet webcast 4linux
Puppet webcast 4linux
 
Python 08
Python 08Python 08
Python 08
 
Monitoramento de Serviços de Bancos de Dados - Nagios
Monitoramento de Serviços de Bancos de Dados - NagiosMonitoramento de Serviços de Bancos de Dados - Nagios
Monitoramento de Serviços de Bancos de Dados - Nagios
 
PHP FrameWARks - FISL
PHP FrameWARks - FISLPHP FrameWARks - FISL
PHP FrameWARks - FISL
 
Técnicas para preparação e desenvolvimento de sites em django
Técnicas para preparação e desenvolvimento de sites em djangoTécnicas para preparação e desenvolvimento de sites em django
Técnicas para preparação e desenvolvimento de sites em django
 
Puppet – Torne Seu Datacenter áGil
Puppet – Torne Seu Datacenter áGilPuppet – Torne Seu Datacenter áGil
Puppet – Torne Seu Datacenter áGil
 
Entre na fila. Processamento distribuído usando Gearman
Entre na fila. Processamento distribuído usando GearmanEntre na fila. Processamento distribuído usando Gearman
Entre na fila. Processamento distribuído usando Gearman
 
Gerenciamento de Configurações - Puppet
Gerenciamento de Configurações - PuppetGerenciamento de Configurações - Puppet
Gerenciamento de Configurações - Puppet
 
Cakephp 2.0 - O que mudou
Cakephp 2.0 - O que mudouCakephp 2.0 - O que mudou
Cakephp 2.0 - O que mudou
 

Gerência de Configurações com o Puppet

  • 1. Gerência de Configurações com Puppet por Péricles S. da C. Jr. SEMCOMP 2015 Salvador/BA 2015.09.04
  • 2. $ whoami ● Péricles S. da C. Jr. ● Bolsista na CRI/STI UFBA ● Sysadmin Voluntário no grupo GRACO/DCC-UFBA ● Entusiasta FOSS (Debian GNU/Linux)
  • 3. Automação de Infraestrutura ● Processo de criar scripts de ambientes ● Replicação de configuração no ativo da Instituição ● Automatização das atividades operacionais. ● Infraestrutura Ágil. ○ Ter qualquer ambiente, seja PaaS, IaaS ou servidores físicos e independente do fornecedor utilizado. ● Gerência de configurações.
  • 4. Como é feita geralmente... ● Configuração manual de ambientes (humano) ● Processos propensos à erros ● Aumento dos tempos de ciclo ● Impossibilidade de escalabilidade
  • 5. Tarefas Repetivas ● Criação de usuários em servidores ● Elaboração de scripts ● Configuração de serviços ● Configuração de monitoramentos ● Criação de imagens de ambientes ● Configuração do sistema operacional ● Instalação, atualização e remoção de pacotes
  • 6. O que é o Puppet? ● Ferramenta com versão Opensource, sob licença Apache ● Desenvolvida pelo Luke Kanie (CEO da Puppetlabs ) ● Foco na Gerência de configurações ● Linguagem DSL declarativa ● Outras alternativas: ○ Chef ○ Salt ○ CFEngine ○ Ansible
  • 9. Legal não é! Mas pra que usar isso? ● Escalabilidade ● Gerenciamento de configurações: ○ Laboratórios (Ex: Desktops e Notebooks) ● Administrar Infraestrutura de grande escala ● Replicação de ambiente de produção ● Distribuição de atualizações críticas
  • 10. Imperativa vs. Declarativa ● Imperativa: ● Descrição de um algoritmo ou processo específico; ● Declarativa: ● Descrição do estado ou objetivo a ser alcançado.
  • 11. Exemplo ● Imperativa ○ “Faça um sanduíche” ○ Step by step ○ Receitas, procedimentos ou algoritmos ● Declarativa ○ “Desejo um sanduíche” ○ Deve existir um saduíche com pão francês, presunto, alface, tomate e etc, após essa apresentação no coffe-break para o palestrante!
  • 13. Componentes Descrição Agente Um daemon executando que coleta informações sobre o nó e envia essas informações ao Puppet principal. Catalog Compilação de fatos que especificam como configurar o nó. Facts Dados sobre um nó, enviados pelo nó para o Puppet Server. Manifest Descreve recursos e as dependências entre eles. Recursos Por exemplo, o pacote, arquivo ou serviço. Módulo Relacionados a grupos (em um diretório). Por exemplo, um module pode definir como um banco de dados como o MySQL é instalado, configurado e executado. Classes Coleção de recurso no puppet. Uma unidade lógica aplicada pelo agente através de uma definição de um nó. Nó Um host gerenciado. Os nós são definidos como classes, mas contêm o nome do host ou nome completo do domínio. Puppet Server O servidor que gerencia todos os nós do Puppet.
  • 14. Repositório de módulos Fonte: https://forge.puppetlabs.com/
  • 15. GIVE ME THE CODES
  • 16. Declaração de um nó node /^node[0-9][0-9].lab$/ { $rede= "homologacao" include apache include tomcat include ntp include aliases include openjdk_jre }
  • 17. root@puppetserver:~# tree /etc/puppet/modules/ssh/ /etc/puppet/modules/ssh/ ├── manifests │ ├── config.pp │ ├── init.pp │ ├── install.pp │ ├── params.pp │ └── service.pp └── templates └── sshd_config.erb 2 directories, 6 files
  • 18. class ssh { include ssh::install include ssh::params include ssh::config include ssh::service }
  • 19. class ssh::install { include ssh::params package { $ssh::params::packages: ensure => present, require => Class['repository::config'], } }
  • 20. class ssh::config { include ssh::params file { "/etc/ssh/sshd_config": ensure => present, owner => 'root', group => 'root', mode => '0600', content => template('ssh/sshd_config.erb'), require => Class["ssh::install"], notify => Class["ssh::service"], } }
  • 21. class ssh::service { include ssh::params service { $ssh::params::service: ensure => running, hasstatus => true, hasrestart => true, enable => true, require => Class["ssh::config"], } }
  • 22. class ssh::params { $packages = hiera('ssh_packages') $service = hiera('ssh_service') $port_var = hiera('ssh_port') $allow_groups_var = hiera('ssh_allow_groups') }
  • 23. --- ssh_packages: openssh-server ssh_service: ssh ssh_port: 6666 ssh_allow_groups: sysadmins devels
  • 24. case $rede { 'desenvolvimento': { $nameserver_var = ['192.168.xxx.xx'] $domain_var = ['foo.exemlo.br'] } 'dmz': { $nameserver_var = ['10.0.x.xxx','10.0.1.xxx'] $domain_var = ['bar.exemplo.br'] } 'homologacao': { $nameserver_var = ['192.168.xx.xx', '200.xxx.x.xx'] $domain_var = ['bla.exemplo.br'] } default: { fail("A ${rede} nao pertence a nenhuma rede de servidores") }
  • 25. <% @nameserver_var.each do |val| -%> nameserver <%= val %> <% end -%> <% @domain_var.each do |val_domain| -%> search <%= val_domain -%> <% end -%>
  • 28. Profiles e Roles class java( $distribution = 'jdk', $version = 'present', $package = undef, $java_alternative = undef, $java_alternative_path= undef ) { include java::params ...
  • 29. class profile::java::jre { class { 'java': distribution => 'jre', } contain ::java }
  • 30. class logstash { yumrepo { 'logstash-1.5': ... } -> package { 'logstash': ... } -> file {'/etc/logstash/conf.d/central.conf': ... } ~> service {'logstash': ... } }
  • 31. class role::logserver { include profile::java::jre include profile::elasticsearch include profile::logstash include profile::kibana include profile::logging Class['profile::java::jre'] -> Class['profile::elasticsearch'] Class['profile::elasticsearch'] -> Class['profile::logstash'] Class['profile::logstash'] -> Class['profile::kibana'] }
  • 32. Pensamento do dia! O “sucesso” do projeto de um bolsista depende do mouse ( by Madson )
  • 35. Opa!!! “Peraí”!!! ● Que opressão é essa? ● E seu meu ativo tiver somente M$-Window$, como é que eu fico!?!?!?
  • 36. Plataformas Suportadas ● Server 2003 e 2003 R2 ● Server 2008 e 2008 R2 ● Window$ 7 ● Server 2012
  • 37. Tipos de recursos Suportados ● File ● User ● Group ● Schedule_task ● Package ● Service ● Exec ● Host Fonte: https://docs.puppetlabs.com/references/latest/type.html Obs: 49 tipos de recursos em ambientes *nix.
  • 42. Referências ● http://www.ibm.com/developerworks/br/library/a-devops2/ ● http://softwarelivre.gov.br/palestras-tecnicas-cisl/palestra_puppet ● http://spin.atomicobject.com/2012/09/13/from-imperative-to-declarativ e-system-configuration-with-puppet/ ● http://www.example42.com/tutorials/PuppetTutorial ● http://www.olindata.com/blog/2014/02/how-can-i-use-puppet ● https://chocolatey.org/ ● http://docs.puppetlabs.com/windows/index.html ● http://www.slideshare.net/PuppetLabs/plugging-chocolatey-into-your- puppet-infrastructure-rob-reynolds-puppet-labs ● https://github.com/instruct-br/webinar-elk ● https://www.youtube.com/playlist?list=PLwbuDNhcHQgAr-d5sOB0xw pQw3SNbsnDa