User Tools

Site Tools


instalando:centos

objetivo

Descrever como executar a instalação do serviço puppetserver 1.x (puppet3x) em CentOS 6.x controlando um agente.

sobre o puppet

O Puppet é uma ferramenta que nos permite fazer o gerenciamento das configurações dos sistemas e serviços de um parque UNIX/LINUX.

virtual machine

Neste lab eu utilizei VMWARE Fusion em MacOSx.

Criei duas VM com:

1 PROC, 
1 GB de RAM, 
10 GB de disco,
2 NICs (Network Interface Card).

Fiz uma instalação limpa do CENTOS 6.x 64 bits, defini o nome do server como puppet.hacklab e na VM do agente agent.hacklab.

A primeira placa de rede defini como NAT.

A segunda placa de rede será utilizada com IP estático.

É importante que seu VMWARE tenha alguma rede privada virtual para comunicação entre Puppet Master e Agents.

requisitos

rede

Caso queria, instale o pacote system-config-network-tui.noarch para configurar suas placas de rede

# yum install system-config-network-tui

Depois basta executar o configurador

# system-config-network

E a configuração da placa de rede será bem simples.

server

A VM terá duas placas de rede

NIC 1: modo NAT
NIC 2: private network (192.168.200.1)

Nossa rede terá o nome hacklab e o fqdn do servidor será puppet.hacklab.

É importante que a segunda placa de rede esteja corretamente configurada com o IP descrito acima.

As configurações devem estar estáticas, caso a VM reinicie elas devem estar funcionando automaticamente.

agente

A VM terá duas placas de rede

NIC 1: modo NAT
NIC 2: private network (192.168.200.2)

Nossa rede terá o nome hacklab e o fqdn do agente será agent.hacklab.

É importante que a segunda placa de rede esteja corretamente configurada com o IP descrito acima.

As configurações devem estar estáticas, caso a VM reinicie elas devem estar funcionando automaticamente.

hostname

As configurações de hostname e fqdn são muito importantes para uma série de serviços, incluindo o Puppet, no caso específico do puppet esse nome é utilizado durante a geração do certificado digital dos nodes e master.

server

Precisamos ajustar nosso hostname no arquivo /etc/hosts

[root@puppet ~]# vim /etc/hosts

Adicione a seguinte entrada

192.168.200.1 puppet.hacklab puppet

Agora vamos ajustar o arquivo /etc/sysconfig/network

[root@puppet ~]# vim /etc/sysconfig/network

Agora ajuste o nome do hostname

HOSTNAME=puppet.hacklab

Agora sete o hostname de sua sessão, deslogue e logue novamente.

[root@puppet ~]# hostname puppet.hacklab

Caso você tenha tomado o cuidado de definir estas configurações durante a instalação, nada deverá ser feito.

agent

Precisamos ajustar nosso hostname no arquivo /etc/hosts

[root@agent ~]# vim /etc/hosts

Adicione a seguinte entrada

192.168.200.2 agent.hacklab 

Agora vamos ajustar o arquivo /etc/sysconfig/network

[root@agent ~]# vim /etc/sysconfig/network

Agora ajuste o nome do hostname

HOSTNAME=agent.hacklab

Ajuste o hostname de sua sessão, deslogue e logue novamente

[root@agent ~]# hostname agent.hacklab

Caso você tenha tomado o cuidado de definir estas configurações durante a instalação, nada deverá ser feito.

repositórios

Basicamente precisamos do repositório puppet oficial habilitado, procure sempre utilizar os pacotes oficiais da puppetlabs, evite usar pacotes locais de sua distribuição, eles provavelmente estarão desatualizados.

Eu costumo manter o repositório epel habilitado, mas não é obrigatório.

epel

Caso queira habilitar o EPEL (faça nas duas vms)

# yum install http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm

Pronto.

puppetlabs

Para detalhes do repositório YUM acesse a URL abaixo

 http://yum.puppetlabs.com

Vamos prosseguir com a configuração do repositório ( faça nas duas vms )

[root@puppet ~]# yum install http://yum.puppetlabs.com/puppetlabs-release-el-6.noarch.rpm

Atualize os índices de pacotes

[root@puppet ~]# yum update

Veja a versão do pacote puppet-server

[root@puppet ~]# yum info puppet-server.noarch

saída

[root@puppet ~]# yum info puppet-server
Loaded plugins: fastestmirror, presto
Loading mirror speeds from cached hostfile
 * base: centos.secrel.com.br
 * epel: epel.gtdinternet.com
 * extras: centos.secrel.com.br
 * updates: centos.secrel.com.br
Available Packages
Name        : puppet-server
Arch        : noarch
Version     : 3.3.2
Release     : 1.el6
Size        : 23 k
Repo        : puppetlabs-products
Summary     : Server for the puppet system management tool
URL         : http://puppetlabs.com
License     : ASL 2.0
Description : Provides the central puppet server daemon which provides manifests to clients.
            : The server can also function as a certificate authority and file server.

