Puppet Agent e Server
Atualmente na área de T.I. tudo é DevOps e ferramentas de gerência de configuração são um pré-requisito para quem quer entrar para esse mundo, sendo assim nas linhas abaixo vou mostrar como é possível criar um servidor puppet master e um servidor node com o puppet agent para fazer a gerência de configuração.
A primeira coisa a se fazer é a instalação do puppet master, o meu servidor master possui a seguinte configuração:
root@puppetmaster:~# lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 14.04.4 LTS Release: 14.04 Codename: trustyNão esquece que o puppet precisa estar com os dns configurados, no meu caso vou configurar através do /etc/hosts, sendo assim ficará da seguinte maneira:
vim /etc/hosts 10.100.0.147 puppetmaster.alissonmachado.com.br 10.100.0.132 node1.alissonmachado.com.brPara instalar digite os seguintes comandos:
root@puppetmaster:~# apt-get clean all root@puppetmaster:~# apt-get update root@puppetmaster:~# apt-get -f install puppet -yEm muitos tutoriais é baixado o arquivo .deb do puppet direto do repositório da puppetlabs com o seguinte comando:
root@puppetmaster:~# wget https://apt.puppetlabs.com/puppetlabs-release-trusty.debe depois instalado da seguinte maneira:
root@puppetmaster:~# dpkg -i puppetlabs-release-trusty.deb root@puppetmaster:~# apt-get update root@puppetmaster:~# apt-get -f install puppetPorém eu instalei direto do repositório tanto do Ubuntu 14.05 e do Debian 8.6 e ambos funcionaram normalmente. É uma boa prática após a instalação executar o seguinte comando:
root@puppetmaster:~# rm -rf /var/lib/puppet/sslNesse diretório ficam guardados os certificados do puppet e durante a instalação pode ter sido gerado um certificado com hostname errado ou algo do tipo, sendo assim apagamos. Após isso é necessário definir o hostname do seu servidor master no arquivo do puppet, então execute o seguinte comando:
root@puppetmaster:~# vim /etc/puppet/puppet.confEsse é o arquivo de configuração do puppet, o arquivo é basicamente padrão, caso a sua versão do puppet seja menor que 3.8 provavelmente existirá uma tinha chamada templatedir=$confidir/templates, essa configuração já está depreciada sendo assim essa linha pode ser removida, caso a versão seja 3.8 ou acima ela não deve existir. No lugar dessa linha adicione duas linhas:
certname = puppetmaster dns_alt_names = puppetmaster,puppetmaster.alissonmachado.com.brAgora gere o certificado do seu servidor:
root@puppetmaster:~# puppet master --verboseAgora para validar se o certificado já foi gerado e assinado você pode executar o seguinte comando:
root@puppetmaster:~# puppet cert list --allTudo certo com o Master, agora vamos instalar o agent. Essa é a configuração do meu agent:
root@node1:~# lsb_release -a No LSB modules are available. Distributor ID: Debian Description: Debian GNU/Linux 8.6 (jessie) Release: 8.6 Codename: jessieInstalando o puppet:
root@puppetmaster:~# apt-get clean all root@puppetmaster:~# apt-get update root@puppetmaster:~# apt-get -f install puppet -yUma vez instalado você deve fazer com que o agent do puppet inicie sozinho durante o boot da máquina, para fazer isso você precisa criar o seguinte arquivo:
root@node1:~# vim /etc/default/puppetE adicione o seguinte conteúdo: START=yes Agora é preciso alterar o arquivo de configuração do puppet:
root@node1:~# vim /etc/puppet/puppet.confDentro do arquivo você terá uma seção dessa maneira:
[master] # These are needed when the puppetmaster is run by passenger # and can safely be removed if webrick is used. ssl_client_header = SSL_CLIENT_S_DN ssl_client_verify_header = SSL_CLIENT_VERIFYToda ela pode ser apagada e adicione o seguinte conteúdo:
[agent] server = puppetmaster.alissonmachado.com.brAgora você precisa gerar um certificado para esse node também, execute os seguintes comandos:
root@node1:~# rm -rf /var/lib/puppet/ssl root@node1:~# puppet agent --enable root@node1:~# puppet agent --test --server puppetmaster.alissonmachado.com.br Info: Creating a new SSL key for node1.alissonmachado.com.br Info: csr_attributes file loading from /etc/puppet/csr_attributes.yaml Info: Creating a new SSL certificate request for node1.alissonmachado.com.br Info: Certificate Request fingerprint (SHA256): B6:73:95:CF:58:97:98:0C:8C:97:DD:88:FD:82:C0:D3:F2:6B:2B:CE:25:77:F6:D6:16:91:20:1A:FF:69:B8:59 Info: Caching certificate for node1.alissonmachado.com.br Info: Caching certificate_revocation_list for ca Info: Caching certificate for node1.alissonmachado.com.br Info: Retrieving pluginfacts Info: Retrieving plugin Info: Caching catalog for node1.alissonmachado.com.br Info: Applying configuration version '147828151De acordo com o log que apareceu na tela a chave foi gerada com sucesso e agora ela precisa ser aceita pelo servidor. Agora volte no puppet master e veja se a máquina está pendente com o seguinte comando:
root@puppetmaster:~# puppet cert list --allE para aceitar o novo node utilize o seguinte comando:
root@puppetmaster:~# puppet cert sign node1.alissonmachado.com.brUma vez aceito, volte no servidor node1 e rode o seguinte comando:
root@node1:~# puppet agent --test Info: Retrieving pluginfacts Info: Retrieving plugin Info: Caching catalog for node1.alissonmachado.com.br Info: Applying configuration version '1478281511'Se a saída for parecida com a mensagem acima está tudo funcionando corretamente. As vezes acontece do puppet reclamar de certificado inválido, não bate com o hostname da máquina ou alguma coisa assim. Se isso acontecer o certificado deve ser apagado com os seguintes comandos:
root@node1:~# find /var/lib/puppet/ssl -name node1.alissonmachado.com.br.pem -delete root@node1:~# rm -rf /var/lib/puppet/ssl/Eu coloquei os comandos de forma redundante pois quando o puppet da esse problema as vezes ele busca uns certificados que só ele sabe onde. Agora que foram removidos os certificados o node precisa ser removido do puppet master.
root@puppetmaster:~# puppet cert clean node1.alissonmachado.com.brAgora volte no node1 e rode o comando de novo:
root@node1:~# puppet agent --test --server puppetmaster.alissonmachado.com.brE repita todo o processo de ir no master e aceitar o node e assim por diante. Agora criando um Manifest só para testar. Vá no puppetmaster e execute os seguintes comando:
root@puppetmaster:~# cd /etc/puppet/manifests/ root@puppetmaster:~# vim apache.ppDentro do apache.pp adicione o seguinte conteúdo:
node "node1.alissonmachado.com.br"{
package { "apache2":
ensure=>installed,
}
->
service { "apache2":
ensure=> "running",
enable => true
}
}
Salve o arquivo, volte no servidor node1 e execute a instrução:
root@node1:~# puppet agent -t Info: Retrieving pluginfacts Info: Retrieving plugin Info: Caching catalog for node1.alissonmachado.com.br Info: Applying configuration version '1478284402' Notice: /Stage[main]/Main/Node[node1.alissonmachado.com.br]/Package[apache2]/ensure: ensure changed 'purged' to 'present' Notice: Finished catalog run in 22.12 secondsEssa saída mostra que o apache foi instalado com sucesso. Com relação ao manifest, eu defini a ordem dos recursos utilizando o operador -> pois era o mais rápido pra fazer o exemplo mas existem outros como: require,notify,subscribe e mais, porém isso fica pro próximo post. Valeu \o