Mudanças entre as edições de "Puppet"

De MSTECH wiki
Ir para: navegação, pesquisa
(Puppet – Como instalar e configurar o Puppet Server, Puppet Cliente e Módulos de Configuração)
 
(21 revisões intermediárias pelo mesmo usuário não estão sendo mostradas)
Linha 2: Linha 2:
 
== Puppet – Como instalar e configurar o Puppet Server, Puppet Cliente e Módulos de Configuração ==
 
== Puppet – Como instalar e configurar o Puppet Server, Puppet Cliente e Módulos de Configuração ==
  
'''Neste tutorial nós vamos instalar e configurar o Puppet Server, instalar o Puppet nos clientes e criar os módulos de configuração do Puppet.
+
'''Neste tutorial nós vamos instalar e configurar o Puppet Server, instalar o Puppet nos clientes e criar os módulos de configuração do Puppet.'''
Introdução.'''
+
  
O Puppet é uma ferramenta que permite a gerência e configuração de arquivos ou aplicações, na prática isto quer dizer que você consegue manter seu parque de hosts (desktops e servidores) com arquivos de configuração padronizados, pacotes e aplicativos atualizados, permite a gestão de usuários, monitoração de aplicações, aplicação de mudanças no ambiente de forma rápida e instalação de Sistema Operacional de forma automatizada.
+
'''''Introdução.'''''
  
Puppet também faz Orquestração, ou seja você consegue executar comandos em vários servidores ao mesmo tempo, por exemplo saiu um bug e você precisa atualizar um pacote rapidamente, com a Orquestração do Puppet isto é fácil e rápido, não importa o número de hosts, isto se tornará trivial.
+
O Puppet é uma ferramenta que permite a gerência e configuração de arquivos ou aplicações, na prática isto quer dizer que você consegue manter seu parque de hosts (desktops e servidores) com arquivos de configuração padronizados, pacotes e aplicativos atualizados, permite a gestão de usuários, monitoração de aplicações, aplicação de mudanças no ambiente de forma rápida.
 +
 
 +
Puppet também faz Orquestração, ou seja você consegue executar comandos em vários servidores ao mesmo tempo, por exemplo saiu um bug e você precisa atualizar um pacote rapidamente, com a Orquestração do Puppet isto é fácil e rápido, não importa o número de hosts.
  
 
Puppet conta também com o Facter, que permite colher qualquer informação dos hosts, como detalhes do hardware e software instalados, ele atua como uma “ferramenta de inventário”.
 
Puppet conta também com o Facter, que permite colher qualquer informação dos hosts, como detalhes do hardware e software instalados, ele atua como uma “ferramenta de inventário”.
Linha 14: Linha 15:
 
Vamos lá.
 
Vamos lá.
  
'''1. Infraestrutura do ambiente'''
+
=== Infraestrutura do ambiente ===
  
 
Tenha pelo menos 1 VM para o Puppet Master 1 VM para ser o cliente.
 
Tenha pelo menos 1 VM para o Puppet Master 1 VM para ser o cliente.
  
Utilizado neste Lab.
+
Utilizado neste Laboratório.
 
Sistema Operacional Centos 7 64 bits – instalação mínima e atualizada.
 
Sistema Operacional Centos 7 64 bits – instalação mínima e atualizada.
 
1 x Puppet Server (Puppet Master) – puppet.mstech.com.br (192.168.13.42)
 
1 x Puppet Server (Puppet Master) – puppet.mstech.com.br (192.168.13.42)
 
1 x Puppet Client – agente-puppet.mstech.com.br (192.168.11.11)
 
1 x Puppet Client – agente-puppet.mstech.com.br (192.168.11.11)
  
'''2. Pré-requisitos'''
+
==== Pré-requisitos ====
  
 
Todos os servidores e clientes devem estar com o hostname padronizado da seguinte forma: nome_hostname.dominio.com.br nome_hostname.
 
Todos os servidores e clientes devem estar com o hostname padronizado da seguinte forma: nome_hostname.dominio.com.br nome_hostname.
<syntaxhighlight lang="console" line="1" >
+
<syntaxhighlight lang="console" ># cat  /etc/hosts</syntaxhighlight >
# cat  /etc/hosts
+
<syntaxhighlight lang="console"  >
192.168.11.11    puppet.mstech.com.br    puppet
+
192.168.11.11    puppet.mstech.com.br    puppet
 +
192.168.13.42    agente-puppet.mstech.com.br  agente-puppet
 
</syntaxhighlight >
 
</syntaxhighlight >
 
+
 
+
'''3. Instalação dos repositórios'''
+
==== Instalação dos repositórios ====
  
 
Instalar o repositório puppet tanto no Puppet Server como nos clientes.
 
Instalar o repositório puppet tanto no Puppet Server como nos clientes.
<syntaxhighlight lang="console" line="1" >
+
<syntaxhighlight lang="console" >
 
# rpm -hiv https://yum.puppetlabs.com/puppetlabs-release-pc1-el-7.noarch.rpm
 
# rpm -hiv https://yum.puppetlabs.com/puppetlabs-release-pc1-el-7.noarch.rpm
 
</syntaxhighlight >
 
</syntaxhighlight >
  
'''4. Instalação e configuração do Puppet Server'''
+
=== Instalação e configuração do Puppet Server ===
  
 
Junto do pacote puppetserver, também será instalado o puppetclient.
 
Junto do pacote puppetserver, também será instalado o puppetclient.
  
<syntaxhighlight lang="console" line="1" >
+
<syntaxhighlight lang="console" >
 
# yum install puppetserver
 
# yum install puppetserver
 
</syntaxhighlight >
 
</syntaxhighlight >
Linha 49: Linha 51:
 
