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)
Linha 15: 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.
Linha 24: Linha 24:
 
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.
Linha 33: Linha 33:
 
 
 
 
 
 
 
 
'''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.
Linha 40: Linha 40:
 
</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.
Linha 55: Linha 55:
 
<syntaxhighlight lang="console" >
 
<syntaxhighlight lang="console" >
 
# vi /etc/sysconfig/puppetserver
 
# vi /etc/sysconfig/puppetserver
 +
 
JAVA_ARGS="-Xms1g –Xmx1g -XX:MaxPermSize=256m"
 
JAVA_ARGS="-Xms1g –Xmx1g -XX:MaxPermSize=256m"
 
</syntaxhighlight >
 
</syntaxhighlight >
Linha 68: Linha 69:
 
# vi /etc/puppetlabs/puppet/puppet.conf
 
# vi /etc/puppetlabs/puppet/puppet.conf
  
[agent]
+
[agent]
server = puppet.mstech.com.br
+
server = puppet.mstech.com.br
 
</syntaxhighlight >
 
</syntaxhighlight >
  
 
Inicie e ative o Puppet Agent.
 
Inicie e ative o Puppet Agent.
 
<syntaxhighlight lang="console" >
 
<syntaxhighlight lang="console" >
#systemctl start puppet.service
+
# systemctl start puppet.service
#systemctl enable puppet.service
+
# systemctl enable puppet.service
 
</syntaxhighlight >
 
</syntaxhighlight >
  
Linha 92: Linha 93:
 
</syntaxhighlight >
 
</syntaxhighlight >
  
Libere a porta 8140/tcp no Firewall
+
= Instalação e configuração do Cliente
firewall-cmd --permanent --add-port=8140/tcp
+
 
systemctl reload firewalld
+
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 “puppetclient-01.devopslab.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 (puppetclient-01.devopslab.com.br) e instale o repositório e o Puppet agent.
 +
<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
 
 
 
 
 
#yum -y install puppet-agent
 
#yum -y install puppet-agent
 +
 
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.
Linha 137: Linha 138:
 
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. 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.

Edição das 18h19min de 1 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 e instalação de Sistema Operacional de forma automatizada.

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.

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 Lab. 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

   

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://devopslab.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
1 Info: Using configured environment 'production'
2 Info: Retrieving pluginfacts
3 Info: Retrieving plugin
4 Info: Caching catalog for puppetserver-01.devopslab.com.br
5 Info: Applying configuration version '1455913339'
6 Info: Creating state file /opt/puppetlabs/puppet/cache/state/state.yaml
7 Notice: Applied catalog in 0.01 seconds

= Instalação e configuração do Cliente

Aqui vamos instalar o puppet no cliente “puppetclient-01.devopslab.com.br”. Faça o login no host cliente (puppetclient-01.devopslab.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 server Puppet Server.
#vi /etc/puppetlabs/puppet/puppet.conf
 
[agent]
server = puppetserver-01.devopslab.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.devopslab.com.br
#puppet cert list
root@puppetserver-01 ~]# puppet cert list
"puppetclient-01.devopslab.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.
[root@puppetserver-01 ~]# puppet cert sign puppetclient-01.devopslab.com.br
Notice: Signed certificate request for puppetclient-01.devopslab.com.br
Notice: Removing file Puppet::SSL::CertificateRequest puppetclient-01.devopslab.com.br at 
'/etc/puppetlabs/puppet/ssl/ca/requests/puppetclient-01.devopslab.com.br.pem'
Volte para o cliente “puppetclient-01.devopslab.com.br” e rode novamente o “puppet agente –t”.
[root@puppetclient-01 ~]# puppet agent -t
Info: Using configured environment 'production'
Info: Retrieving pluginfacts
Info: Retrieving plugin
Info: Caching catalog for puppetclient-01.devopslab.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. 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.
No PUPPET SERVER
#puppet module generate
#cd /etc/puppetlabs/code/environments/production/modules
#puppet module generate devopslab-edithosts --skip-interview
Acabamos de criar um módulo devopslab-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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
class edithosts::hosts {
 
###A linha comment e opcional###
 host { 'crm.devopslab.com.br':
    ip           => '10.0.10.10',
    comment      => 'Adicionado via Puppet'
  }
 
 host { 'portal.devopslab.com.br':
    ip           => '10.0.10.11',
    comment      => 'Adicionado via Puppet'
  }
 
 host { 'wiki.devopslab.com.br':
    ip           => '10.0.10.13',
    comment      => 'Adicionado via Puppet'
  }
 
 host { 'webmail.devopslab.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.devopslab.com.br' {
        include edithosts::hosts
}
E seu eu tiver mais de 1 node?. Simplesmente faça assim:
1
2
3
4
5
6
7
8
9
node 
'puppetclient-01.devopslab.com.br',
'puppetclient-02.devopslab.com.br',
'puppetclient-03.devopslab.com.br',
'puppetclient-04.devopslab.com.br'
## assim por diante.
{
        include edithosts::hosts
}
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.devopslab.com.br
Info: Applying configuration version '1455919826'
Notice: /Stage[main]/Edithosts::Hosts/Host[crm.devopslab.com.br]/ensure: created
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[wiki.devopslab.com.br]/ensure: created
Notice: /Stage[main]/Edithosts::Hosts/Host[webmail.devopslab.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
 
10.0.0.161    puppetclient-01.devopslab.com.br    puppetclient-01
10.0.0.160    puppetserver-01.devopslab.com.br    puppetserver-01
10.0.10.10    crm.devopslab.com.br    # Adicionado via Puppet
10.0.10.11    portal.devopslab.com.br    # Adicionado via Puppet
10.0.10.13    wiki.devopslab.com.br    # Adicionado via Puppet
10.0.10.13    webmail.devopslab.com.br    # Adicionado via Puppet
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.
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 “devopslab-checklist”.
#cd /etc/puppetlabs/code/environments/production/modules
puppet module generate devopslab-checklist --skip-interview
Criação do manifesto.
#cd /etc/puppetlabs/code/environments/production/modules/checklist/manifests
#vi pacotes.pp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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.devopslab.com.br' {
    include    edithosts::hosts
    include checklist::pacotes
}
No PUPPET CLIENT. Logue no cliente e rode o “puppet agente –t”.
[root@puppetclient-01 /]# puppet agent -t
Info: Using configured environment 'production'
Info: Retrieving pluginfacts
Info: Retrieving plugin
Info: Loading facts
Info: Caching catalog for puppetclient-01.devopslab.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.
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