Puppet
Índice
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.