Por padrão o Puppet vem com o JVM (java) configurado para subir utilizando 2GB RAM, que é o mínimo recomendado, porém se o seu servidor não dispor desta memória, altere a configuração da JVM conforme a sua necessidade.
 
Por padrão o Puppet vem com o JVM (java) configurado para subir utilizando 2GB RAM, que é o mínimo recomendado, porém se o seu servidor não dispor desta memória, altere a configuração da JVM conforme a sua necessidade.
  
'''Adicional: Dê uma olhada no tópico Tuning do Puppet http://devopslab.com.br/tuning-do-puppet-server/'''
+
'''Adicional: Dê uma olhada no tópico Tuning do Puppet http://devops.com.br/tuning-do-puppet-server/'''
  
 
Altere a linha “JAVA_ARGS”.
 
Altere a linha “JAVA_ARGS”.
<syntaxhighlight lang="console" line="1" >
+
<syntaxhighlight lang="console" ># vi /etc/sysconfig/puppetserver</syntaxhighlight >
# vi /etc/sysconfig/puppetserver
+
<syntaxhighlight lang="vim"  >JAVA_ARGS="-Xms1g –Xmx1g -XX:MaxPermSize=256m"</syntaxhighlight >
JAVA_ARGS="-Xms1g –Xmx1g -XX:MaxPermSize=256m"
+
</syntaxhighlight >
+
  
 
'''Inicie o Puppet server e habilite o startup automático.'''
 
'''Inicie o Puppet server e habilite o startup automático.'''
<syntaxhighlight lang="console" line="1" >
+
<syntaxhighlight lang="console" >
 
# systemctl start puppetserver.service
 
# systemctl start puppetserver.service
 
# systemctl enable puppetserver.service
 
# systemctl enable puppetserver.service
Linha 64: Linha 64:
  
 
'''Configure o puppet agente.'''
 
'''Configure o puppet agente.'''
<syntaxhighlight lang="console" line="1" >
+
<syntaxhighlight lang="console" ># vi /etc/puppetlabs/puppet/puppet.conf</syntaxhighlight >
#vi /etc/puppetlabs/puppet/puppet.conf
+
<syntaxhighlight lang="vi" >  
</syntaxhighlight >
+
<syntaxhighlight lang="console" line="1" >
+
 
[agent]
 
[agent]
server = puppetserver-01.devopslab.com.br
+
server = puppet.mstech.com.br
 
</syntaxhighlight >
 
</syntaxhighlight >
  
 
Inicie e ative o Puppet Agent.
 
Inicie e ative o Puppet Agent.
<syntaxhighlight lang="console" line="1" >
+
<syntaxhighlight lang="console" >
#systemctl start puppet.service
+
# systemctl start puppet.service
#systemctl enable puppet.service
+
# systemctl enable puppet.service
 
</syntaxhighlight >
 
</syntaxhighlight >
  
 
'''Gere o certificado SSL do agente.'''
 
'''Gere o certificado SSL do agente.'''
 
+
<syntaxhighlight lang="console" >
 
# puppet agent -t
 
# puppet agent -t
 +
</syntaxhighlight >
 +
<syntaxhighlight lang="console"  >
 
Info: Using configured environment 'production'
 
Info: Using configured environment 'production'
 
Info: Retrieving pluginfacts
 
Info: Retrieving pluginfacts
 
Info: Retrieving plugin
 
Info: Retrieving plugin
Info: Caching catalog for puppetserver-01.devopslab.com.br
+
Info: Caching catalog for puppetserver-01.devops.com.br
 
Info: Applying configuration version '1455913339'
 
Info: Applying configuration version '1455913339'
 
Info: Creating state file /opt/puppetlabs/puppet/cache/state/state.yaml
 
Info: Creating state file /opt/puppetlabs/puppet/cache/state/state.yaml
 
Notice: Applied catalog in 0.01 seconds
 
Notice: Applied catalog in 0.01 seconds
Libere a porta 8140/tcp no Firewall
+
</syntaxhighlight >
firewall-cmd --permanent --add-port=8140/tcp
+
 
systemctl reload firewalld
+
=== Instalação e configuração do Cliente ===
5. Instalação e configuração do Cliente
+
 
Aqui vamos instalar o puppet no cliente “puppetclient-01.devopslab.com.br”.
+
Aqui vamos instalar o puppet no cliente “agente-puppet.mstech.com.br”.
Faça o login no host cliente (puppetclient-01.devopslab.com.br) e instale o repositório e o Puppet agent.
+
Faça o login no host cliente (agente-puppet.mstech.com.br) e instale o repositório e o Puppet agent.
#rpm -hiv https://yum.puppetlabs.com/puppetlabs-release-pc1-el-7.noarch.rpm
+
<syntaxhighlight lang="console" >
 
+
# rpm -hiv https://yum.puppetlabs.com/puppetlabs-release-pc1-el-7.noarch.rpm
#yum -y install puppet-agent
+
# yum -y install puppet-agent
 +
</syntaxhighlight >
 +
 
 
Não inicie o puppet ainda.
 
Não inicie o puppet ainda.
 
Carregue o PATH do puppet para incluir os comandos do puppet. Isto deveria ser automático e acontece apenas neste versão, possívelmente será corrigido em novas versões do puppet cliente.
 
Carregue o PATH do puppet para incluir os comandos do puppet. Isto deveria ser automático e acontece apenas neste versão, possívelmente será corrigido em novas versões do puppet cliente.
#source  /etc/profile.d/puppet-agent.sh
+
<syntaxhighlight lang="console" >
Edite o puppet.conf e aponte para o server Puppet Server.
+
# source  /etc/profile.d/puppet-agent.sh
#vi /etc/puppetlabs/puppet/puppet.conf
+
</syntaxhighlight >
 
