Aviso:
Este tutorial foi atualizado para ensinar a montar o ambiente puppet usando o repositório da PuppetLabs para instalar pacotes do Puppet 4.x.
Se você ainda não sabe o que é Puppet, como funciona e para que serve, sugiro parar por aqui e começar a estudar pelo livro que publiquei pela Novatec https://novatec.com.br/livros/puppet/, pelos links que estão nesta página: http://blog.aeciopires.com/primeiros-passos-com-o-puppet/ ou se quiser instalar o Puppet-Server e o Puppet-Agent no Ubuntu Server 14.04/16.04 ou Debian 8, sugiro ler este tutorial: http://blog.aeciopires.com/configurando-um-ambiente-puppet/
Quando estiver se sentindo seguro no assunto, pode retomar a execução deste tutorial.
Entendendo o ambiente
Continuando… a figura abaixo mostra o ambiente usado para a execução deste tutorial.
O sistema operacional usado nas máquinas foram: CentOS 6 e 7 64 bits e Red Hat 6 e 7 64 bits. Os comandos mostrados a seguir funcionam nestas duas distribuições GNU/Linux.
Para a implementação do ambiente mostrado acima, foi configurado um servidor DHCP e um servidor DNS. Depois disso, foram criadas três máquinas virtuais para serem usadas pelo Puppet. As configurações de disco, memória e processador para as máquinas virtuais foram:
- Memória: 768 MB
- HD: 10 GB
- Processador: 1 com clock de 2.0 GHz
- 1 placa de rede
Preparando o ambiente
No servidor DHCP da sua rede, configure um IP e associe-o a cada endereço MAC da placa de rede de cada máquina que será usada.
Exemplos de configuração no arquivo do DHCP no GNU/Linux.
host puppetserver { hardware ethernet 08:00:27:e7:09:48; fixed-address 192.168.0.171; }
host puppet1 { hardware ethernet 08:00:27:81:d7:5e; fixed-address 192.168.0.172; }
host puppet2 { hardware ethernet 08:00:27:d0:d9:66; fixed-address 192.168.0.173; }
Exemplos de configuração no arquivo de zona do domínio domain.com.br no Bind9 no GNU/Linux.
puppetserver IN A 192.168.0.171 puppet1 IN A 192.168.0.172 puppet2 IN A 192.168.0.173
Exemplos de configuração no arquivo de zona reversa do domínio domain.com.br no Bind9 no GNU/Linux.
171 IN PTR puppetserver.domain.com.br. 172 IN PTR puppet1.domain.com.br. 173 IN PTR puppet2.domain.com.br.
Em cada máquina, configure os nomes de host e de domínio editando os arquivos /etc/hosts, /etc/hostname e /etc/resolv.conf
Exemplos de configuração para cada arquivo
Puppet-Server
/etc/hostname puppetserver.domain.com.br
/etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
192.168.0.171 puppetserver puppetserver.domain.com.br
192.168.0.172 puppet1 puppet1.domain.com.br
192.168.0.173 puppet2 puppet2.domain.com.br
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
/etc/resolv.conf domain domain.com.br search domain.com.br nameserver IP-DNS-SERVER
Puppet-Agent 1
/etc/hostname puppet1.domain.com.br
/etc/hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 192.168.0.171 puppetserver puppetserver.domain.com.br 192.168.0.172 puppet1 puppet1.domain.com.br 192.168.0.173 puppet2 puppet2.domain.com.br ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
/etc/resolv.conf domain domain.com.br search domain.com.br nameserver IP-DNS-SERVER
Puppet-Agent 2
/etc/hostname puppet2.domain.com.br
/etc/hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 192.168.0.171 puppetserver puppetserver.domain.com.br 192.168.0.172 puppet1 puppet1.domain.com.br 192.168.0.173 puppet2 puppet2.domain.com.br ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
/etc/resolv.conf domain domain.com.br search domain.com.br nameserver IP-DNS-SERVER
Aviso:
Procure manter a hora do sistema de cada máquina corretamente configurada utilizando NTP, para evitar problemas na assinatura de certificados, entre outros.A porta 8140/TCP do servidor PuppetServer precisa estar acessível para as demais máquinas.
Para a execução deste tutorial, o firewall foi parado em todas as máquinas com os comandos abaixo.
No CentOS/Red Hat 6:
# service iptables save # service ip6tables save # service iptables stop # service ip6tables stop # chkconfig iptables off # chkconfig ip6tables off
No CentOS/Red Hat 7:
systemctl stop firewalld systemctl disable firewalld
Instalando os pacotes
Adicionando o repositório da PuppetLabs no CentOS 6/Red Hat 6:
su -
yum install -y https://yum.puppetlabs.com/puppetlabs-release-pc1-el-6.noarch.rpm
su -
yum install -y https://yum.puppetlabs.com/puppetlabs-release-pc1-el-7.noarch.rpm
yum install -y puppet-agent puppetserver
export PATH=/opt/puppetlabs/bin:$ PATH
Nas máquinas que terá o Puppet-Agent, instale o pacote abaixo.
yum -y install puppet-agent
export PATH=/opt/puppetlabs/bin:$ PATH
Verifique a versão do Puppet com o comando abaixo.
puppet --version
Aviso:
Os binários e libs do Puppet 4.x ficam, por padrão, dentro do diretório /opt/puppetlabs/bin.
Os arquivos de configuração ficam, por padrão, dentro do diretório /etc/puppetlabs/.
Configurando os serviços
No arquivo /etc/puppetlabs/puppet/puppet.conf de cada máquina (Puppet-Agent), adicione as linhas abaixo e mude o intervalo de tempo (em segundos), que o agente se conectará ao server para atualização do catálogo de manifestos.
Exemplo para a máquina puppet1:
[main]
certname = puppet1.domain.com.br
server = puppetserver.domain.com.br
# intervalo em segundos
runinterval = 60
Exemplo para a máquina puppet2:
[main]
certname = puppet2.domain.com.br
server = puppetserver.domain.com.br
# intervalo em segundos
runinterval = 60
No arquivo /etc/puppetlabs/puppet/puppet.conf da máquina (Puppet-Server), adicione as linhas abaixo.
Exemplo para a máquina puppetserver:
[master]
vardir = /opt/puppetlabs/server/data/puppetserver
logdir = /var/log/puppetlabs/puppetserver
rundir = /var/run/puppetlabs/puppetserver
pidfile = /var/run/puppetlabs/puppetserver/puppetserver.pid
codedir = /etc/puppetlabs/code
[main]
certname = puppetserver.domain.com.br
server = puppetserver.domain.com.br
#intervalo em segundos
runinterval = 60
strict_variables = true
JAVA_ARGS="-Xms256m -Xmx512m"
Gerando certificados e reiniciando os serviços
Na máquina PuppetServer, gere um certificado e reinicie os serviço com os comandos abaixo.
puppet cert generate puppetserver.domain.com.br
puppet resource service puppetserver ensure=running enable=true
Nas máquinas que possuem o puppet-agent, gere uma solicitação de assinatura de certificado com o comando abaixo.
puppet agent -t
No servidor Puppet-Server aparecerá a solicitação de assinatura para cada máquina que tem apenas o Puppet-Agent.
puppet cert list "puppet1.domain.com.br" (SHA256) C7:EC:72:6F:82:56:9E:15:C8:42:2D:A7:07:07:B7:B6:AC:41:45:DC:33:BA:09:B5:1A:3D:2C:14:31:32:D7:D4 "puppet2.domain.com.br" (SHA256) 49:0D:A2:2B:7E:4B:EE:2E:85:CC:B4:16:F9:C1:56:C8:75:63:0C:EF:C4:0E:96:FA:42:4E:09:32:CB:B2:E1:FF
Assine cada certificado usando os comandos abaixo.
puppet cert sign puppet1.domain.com.br
puppet cert sign puppet2.domain.com.br
Aviso:As solicitações de assinatura de certificados no Puppet-Server ficam em: /etc/puppetlabs/puppet/ssl/ca/requests/
No Puppet-Agent, os certificados assinados ficam em: /etc/puppetlabs/puppet/ssl/Se precisar refazer a assinatura de certificados do host puppet-agent é só apagar os arquivos e sub-diretórios que ficam em: /etc/puppetlabs/puppet/ssl/.Se precisar revogar os certificados assinados de um host cliente (puppet1, por exemplo) no Puppet-Server é só usar o comando: puppet cert clean puppet1.domain.com.br (por exemplo).O log do puppetserver fica em /var/log/puppetlabs/puppetserver/puppetserver.log e /var/log/puppetlabs/puppetserver/puppetserver-daemon.log
O log do puppet-agent fica em /var/log/messages e /var/log/puppetlabs/puppet
Agora execute o comando abaixo, em cada máquina (Puppet-Server e Puppet-Agent). Este comando irá iniciar o puppet-agent e habilitá-lo para ser executado após o boot do sistema operacional.
puppet resource service puppet ensure=running enable=true
Testando o funcionamento do ambiente
No servidor PuppetServer, crie o arquivo /etc/puppetlabs/code/environments/production/manifests/site.pp com o conteúdo abaixo.
node "puppet1.domain.com.br" {
package { 'nmap':
ensure => present,
}
}
node "puppet2.domain.com.br" {
package { 'elinks':
ensure => present,
}
}
node "puppetserver.domain.com.br" {
package { 'tcpdump':
ensure => present,
}
}
Salve o arquivo e execute em todas as máquinas o comando abaixo.
puppet agent -t
Verifique se pacotes foram realmente instalados conforme a configuração especificada no arquivo site.pp.
- Na máquina puppet1 deve ser instalado o pacote “nmap”
- Na máquina puppet2 deve ser instalado o pacote “elinks”
- Na máquina puppetserver deve ser instalado o pacote “tcpdump”.
Pronto! O ambiente está configurado. Agora é só instalar os módulos e manifestos que você precisa.
Para aprender mais sobre o Puppet, veja o livro que publiquei pela editora Novatec: https://novatec.com.br/livros/puppet/
Bons estudos!
Fonte:
http://gutocarvalho.net/octopress/2015/08/18/instalando-puppet-4-agent-and-master/
http://blog.aeciopires.com/configurando-um-ambiente-puppet/
http://instruct.com.br/static/apostila-puppet.pdf
http://techarena51.com/index.php/a-simple-way-to-install-and-configure-a-puppet-server-on-linux/
https://puppetlabs.com/blog/puppet-server-bringing-soa-to-a-puppet-master-near-you
https://github.com/puppetlabs/puppet-server/blob/master/documentation/install_from_packages.markdown
https://docs.puppetlabs.com/puppet/latest/reference/config_file_main.html
https://docs.puppetlabs.com/puppet/4.2/reference/install_pre.html
https://docs.puppetlabs.com/puppetserver/2.1/install_from_packages.html
https://docs.puppetlabs.com/puppetdb/latest/connect_puppet_master.html
https://docs.puppetlabs.com/puppet/4.2/reference/install_linux.html
https://docs.puppetlabs.com/puppetserver/2.1/configuration.html
Aécio,
Como comentei no Grupo do Google, o seu tutorial é excelente e me ajudou bastante.
Para finalizar eu gostaria de instalar uma ferramenta WEB, como tem no Puppet Enterprise. Me indicaram o Puppet Explorer e Puppet Board, porem, como não tenho intimidade com o Puppet ainda estou apanhando bastante para instalar.
Você já instalou algumas destas ferramentas? Se sim teria um passo a passo para indicar?
Forte abraço
Boa noite, Cássio!
Infelizmente, não tenho um tutorial de instalação do Puppet Explorer. Ainda não instalei nem testei ele. Atualmente não uso nenhuma interface web para gerenciamento de Puppet.
Abraço.