Perfeito, a configuração dos repositório funcionou adequadamente, vamos partir para a instalação do puppet-server.

instalação

puppetserver

primeiro passo é atualizar todos os pacotes do servidor

[root@puppet ~]# yum update -y

após atualizar, reinicie a vm

[root@puppet ~]# reboot

após o retorno da vm, instale o puppetserver

[root@puppet ~]# yum install puppetserver

ative o puppet-server no boot

[root@puppet ~]# chkconfig puppetserver on

edite as configurações da jvm do puppetserver

[root@puppet ~]# vim /etc/sysconfig/puppetserver

ajuste a memória da jvm conforme suas necessidades

JAVA_ARGS="-Xms2g -Xmx2g -XX:MaxPermSize=256m"

libere a porta do puppet no iptables

[root@puppet ~]# vim /etc/sysconfig/iptables

adicione a linha abaixo da regra de ssh (porta 22)

-A INPUT -m tcp -p tcp --dport 8140 -j ACCEPT

reinicie o iptables para ativar a regra

[root@puppet ~]# service iptables restart  

inicie o puppetserver

[root@puppet ~]# service puppetserver start

pronto, o puppetserver está devidamente instalado e rodando.

puppet agent

primeiro passo é atualizar todos os pacotes do servidor

[root@agent ~]# yum update -y

após atualizar, reinicie a vm

[root@agent ~]# reboot

após o retorno da vm, instale o puppet agent

[root@agent ~]# yum install puppet

ative o puppet agent no boot

[root@agent ~]# chkconfig puppet on

pronto, o puppet agent está devidamente instalado.

configurando

agent

host

Antes de rodarmos o agente precisarmos verificar se é possível enxergar o servidor puppet (master).

[root@agent ~]# ping 192.168.200.1 -c 4
PING 192.168.200.1 (192.168.200.1) 56(84) bytes of data.
64 bytes from 192.168.200.1: icmp_seq=1 ttl=64 time=0.305 ms
64 bytes from 192.168.200.1: icmp_seq=2 ttl=64 time=0.318 ms
64 bytes from 192.168.200.1: icmp_seq=3 ttl=64 time=0.445 ms
64 bytes from 192.168.200.1: icmp_seq=4 ttl=64 time=0.364 ms

--- 192.168.200.1 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3002ms
rtt min/avg/max/mdev = 0.305/0.358/0.445/0.054 ms

Ótimo, agora precisamos fazer com que o nome puppet seja resolvido para este endereço, podemos fazer isto via DNS (ideal) ou usar um contorno no /etc/hosts, fiz o contorno.

vim /etc/hosts

Adicione a linha abaixo

192.168.200.1 puppet.hacklab puppet

Pronto, agora vamos testar o ping

root@agent ~]# ping puppet -c 4
PING puppet.hacklab (192.168.200.1) 56(84) bytes of data.
64 bytes from puppet.hacklab (192.168.200.1): icmp_seq=1 ttl=64 time=0.325 ms
64 bytes from puppet.hacklab (192.168.200.1): icmp_seq=2 ttl=64 time=0.318 ms
64 bytes from puppet.hacklab (192.168.200.1): icmp_seq=3 ttl=64 time=0.285 ms
64 bytes from puppet.hacklab (192.168.200.1): icmp_seq=4 ttl=64 time=0.418 ms

--- puppet.hacklab ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3003ms
rtt min/avg/max/mdev = 0.285/0.336/0.418/0.052 ms

Perfeito, é fundamental que o agente do puppet consiga resolver o nome puppet, do contrário precisaríamos setar o nome do servidor manualmente no /etc/puppet/puppet.conf.

first run

Agora finalmente podemos rodar o puppet.

[root@agent ~]# puppet agent --test

Acompanhe a saída

Info: Creating a new SSL key for agent.hacklab
Info: Caching certificate for ca
Info: Creating a new SSL certificate request for agent.hacklab
Info: Certificate Request fingerprint (SHA256):   11:29:56:2C:A8:56:D0:B7:58:F7:E9:25:37:E5:22:E2:16:B2:9A:0E:2F:2F:D1:A1:21:39:97:B8:E7:7C:F0:0B
Exiting; no certificate found and waitforcert is disabled

Veja que na primeira vez que rodei o Puppet foi gerado um certificado chamado agent.hacklab, e logo depois foi enviado um pedido de assinatura para o servidor puppet. Observe agora como é importante configurar corretamente hostname e fqdn antes de rodar o agente pela primeira vez, e veja que depois de gerar o certificado nada mais aconteceu e recebemos a seguinte mensagem

Exiting; no certificate found and waitforcert is disabled

O que o puppet quer dizer é que o certificado ainda não foi 'autorizado' do lado do master, e por isso nada mais foi executado, agora vamos ao lado do master configurar.