+
 
 +
Edite o puppet.conf e aponte para o Puppet Server.
 +
<syntaxhighlight lang="console" ># vi /etc/puppetlabs/puppet/puppet.conf</syntaxhighlight >
 +
<syntaxhighlight lang="vim"  >
 
[agent]
 
[agent]
server = puppetserver-01.devopslab.com.br
+
server = puppet.mstech.com.br
 +
</syntaxhighlight >
 +
 
 
Agora inicie e ative o startup automático do Puppet agent.
 
Agora inicie e ative o startup automático do Puppet agent.
systemctl enable puppet.service
+
<syntaxhighlight lang="console" >
systemctl start puppet.service
+
# systemctl enable puppet.service
 +
# systemctl start puppet.service
 +
</syntaxhighlight >
 +
 
 
Rode o puppet pela primeira vez.
 
Rode o puppet pela primeira vez.
#puppet agent -t
+
<syntaxhighlight lang="console" ># puppet agent -t</syntaxhighlight >
 +
<syntaxhighlight lang="console"  >
 
Exiting; no certificate found and waitforcert is disabled
 
Exiting; no certificate found and waitforcert is disabled
 +
</syntaxhighlight >
 +
 
O puppet cliente vai fazer uma solicitação de assinatura de certificado (CSR) para o Puppet Server (CA). Na verdade já foi feito a solicitação no start do puppet agent, porém é recomendável verificar novamente com o comando “puppet agente –t”.
 
O puppet cliente vai fazer uma solicitação de assinatura de certificado (CSR) para o Puppet Server (CA). Na verdade já foi feito a solicitação no start do puppet agent, porém é recomendável verificar novamente com o comando “puppet agente –t”.
 
Se logue no Puppet Server e assine o certificado solicitado pelo Puppet client.
 
Se logue no Puppet Server e assine o certificado solicitado pelo Puppet client.
Puppet Server puppetserver-01.devopslab.com.br
+
Puppet Server puppetserver-01.devops.com.br
#puppet cert list
+
<syntaxhighlight lang="console" ># puppet cert list</syntaxhighlight >
root@puppetserver-01 ~]# puppet cert list
+
<syntaxhighlight lang="console"  >
"puppetclient-01.devopslab.com.br" (SHA256) 73:66:B0:FE:4F:96:E6:4B:D8:7B:8E:B3:F5:72:41:
+
"agente-puppet.mstech.com.br" (SHA256) 73:66:B0:FE:4F:96:E6:4B:D8:7B:8E:B3:F5:72:41:
 
68:83:50:F3:4C:09:5A:1G:68:F0:47:10:28:6D:11:42:84
 
68:83:50:F3:4C:09:5A:1G:68:F0:47:10:28:6D:11:42:84
 +
</syntaxhighlight >
 +
 
Assinatura do certificado.
 
Assinatura do certificado.
[root@puppetserver-01 ~]# puppet cert sign puppetclient-01.devopslab.com.br
+
<syntaxhighlight lang="console" ># puppet cert sign agente-puppet.mstech.com.br</syntaxhighlight >
Notice: Signed certificate request for puppetclient-01.devopslab.com.br
+
<syntaxhighlight lang="console"  >
Notice: Removing file Puppet::SSL::CertificateRequest puppetclient-01.devopslab.com.br at  
+
Notice: Signed certificate request for agente-puppet.mstech.com.br
'/etc/puppetlabs/puppet/ssl/ca/requests/puppetclient-01.devopslab.com.br.pem'
+
Notice: Removing file Puppet::SSL::CertificateRequest agente-puppet.mstech.com.br at  
Volte para o cliente “puppetclient-01.devopslab.com.br” e rode novamente o “puppet agente –t”.
+
'/etc/puppetlabs/puppet/ssl/ca/requests/agente-puppet.mstech.com.br.pem'
[root@puppetclient-01 ~]# puppet agent -t
+
</syntaxhighlight >
 +
 
 +
Volte para o cliente “puppetclient-01.devops.com.br” e rode novamente o “puppet agente –t”.
 +
<syntaxhighlight lang="console" ># puppet agent -t</syntaxhighlight >
 +
<syntaxhighlight lang="console"  >
 
Info: Using configured environment 'production'
 
Info: Using configured environment 'production'
 
Info: Retrieving pluginfacts
 
Info: Retrieving pluginfacts
 
Info: Retrieving plugin
 
Info: Retrieving plugin
Info: Caching catalog for puppetclient-01.devopslab.com.br
+
Info: Caching catalog for puppetclient-01.devops.com.br
 
Info: Applying configuration version '1455912908'
 
Info: Applying configuration version '1455912908'
 
Notice: Applied catalog in 0.03 seconds
 
Notice: Applied catalog in 0.03 seconds
 +
</syntaxhighlight >
 +
 
Pronto! Puppet Server e Puppet client (Cliente) funcionando.
 
Pronto! Puppet Server e Puppet client (Cliente) funcionando.
 
Agora falta apenas criar módulos e ver o puppet aplicando as configurações desejadas.
 
Agora falta apenas criar módulos e ver o puppet aplicando as configurações desejadas.
6. Criação de módulos de configuração
+
 
6.1 – Módulo 1 – Edição do arquivo /etc/hosts
+
=== '''Criação de módulos de configuração''' ===
 +
===== Módulo 1 – Edição do arquivo /etc/hosts =====
 +
 
 
Vamos criar um módulo para editar arquivo de hosts de forma automática via puppet.
 
