Puppet

Revisão de 19h05min de 27 de janeiro de 2017 por Mths0x5f (discussão | contribs) (Criou página com '# Instalação Este tutorial trata dos passos necessários para a configuração de um Puppet Master e um Puppet Agent, sem enrolação. Ele foi baseado [neste aqui](https:...')
(dif) ← Edição anterior | Revisão atual (dif) | Versão posterior → (dif)
  1. Instalação
 Este tutorial trata dos passos necessários para a configuração de um Puppet Master e um Puppet Agent, sem enrolação. Ele foi baseado [neste aqui](https://www.digitalocean.com/community/tutorials/how-to-install-puppet-4-in-a-master-agent-setup-on-centos-7). Espera-se que o leitor tenha algum conhecimento básico de Linux/Unix.
    1. Observação
 Devido a estrutura do Puppet, é conveniente a criação de **um servidor DNS local** às máquinas do Master e dos Agents. http://lbrvirtual.com.br/blog/index.php/2015/09/13/instalando-e-configurando-o-bind9-no-ubuntudebian/ (A alternativa é criar registros no `/etc/hosts`, mas não é recomendável pela complexidade adicional de editá-lo em cada máquina – Observe os exemplos de como os arquivos hosts devem ficar nos arquivos anexos *hosts_agents* e *hosts_master*).
 
 
    1. Instalação do Puppet Master no CentOS 7
      1. Requerimentos
 - A máquina rodando o Server necessita de *nada menos* que **4GB de RAM** e 2 a 4 cores de CPU ao ser usada em produção. [Essa configuração é suficiente para suportar até 1000 nodes, mas obviamente depende de vários fatores](https://docs.puppet.com/puppet/4.8/system_requirements.html#hardware).
 - **Porta 8140 aberta**
 
      1. Modo de fazer
 1. Em uma máquina com pelo menos 2GB de RAM, instale o CentOS 7 e atualize o sistema com `$ sudo yum update -y`. Garanta que ela esteja em rede com outras máquinas locais com `$ ip a` e `$ ping`.
 
 2. Confira e edite os valores de *hostname* da máquina, em `/etc/hostname` e `/etc/hosts`, tal que o comando `$ ping $(hostname)` obtenha sucesso. Dê preferência ao *hostname* `puppet`, caso contrário precisará configurar este valor em todos os agents. (Obs.: Soluções como OpenStack ou Docker, modificam esses valores a cada inicialização da instância).
 
 3. _Não se esqueça de adicionar pelo menos um registro ao servidor DNS referente a essa máquina. (Você pode ignorar essa e a próxima instrução se for utilizar o arquivo `/etc/hosts` para gerenciar o nome das máquinas). Configure o endereço do DNS a ser usado localmente, com `sudo printf "search puppetexample.com\nnameserver 0.0.0.0\n" | sudo tee -a /etc/resolv.conf`, onde **puppetexample.com** corresponde a sua zona e **0.0.0.0** é o IP do seu servidor DNS._
 
 4. Pare o firewall com `$ sudo systemctl stop firewalld` e desative-o com `$ sudo systemctl disable firewalld`. Também desative o SELinux, editando para `SELINUX=disabled` em `/etc/selinux/config`. Reinicie a máquina para as mudanças surtirem efeito. Você pode e deve ajustar as políticas de firewall depois.
 
 5. Instale o repositório oficial do Puppet em seu sistema `$ sudo yum install -y https://yum.puppetlabs.com/puppetlabs-release-pc1-el-7.noarch.rpm` e então o pacote do Puppet Master Server `$ sudo yum install -y puppetserver`. Se instalou em um sistema com menos de 4GB de RAM, você precisará ajustar a variável `JAVA_ARGS` em `/etc/sysconfig/puppetserver`.
 
 6. Finalmente, teste se o serviço inicia com `$ sudo systemctl start puppetserver` e `$ sudo systemctl status puppetserver`. Se não houver nenhuma falha, ative o serviço `$ sudo systemctl enable puppetserver`.
 
 7. Adicionalmente, instale o **r10k** para gerenciar módulos declarados em um `Puppetfile`, com `$ sudo /opt/puppetlabs/puppet/bin/gem install r10k`
 
    1. Instalação do Puppet Agent no CentOS 7
 Observe que os passos citados aqui precisam ser feitos em **cada máquina** que for atuar como *node* do Puppet. O ideal é que os processos sejam automatizados com a criação da máquina através de uma imagem de SO padrão, script pós-criação ou utilitário cloud-init.
 
      1. Modo de fazer
 1. Instale o CentOS 7 e atualize o sistema com `$ sudo yum update -y`. Garanta que ela esteja em rede com outras máquinas locais com `$ ip a` e `$ ping`. A máquina agent não possui requerimentos específicos de RAM ou disco.
 
 2. Confira e edite os valores de *hostname* da máquina, em `/etc/hostname` e `/etc/hosts`, tal que o comando `$ ping $(hostname)` obtenha sucesso. (Obs.: Soluções como OpenStack ou Docker, modificam esses valores a cada inicialização da instância).
 
 3. _Não se esqueça de adicionar pelo menos um registro ao servidor DNS referente a essa máquina. (Você pode ignorar essa e a próxima instrução se for utilizar o arquivo `/etc/hosts` para gerenciar o nome das máquinas). Configure o endereço do DNS a ser usado localmente, com `sudo printf "search puppetexample.com\nnameserver 0.0.0.0\n" | sudo tee -a /etc/resolv.conf`, onde **puppetexample.com** corresponde a sua zona e **0.0.0.0** é o IP do seu servidor DNS._
 
 4. Instale o repositório oficial do Puppet em seu sistema `$ sudo yum install -y https://yum.puppetlabs.com/puppetlabs-release-pc1-el-7.noarch.rpm` e então o pacote do Puppet Agent `$ sudo yum install -y puppet-agent`.
 
 5. Se o hostname de seu Master for diferente de `puppet`, você precisa acrescentar isso em `/etc/puppetlabs/puppet/puppet.conf`, com:
```
[main]
server = puppetexample.com
```
 
 6. Finalmente, teste se o serviço inicia com `$ sudo systemctl start puppet` e `$ sudo systemctl status puppet`. Se não houver nenhuma falha, ative o serviço `$ sudo systemctl enable puppet`.
 
 
 
  1. Certificados
 Antes de tudo você vai precisar aprovar os certificados de todos seus Agents no Master.
 
    1. Aprovando certificados
 Se tudo ocorreu bem na instalação do Agent, ele terá enviado uma requisição de reconhecimento de certificado ao Master ao iniciar o serviço. Antes de o Agent ser capaz de comunicar com o Master, é preciso aprovar o certificado de dado Agent.
 
 1. No Master execute `$ sudo /opt/puppetlabs/bin/puppet cert list` para ver os certificados pendentes. Note que a saída mostrará todos os hostnames de todos os Agents que ainda não tiverem seus certificados assinados.
 
 2. Use `$ sudo /opt/puppetlabs/bin/puppet cert sign --all` caso queira aprovar todos os hosts na fila, ou `$ sudo /opt/puppetlabs/bin/puppet cert sign <hostname>` caso queira aprovar um em específico.
 
    1. Revogando certificados
 Você talvez queira em algum momento refazer um host do zero, neste caso precisará revogar o certificado com `$ sudo /opt/puppetlabs/bin/puppet cert clean <hostname>`
 
    1. Vendo todos os hosts assinados e não-assinados
 Basta usar o comando `$ sudo /opt/puppetlabs/bin/puppet cert list --all`. Os hosts aprovados possuirão um `+` em sua frente.
 
 
 
  1. Usando o Puppet para instalar o Zabbix
 Para os efeitos deste tutorial que apenas pretende executar os passos de instalação de um ambiente Zabbix, é necessário somente saber que:
 
    1. Master
 1. O `Puppetfile` é um arquivo que lista todos os módulos que são dependência do seu manifest. Este arquivo deve ser editado em `/etc/puppetlabs/code/environments/production/Puppetfile`. **Estando** no diretório `/etc/puppetlabs/code/environments/production/`, execute `$ sudo /opt/puppetlabs/puppet/bin/r10k puppetfile install` para instalar os módulos. O `r10k` é um utilitário capaz de baixar essas dependências, mas é **incapaz de resolver dependências das suas dependências** (O Puppet Enterprise tem uma ferramenta mais inteligente para isso, baseada no r10k).
   
 2. O diretório `/etc/puppetlabs/code/environments/production/manifests/` é onde os arquivos manifest (`.pp`) devem ser colocados por padrão. O Puppet analisa cada um dos arquivos (e subdiretórios) em ordem numérica-alfabética, de forma que o conteúdo do arquivo `01.pp` vai ser analisado antes do arquivo `abacaxi.pp` que vai ser analisado antes do arquivo `pamonha.pp`.
 
 3. Geralmente a instalação do Puppet vem com um arquivo `/etc/puppetlabs/code/environments/production/manifests/site.pp` em branco. Edite ou substitua com o conteúdo do arquivo `site.pp` que acompanha. No exemplo, `agent1.puppet`, `agent2.puppet` e `agent3.puppet` se referem aos hostnames/domínios atribuídos a cada máquina. Note que é perfeiramente possível separar cada definição em arquivos diferentes, assim `zabbix_web.pp`, `zabbix_mysql.pp`, `zabbix_proxy.pp` são nomes de arquivos para organizar o diretório.
 
 4. Por padrão os Agents checam o Master a cada 30 minutos. Como os intervalos não são sincronizados entre as máquinas, isso causará um pequeno problema (já que o node com o banco de dados precisa ser configurado antes do node com o Zabbix Server, por exemplo). Veremos como proceder a seguir.
 
    1. Agents
 1. Em cada agent que precisar aplicação imediada das definições, você poderá executar `$ sudo /opt/puppetlabs/bin/puppet agent --test`
 
 2. O Zabbix Server e o Web precisam de um banco de dados para poderem proceder com a instalação. O Puppet é inteligente o suficiente para realizar as coisas por etapas sem comprometer o todo. Isso significa que você pode esperar por uma ou duas horas até que os agents tenham completado os ciclos de atualização para que tenha um ambiente instalado e funcional. Ou pode simplesmente executar o comando acima em cada uma das máquinas, começando com o node do banco de dados, porque é preciso criá-lo antes de instalar o Zabbix.
 
 3. O node com o Zabbix Server talvez precise de **3 execuções** do comando do passo 1. O que acontece é que em distribuições RedHat-like alguns erros de permissão acontecem e a cada execução eles são resolvidos gradualmente pelo módulo.
 
 
      • Parabéns!!!*** Se tudo deu certo, você já poderá utilizar o ambiente Zabbix! Acesse o Zabbix Web **pelo domínio** definido no manifest. O usuário e a senha padrão do banco é *zabbix_server* e *zabbix_server*.

Isto é só o começo, há outras otimizações e truques que podem ser feitos com o Puppet, porém o necessário está aqui.

    • _Obs.:_** Se precisar alterar alguma configuração, siga o modelo do resto do manifest. No módulo [puppet/zabbix](https://forge.puppet.com/puppet/zabbix), há uma chave para cada item nos arquivos de configuração dos daemons do Zabbix, grafada exatamente da mesma forma, só que em minúsculas.