master

certificados

No master precisamos declarar explícitamente quem pode ser gerenciado, isso é feito através dos certificados que são gerados durante o 'first run' do agente, vamos então autorizar o servidor 'agent.hacklab' a ser gerenciado pelo master (puppet). Primeiro precisamos listar os certificados que estão disponíveis para assinarmos

 [root@puppet ~]# puppet cert --list

Acompanhe a saída

"agent.hacklab" (SHA256) 11:29:56:2C:A8:56:D0:B7:58:F7:E9:25:37:E5:22:E2:16:B2:9A:0E:2F:2F:D1:A1:21:39:97:B8:E7:7C:F0:0B

Ótimo, o certificado do agent.hacklab está diponível para assinarmos

[root@puppet ~]# puppet cert sign agent.hacklab

Acompanhe a saída

Notice: Signed certificate request for agent.hacklab
Notice: Removing file Puppet::SSL::CertificateRequest agent.hacklab at '/var/lib/puppet/ssl/ca/requests/agent.hacklab.pem'

Pronto agora o certificado do node agent.hacklab está devidamente autorizado, este node poderá utilizar o puppet.

environments

master

No servidor master vamos criar o environment de produção

[root@puppet ~]# mkdir /etc/puppet/environments
[root@puppet ~]# mkdir /etc/puppet/environments/production
[root@puppet ~]# mkdir /etc/puppet/environments/production/manifests
[root@puppet ~]# mkdir /etc/puppet/environments/production/modules

Adicione a seção [master] no /etc/puppet/puppet.conf do servidor master

[master]
ssldir           = /var/lib/puppet/ssl
certname         = puppet.hacklab
strict_variables = false
environmentpath  = /etc/puppet/environments
basemodulepath   = /etc/puppet/environments/common:/etc/puppet/modules:/usr/share/puppet/modules

Adicione o atributo environment na seção [agent] do arquivo

environment = production

Reinicie o puppetserver para ele ler as configurações do puppet.conf

[root@puppet ~]# service puppetserver restart

agent

Edite o arquivo de configuração do puppet

[root@agent ~]# vim /etc/puppet/puppet.conf

Adicione o atributo environment na seção [agent]

environment = production

Reinicie o agente

[root@agent ~]# service puppet restart

Pronto, agora seu agente esta devidamente configurado para utilizar o environment production.

puppetizando

agente

Agora vamos no node rodar novamente o agente

[root@agent ~]# puppet agent --test

Acompanhe a saída

Info: Caching certificate for agent.hacklab
Info: Caching certificate_revocation_list for ca
Info: Retrieving plugin
Info: Caching catalog for agent.hacklab
Info: Applying configuration version '1387328101'
Info: Creating state file /var/lib/puppet/state/state.yaml
Notice: Finished catalog run in 0.04 seconds

Perfeito, o agente se conectou no master, o certificado foi aceito, ele solicitou suas configurações e encerrou a execução. Perceba que nada foi feito, isso ocorre pois ainda não declaramos nada para esse node, vamos então declarar alguma coisa para ele lá no master.

master

O arquivo principal do puppetserver chama-se site.pp e fica localizado em /etc/puppet/manifests, é neste arquivo que devemos declarar nossas configurações, vamos fazer um exemplo bastante simples, vamos declarar um pacote que deverá ser instalado no agent.hacklab.

[root@puppet ~]# vim  /etc/puppet/environments/production/manifests/site.pp

Vamos declarar

node "agent.hacklab" {

        package { "htop":
                ensure => present,
        }
}

Perfeito, salve o arquivo e vamos executar novamente o puppet no agente.

aplicando configurações

agente

Primeiro verifique se o htop está instalado

[root@agent ~]# htop
-bash: htop: comando não encontrado

Perfeito, agora vamos rodar o puppet.

[root@agent ~]# puppet agent --test

Acompanhe a saída

Info: Retrieving plugin
Info: Caching catalog for agent.hacklab
Info: Applying configuration version '1387328561'
Notice: /Stage[main]//Node[agent.hacklab]/Package[htop]/ensure: created
Notice: Finished catalog run in 5.03 seconds

Ótimo, veja que o pacote htop foi instalado pelo Puppet, sua primeira configuração em rede foi realizada.

amarrando as pontas

Bom, aqui neste primeiro artigo vimos como instalar e configurar um servidor Puppet em ambiente CentOS, e como empurrar uma configuração para um servidor gerenciado pelo puppet, foi um passo a passo bem rápido, sem muita teoria, contudo a partir daqui é necessário mergulhar na documentação para entender e aprender como criar suas configurações.

Recomendo a leitura

Esta página está precisando de uma atualizada, e em breve será migrada para cá, contudo, ela te dará os fundamentos do puppet de forma resumida.

Em breve mais artigos.

referências

instalando/centos.txt · Last modified: 2015/10/23 12:19 by gutocarvalho