Vamos criar um módulo para editar arquivo de hosts de forma automática via puppet.
Vamos usar o comando “puppet module generate”, é a forma mais “difícil” porém é a recomendada pela Puppetlabs e também mais organizada. Criação de módulos é um assunto extenso, existem várias maneiras de fazer a mesma coisa, das simples as mais complexas, aqui vamos utilizar apenas a forma mais recomendada.
+
Vamos usar o comando “puppet module generate”, é a forma mais “difícil” porém é a recomendada pela Puppetlabs e também mais organizada.
No PUPPET SERVER
+
 
#puppet module generate
+
'''No PUPPET SERVER'''
#cd /etc/puppetlabs/code/environments/production/modules
+
<syntaxhighlight lang="console"  >
#puppet module generate devopslab-edithosts --skip-interview
+
# puppet module generate
Acabamos de criar um módulo devopslab-edithosts.
+
# cd /etc/puppetlabs/code/environments/production/modules
 +
# puppet module generate devops-edithosts --skip-interview
 +
</syntaxhighlight >
 +
 
 +
Acabamos de criar um módulo devops-edithosts.
 
A opção “–skip-interview” pula uma série de perguntas como nome do criador do módulo, versão do módulo, descrição e etc, para o nosso caso não precisa, mas você pode dar uma olhada depois.
 
A opção “–skip-interview” pula uma série de perguntas como nome do criador do módulo, versão do módulo, descrição e etc, para o nosso caso não precisa, mas você pode dar uma olhada depois.
 
Vamos criar nosso manifesto, ou seja definir uma classe.
 
Vamos criar nosso manifesto, ou seja definir uma classe.
#cd /etc/puppetlabs/code/environments/production/modules/edithosts/manifests
+
<syntaxhighlight lang="console"  >
#vi hosts.pp
+
# cd /etc/puppetlabs/code/environments/production/modules/edithosts/manifests
1
+
# vi hosts.pp
2
+
</syntaxhighlight >
3
+
<syntaxhighlight lang="vi"  >
4
+
5
+
6
+
7
+
8
+
9
+
10
+
11
+
12
+
13
+
14
+
15
+
16
+
17
+
18
+
19
+
20
+
21
+
22
+
23
+
24
+
 
class edithosts::hosts {
 
class edithosts::hosts {
 
+
 
###A linha comment e opcional###
 
###A linha comment e opcional###
 host { 'crm.devopslab.com.br':
+
host { 'crm.devops.com.br':
    ip           => '10.0.10.10',
+
    ip          => '10.0.10.10',
    comment      => 'Adicionado via Puppet'
+
    comment      => 'Adicionado via Puppet'
  }
+
  }
 
+
 host { 'portal.devopslab.com.br':
+
host { 'portal.devops.com.br':
    ip           => '10.0.10.11',
+
    ip          => '10.0.10.11',
    comment      => 'Adicionado via Puppet'
+
    comment      => 'Adicionado via Puppet'
  }
+
  }
 
+
 host { 'wiki.devopslab.com.br':
+
host { 'wiki.devops.com.br':
    ip           => '10.0.10.13',
+
    ip          => '10.0.10.13',
    comment      => 'Adicionado via Puppet'
+
    comment      => 'Adicionado via Puppet'
  }
+
  }
 
+
 host { 'webmail.devopslab.com.br':
+
host { 'webmail.devops.com.br':
    ip           => '10.0.10.13',
+
    ip          => '10.0.10.13',
    comment      => 'Adicionado via Puppet'
+
    comment      => 'Adicionado via Puppet'
  }
+
  }
 
+
 
}
 
}
 +
</syntaxhighlight >
 +
 
Onde “edithosts” é o nome do módulo, e “hosts” o nome do manifesto.
 
Onde “edithosts” é o nome do módulo, e “hosts” o nome do manifesto.
 
Verifique se tem algum erro no manifesto.
 
Verifique se tem algum erro no manifesto.
#puppet parser validate hosts.pp
+
<syntaxhighlight lang="console" >
 +
# puppet parser validate hosts.pp
 +
</syntaxhighlight >
 +
 
 
Vamos criar a definição do node (node são os clientes rodando o puppet client, são seus hosts no geral).
 
Vamos criar a definição do node (node são os clientes rodando o puppet client, são seus hosts no geral).
cd /etc/puppetlabs/code/environments/production/manifests
+
<syntaxhighlight lang="console" >cd /etc/puppetlabs/code/environments/production/manifests
 
+
# vi site.pp</syntaxhighlight >
#vi site.pp
+
<syntaxhighlight lang="vim"  >
node 'puppetclient-01.devopslab.com.br' {
+
node 'puppetclient-01.devops.com.br' {
        include edithosts::hosts
+
        include edithosts::hosts
 
}
 
}
 +
</syntaxhighlight >
 +
 
E seu eu tiver mais de 1 node?. Simplesmente faça assim:
 
E seu eu tiver mais de 1 node?. Simplesmente faça assim:
1
+
<syntaxhighlight lang="vim" >
2
+
3
+
4
+
5
+
6
+
7
+
8
+
9
+
 
node  
 
node  
'puppetclient-01.devopslab.com.br',
+
'puppetclient-01.mstech.com.br',
'puppetclient-02.devopslab.com.br',
+
'puppetclient-02.mstech.com.br',
'puppetclient-03.devopslab.com.br',
+
'puppetclient-03.mstech.com.br',
'puppetclient-04.devopslab.com.br'
+
'puppetclient-04.mstech.com.br'
 
## assim por diante.
 
## assim por diante.
 
{
 
{
        include edithosts::hosts
+
        include edithosts::hosts
 +
        # adicione aqui outros modulo criados
 
}
 
}
 +
</syntaxhighlight >
 +
 
Valide a configuração site.pp no intuito de achar erros.
 
Valide a configuração site.pp no intuito de achar erros.
 
puppet parser validate site.pp
 
puppet parser validate site.pp
 
No PUPPET CLIENT (Node/Cliente).
 
No PUPPET CLIENT (Node/Cliente).
 
Logue no Puppet Cliente e rode o “puppet agente –t”.
 
Logue no Puppet Cliente e rode o “puppet agente –t”.
# puppet agent -t
+
 
 +
<syntaxhighlight lang="console" ># puppet agent -t</syntaxhighlight >
 +
<syntaxhighlight lang="console"  >
 
Info: Using configured environment 'production'
 
Info: Using configured environment 'production'
 
Info: Retrieving pluginfacts
 
Info: Retrieving pluginfacts
 
Info: Retrieving plugin
 
Info: Retrieving plugin
Info: Caching catalog for puppetclient-01.devopslab.com.br
+
Info: Caching catalog for puppetclient-01.devops.com.br
 
Info: Applying configuration version '1455919826'
 
Info: Applying configuration version '1455919826'
Notice: /Stage[main]/Edithosts::Hosts/Host[crm.devopslab.com.br]/ensure: created
+
Notice: /Stage[main]/Edithosts::Hosts/Host[crm.devops.com.br]/ensure: created
 
Info: Computing checksum on file /etc/hosts
 
Info: Computing checksum on file /etc/hosts
Notice: /Stage[main]/Edithosts::Hosts/Host[portal.devopslab.com.br]/ensure: created
+
Notice: /Stage[main]/Edithosts::Hosts/Host[portal.devops.com.br]/ensure: created
Notice: /Stage[main]/Edithosts::Hosts/Host[wiki.devopslab.com.br]/ensure: created
+
Notice: /Stage[main]/Edithosts::Hosts/Host[wiki.devops.com.br]/ensure: created
Notice: /Stage[main]/Edithosts::Hosts/Host[webmail.devopslab.com.br]/ensure: created
+
Notice: /Stage[main]/Edithosts::Hosts/Host[webmail.devops.com.br]/ensure: created
 
Notice: Applied catalog in 0.05 seconds
 
Notice: Applied catalog in 0.05 seconds
 +
</syntaxhighlight >
 +
 
Verificando as alterações no /etc/hosts.
 
Verificando as alterações no /etc/hosts.
# cat /etc/hosts
+
<syntaxhighlight lang="console" ># cat /etc/hosts</syntaxhighlight >
127.0.0.1    localhost    localhost.localdomain localhost4 localhost4.localdomain4
+
<syntaxhighlight lang="console"  >
::1    localhost    localhost.localdomain localhost6 localhost6.localdomain6
+
127.0.0.1    localhost    localhost.localdomain localhost4 localhost4.localdomain4
 
+
::1    localhost    localhost.localdomain localhost6 localhost6.localdomain6
10.0.0.161    puppetclient-01.devopslab.com.br    puppetclient-01
+
192.168.13.42    agente-puppet.mstech.com.br    agente-puppet
10.0.0.160    puppetserver-01.devopslab.com.br    puppetserver-01
+
192.168.11.11    puppet.mstech.com.br          puppet
10.0.10.10    crm.devopslab.com.br    # Adicionado via Puppet
+
10.0.10.10      crm.devops.com.br          # Adicionado via Puppet
10.0.10.11    portal.devopslab.com.br    # Adicionado via Puppet
+
10.0.10.11      portal.devops.com.br        # Adicionado via Puppet
10.0.10.13    wiki.devopslab.com.br    # Adicionado via Puppet
+
10.0.10.13      wiki.devops.com.br          # Adicionado via Puppet
10.0.10.13    webmail.devopslab.com.br    # Adicionado via Puppet
+
10.0.10.13      webmail.devops.com.br      # Adicionado via Puppet
 +
</syntaxhighlight >
 +
 
 
Perceba que o arquivo de hosts foi editado automaticamente.
 
Perceba que o arquivo de hosts foi editado automaticamente.
6.2 – Módulo 2 – Instalação pacotes, remoção, desativação e update de pacotes
+
 
Vou criar um módulo checklist, que vai instalar alguns pacotes, remover os desnecessários, e manter outros atualizados, bem checklist mesmo, toda empresa tem.
+
==== – Módulo 2 – Instalação pacotes, remoção, desativação e update de pacotes ====
Checklist
+
Vou criar um módulo checklist, que vai instalar alguns pacotes, remover os desnecessários, e manter outros atualizados, um checklist mesmo.
Telnet – Instalar
+
<syntaxhighlight lang="console"  >
Openssh – Manter atualizado na última versão.
+
- Checklist
Gnutils – Manter atualizado na última versão.
+
- Telnet – Instalar
Vim – Remover
+
- Openssh – Manter atualizado na última versão.
No PUPPET SERVER.
+
- Gnutils – Manter atualizado na última versão.
Criação do módulo de checklist “devopslab-checklist”.
+
- Vim – Remover
#cd /etc/puppetlabs/code/environments/production/modules
+
</syntaxhighlight >
puppet module generate devopslab-checklist --skip-interview
+
 
 +
'''No PUPPET SERVER.'''
 +
Criação do módulo de checklist “devops-checklist”.
 +
<syntaxhighlight lang="console" >
 +
# cd /etc/puppetlabs/code/environments/production/modules
 +
# puppet module generate devops-checklist --skip-interview
 +
</syntaxhighlight >
 +
 
 
Criação do manifesto.
 
Criação do manifesto.
#cd /etc/puppetlabs/code/environments/production/modules/checklist/manifests
+
<syntaxhighlight lang="console" >
#vi pacotes.pp
+
# cd /etc/puppetlabs/code/environments/production/modules/checklist/manifests
1
+
# vi pacotes.pp
2
+
</syntaxhighlight >
3
+
<syntaxhighlight lang="vim"  >
4
+
5
+
6
+
7
+
8
+
9
+
10
+
11
+
12
+
13
+
14
+
15
+
16
+
17
+
18
+
19
+
 
class checklist::pacotes {
 
class checklist::pacotes {
 
+
  package { [ 'telnet' ]:
package { [ 'telnet' ]:
+
      ensure    => present,
    ensure     => present,
+
    }
  }
+
 
+
  package { [ 'openssh' ]:
package { [ 'openssh' ]:
+
      ensure    => latest,
    ensure     => latest,
+
    }
  }
+
 
+
  package { [ 'gnutls' ]:
package { [ 'gnutls' ]:
+
      ensure    => latest,
    ensure     => latest,
+
    }
  }
+
 
+
  package { [ 'vim' ]:
package { [ 'vim' ]:
+
      ensure    => absent,
    ensure     => absent,
+
    }
  }
+
 
+
 
}
 
}
 +
</syntaxhighlight >
 +
 
Vamos criar a definição do node. Nós já criamos anteriormente, vamos apenas adicionar um include para o novo manifesto.
 
Vamos criar a definição do node. Nós já criamos anteriormente, vamos apenas adicionar um include para o novo manifesto.
#vi /etc/puppetlabs/code/environments/production/manifests/site.pp
+
<syntaxhighlight lang="console" ># vi /etc/puppetlabs/code/environments/production/manifests/site.pp</syntaxhighlight >
 
+
<syntaxhighlight lang="vim" >
node 'puppetclient-01.devopslab.com.br' {
+
node 'puppetclient-01.devops.com.br' {
    include    edithosts::hosts
+
    include    edithosts::hosts
    include checklist::pacotes
+
    include checklist::pacotes
 
}
 
}
 +
</syntaxhighlight >
 +
 
No PUPPET CLIENT. Logue no cliente e rode o “puppet agente –t”.
 
No PUPPET CLIENT. Logue no cliente e rode o “puppet agente –t”.
[root@puppetclient-01 /]# puppet agent -t
+
<syntaxhighlight lang="console" ># puppet agent -t</syntaxhighlight >
 +
<syntaxhighlight lang="console" >
 
Info: Using configured environment 'production'
 
Info: Using configured environment 'production'
 
Info: Retrieving pluginfacts
 
Info: Retrieving pluginfacts
 
Info: Retrieving plugin
 
Info: Retrieving plugin
 
Info: Loading facts
 
Info: Loading facts
Info: Caching catalog for puppetclient-01.devopslab.com.br
+
Info: Caching catalog for puppetclient-01.devops.com.br
 
Info: Applying configuration version '1455975217'
 
Info: Applying configuration version '1455975217'
 
Notice: /Stage[main]/Checklist::Pacotes/Package[telnet]/ensure: created
 
Notice: /Stage[main]/Checklist::Pacotes/Package[telnet]/ensure: created
Linha 322: Linha 330:
 
Notice: /Stage[main]/Checklist::Pacotes/Package[vim]/ensure: removed
 
Notice: /Stage[main]/Checklist::Pacotes/Package[vim]/ensure: removed
 
Notice: Applied catalog in 8.23 seconds
 
Notice: Applied catalog in 8.23 seconds
 +
</syntaxhighlight >
 +
 
Perceba que não aparece nada sobre o openssh, pois ele já está atualizado, então o Puppet sabiamente ignora.
 
Perceba que não aparece nada sobre o openssh, pois ele já está atualizado, então o Puppet sabiamente ignora.
 
Finalizamos a instalação do Puppet server e cliente assim como a criação e aplicação de módulos de configuração.
 
Finalizamos a instalação do Puppet server e cliente assim como a criação e aplicação de módulos de configuração.
Em outro tópico vou demonstrar como fazer a Orquestração com o Puppet e instalar o Plugin Facter para colher informações dos hosts.
+
 
Lembrando que a criação de módulos no Puppet é uma ciência, as possibilidades e otimizações são infinitas, dá para brincar bastante, o intuito deste tópico foi apenas fazer uma introdução, porém passe sempre aqui que postarei muitas coisas legais.
+
Obrigado.
Obrigado
+

Edição atual tal como às 18h11min de 14 de novembro de 2016

Puppet – Como instalar e configurar o Puppet Server, Puppet Cliente e Módulos de Configuração

Neste tutorial nós vamos instalar e configurar o Puppet Server, instalar o Puppet nos clientes e criar os módulos de configuração do Puppet.

Introdução.

O Puppet é uma ferramenta que permite a gerência e configuração de arquivos ou aplicações, na prática isto quer dizer que você consegue manter seu parque de hosts (desktops e servidores) com arquivos de configuração padronizados, pacotes e aplicativos atualizados, permite a gestão de usuários, monitoração de aplicações, aplicação de mudanças no ambiente de forma rápida.

Puppet também faz Orquestração, ou seja você consegue executar comandos em vários servidores ao mesmo tempo, por exemplo saiu um bug e você precisa atualizar um pacote rapidamente, com a Orquestração do Puppet isto é fácil e rápido, não importa o número de hosts.

Puppet conta também com o Facter, que permite colher qualquer informação dos hosts, como detalhes do hardware e software instalados, ele atua como uma “ferramenta de inventário”. A comunidade do Puppet é gigantesca, conta com grande quantidade de contribuições, muitos plug-ins, módulos, vasta documentação e inúmeras listas e sites de discussão.

Vamos lá.

Infraestrutura do ambiente

Tenha pelo menos 1 VM para o Puppet Master 1 VM para ser o cliente.

Utilizado neste Laboratório. Sistema Operacional Centos 7 64 bits – instalação mínima e atualizada. 1 x Puppet Server (Puppet Master) – puppet.mstech.com.br (192.168.13.42) 1 x Puppet Client – agente-puppet.mstech.com.br (192.168.11.11)

Pré-requisitos

Todos os servidores e clientes devem estar com o hostname padronizado da seguinte forma: nome_hostname.dominio.com.br nome_hostname.

# cat  /etc/hosts
192.168.11.11    puppet.mstech.com.br    puppet
192.168.13.42    agente-puppet.mstech.com.br  agente-puppet


Instalação dos repositórios

Instalar o repositório puppet tanto no Puppet Server como nos clientes.

# rpm -hiv https://yum.puppetlabs.com/puppetlabs-release-pc1-el-7.noarch.rpm

Instalação e configuração do Puppet Server

Junto do pacote puppetserver, também será instalado o puppetclient.

# yum install puppetserver

Por padrão o Puppet vem com o JVM (java) configurado para subir utilizando 2GB RAM, que é o mínimo recomendado, porém se o seu servidor não dispor desta memória, altere a configuração da JVM conforme a sua necessidade.

Adicional: Dê uma olhada no tópico Tuning do Puppet http://devops.com.br/tuning-do-puppet-server/

Altere a linha “JAVA_ARGS”.

# vi /etc/sysconfig/puppetserver
JAVA_ARGS="-Xms1g –Xmx1g -XX:MaxPermSize=256m"

Inicie o Puppet server e habilite o startup automático.

# systemctl start puppetserver.service
# systemctl enable puppetserver.service

Configure o puppet agente.

# vi /etc/puppetlabs/puppet/puppet.conf
 
[agent]
server = puppet.mstech.com.br

Inicie e ative o Puppet Agent.

# systemctl start puppet.service
# systemctl enable puppet.service

Gere o certificado SSL do agente.

# puppet agent -t
Info: Using configured environment 'production'
Info: Retrieving pluginfacts
Info: Retrieving plugin
Info: Caching catalog for puppetserver-01.devops.com.br
Info: Applying configuration version '1455913339'
Info: Creating state file /opt/puppetlabs/puppet/cache/state/state.yaml
Notice: Applied catalog in 0.01 seconds

Instalação e configuração do Cliente

Aqui vamos instalar o puppet no cliente “agente-puppet.mstech.com.br”. Faça o login no host cliente (agente-puppet.mstech.com.br) e instale o repositório e o Puppet agent.

# rpm -hiv https://yum.puppetlabs.com/puppetlabs-release-pc1-el-7.noarch.rpm
# yum -y install puppet-agent

Não inicie o puppet ainda. Carregue o PATH do puppet para incluir os comandos do puppet. Isto deveria ser automático e acontece apenas neste versão, possívelmente será corrigido em novas versões do puppet cliente.

# source  /etc/profile.d/puppet-agent.sh

Edite o puppet.conf e aponte para o Puppet Server.

# vi /etc/puppetlabs/puppet/puppet.conf
[agent]
server = puppet.mstech.com.br

Agora inicie e ative o startup automático do Puppet agent.

# systemctl enable puppet.service
# systemctl start puppet.service

Rode o puppet pela primeira vez.

# puppet agent -t
Exiting; no certificate found and waitforcert is disabled

O puppet cliente vai fazer uma solicitação de assinatura de certificado (CSR) para o Puppet Server (CA). Na verdade já foi feito a solicitação no start do puppet agent, porém é recomendável verificar novamente com o comando “puppet agente –t”. Se logue no Puppet Server e assine o certificado solicitado pelo Puppet client. Puppet Server puppetserver-01.devops.com.br

# puppet cert list
"agente-puppet.mstech.com.br" (SHA256) 73:66:B0:FE:4F:96:E6:4B:D8:7B:8E:B3:F5:72:41:
68:83:50:F3:4C:09:5A:1G:68:F0:47:10:28:6D:11:42:84

Assinatura do certificado.

# puppet cert sign agente-puppet.mstech.com.br
Notice: Signed certificate request for agente-puppet.mstech.com.br
Notice: Removing file Puppet::SSL::CertificateRequest agente-puppet.mstech.com.br at 
'/etc/puppetlabs/puppet/ssl/ca/requests/agente-puppet.mstech.com.br.pem'

Volte para o cliente “puppetclient-01.devops.com.br” e rode novamente o “puppet agente –t”.

# puppet agent -t
Info: Using configured environment 'production'
Info: Retrieving pluginfacts
Info: Retrieving plugin
Info: Caching catalog for puppetclient-01.devops.com.br
Info: Applying configuration version '1455912908'
Notice: Applied catalog in 0.03 seconds

Pronto! Puppet Server e Puppet client (Cliente) funcionando. Agora falta apenas criar módulos e ver o puppet aplicando as configurações desejadas.

Criação de módulos de configuração

Módulo 1 – Edição do arquivo /etc/hosts

Vamos criar um módulo para editar arquivo de hosts de forma automática via puppet. Vamos usar o comando “puppet module generate”, é a forma mais “difícil” porém é a recomendada pela Puppetlabs e também mais organizada.

No PUPPET SERVER

# puppet module generate
# cd /etc/puppetlabs/code/environments/production/modules
# puppet module generate devops-edithosts --skip-interview

Acabamos de criar um módulo devops-edithosts. A opção “–skip-interview” pula uma série de perguntas como nome do criador do módulo, versão do módulo, descrição e etc, para o nosso caso não precisa, mas você pode dar uma olhada depois. Vamos criar nosso manifesto, ou seja definir uma classe.

# cd /etc/puppetlabs/code/environments/production/modules/edithosts/manifests
# vi hosts.pp
class edithosts::hosts {
 
###A linha comment e opcional###
 host { 'crm.devops.com.br':
    ip           => '10.0.10.10',
    comment      => 'Adicionado via Puppet'
  }
 
 host { 'portal.devops.com.br':
    ip           => '10.0.10.11',
    comment      => 'Adicionado via Puppet'
  }
 
 host { 'wiki.devops.com.br':
    ip           => '10.0.10.13',
    comment      => 'Adicionado via Puppet'
  }
 
 host { 'webmail.devops.com.br':
    ip           => '10.0.10.13',
    comment      => 'Adicionado via Puppet'
  }
 
}

Onde “edithosts” é o nome do módulo, e “hosts” o nome do manifesto. Verifique se tem algum erro no manifesto.

# puppet parser validate hosts.pp

Vamos criar a definição do node (node são os clientes rodando o puppet client, são seus hosts no geral).

cd /etc/puppetlabs/code/environments/production/manifests
# vi site.pp
 
node 'puppetclient-01.devops.com.br' {
        include edithosts::hosts
}

E seu eu tiver mais de 1 node?. Simplesmente faça assim:

node 
'puppetclient-01.mstech.com.br',
'puppetclient-02.mstech.com.br',
'puppetclient-03.mstech.com.br',
'puppetclient-04.mstech.com.br'
## assim por diante.
{
        include edithosts::hosts
        # adicione aqui outros modulo criados
}

Valide a configuração site.pp no intuito de achar erros. puppet parser validate site.pp No PUPPET CLIENT (Node/Cliente). Logue no Puppet Cliente e rode o “puppet agente –t”.

# puppet agent -t
Info: Using configured environment 'production'
Info: Retrieving pluginfacts
Info: Retrieving plugin
Info: Caching catalog for puppetclient-01.devops.com.br
Info: Applying configuration version '1455919826'
Notice: /Stage[main]/Edithosts::Hosts/Host[crm.devops.com.br]/ensure: created
Info: Computing checksum on file /etc/hosts
Notice: /Stage[main]/Edithosts::Hosts/Host[portal.devops.com.br]/ensure: created
Notice: /Stage[main]/Edithosts::Hosts/Host[wiki.devops.com.br]/ensure: created
Notice: /Stage[main]/Edithosts::Hosts/Host[webmail.devops.com.br]/ensure: created
Notice: Applied catalog in 0.05 seconds

Verificando as alterações no /etc/hosts.

# cat /etc/hosts
127.0.0.1    localhost    localhost.localdomain localhost4 localhost4.localdomain4
::1    localhost    localhost.localdomain localhost6 localhost6.localdomain6
192.168.13.42    agente-puppet.mstech.com.br    agente-puppet
192.168.11.11    puppet.mstech.com.br           puppet
10.0.10.10       crm.devops.com.br           # Adicionado via Puppet
10.0.10.11       portal.devops.com.br        # Adicionado via Puppet
10.0.10.13       wiki.devops.com.br          # Adicionado via Puppet
10.0.10.13       webmail.devops.com.br       # Adicionado via Puppet

Perceba que o arquivo de hosts foi editado automaticamente.

– Módulo 2 – Instalação pacotes, remoção, desativação e update de pacotes

Vou criar um módulo checklist, que vai instalar alguns pacotes, remover os desnecessários, e manter outros atualizados, um checklist mesmo.

 - Checklist
 - Telnet – Instalar
 - Openssh – Manter atualizado na última versão.
 - Gnutils – Manter atualizado na última versão.
 - Vim – Remover

No PUPPET SERVER. Criação do módulo de checklist “devops-checklist”.

# cd /etc/puppetlabs/code/environments/production/modules
# puppet module generate devops-checklist --skip-interview

Criação do manifesto.

# cd /etc/puppetlabs/code/environments/production/modules/checklist/manifests
# vi pacotes.pp
class checklist::pacotes {
   package { [ 'telnet' ]:
       ensure     => present,
     }
 
   package { [ 'openssh' ]:
       ensure     => latest,
     }
 
   package { [ 'gnutls' ]:
       ensure     => latest,
     }
 
   package { [ 'vim' ]:
       ensure     => absent,
     }
}

Vamos criar a definição do node. Nós já criamos anteriormente, vamos apenas adicionar um include para o novo manifesto.

# vi /etc/puppetlabs/code/environments/production/manifests/site.pp
node 'puppetclient-01.devops.com.br' {
    include    edithosts::hosts
    include checklist::pacotes
}

No PUPPET CLIENT. Logue no cliente e rode o “puppet agente –t”.

# puppet agent -t
Info: Using configured environment 'production'
Info: Retrieving pluginfacts
Info: Retrieving plugin
Info: Loading facts
Info: Caching catalog for puppetclient-01.devops.com.br
Info: Applying configuration version '1455975217'
Notice: /Stage[main]/Checklist::Pacotes/Package[telnet]/ensure: created
Notice: /Stage[main]/Checklist::Pacotes/Package[gnutls]/ensure: ensure changed '3.3.8-12.el7_1.1' to '0:3.3.8-14.el7_2'
Notice: /Stage[main]/Checklist::Pacotes/Package[vim]/ensure: removed
Notice: Applied catalog in 8.23 seconds

Perceba que não aparece nada sobre o openssh, pois ele já está atualizado, então o Puppet sabiamente ignora. Finalizamos a instalação do Puppet server e cliente assim como a criação e aplicação de módulos de configuração.

Obrigado.