The Foreman – Instalação de hosts via PXE – Bootstrap – Bare Metal – VMs – parte 2/3

The Foreman – Lifecycle, Provisioning, Configuration, Orchestration and Monitoring.

Instalação de hosts via PXE – BootStrap. O intuito é provisionar um novo host já integrado com o Puppet.
Você pode instalar tanto VMs como hosts físicos “Bare Metal”.
Assumo que você já tenha a aplicação The Foreman instalada e configurada conforme a parte 1 http://devopslab.com.br/como-instalar-e-configurar-o-the-foreman/

1. Criação do Sistema Operacional

Vamos instalar o CentOS 7.
Em Home-The-Foreman -> Hosts -> Operating Systems -> New Operating System
Operating System preencha os dados do Sistema Operacional.
Name: CentOS7
Major version: 7
Description: CentOS 7
Family: RedHat
Architectures: X86_64
theforeman-OSCentos1

Partition Table
Você vai definir particionamento do Sistema Operacional.
Selecione: Kickstart Default
theforeman-ptables1

Installation Media
Selecione: CentOS Mirror
theforeman-centosmirror1
Você pode ter um mirror local via NFS ou Http, neste caso, por facilidade optamos por instalar utilizando o mirror CentOS público.
Se você optar por criar seu próprio repositório de imagens (recomendado) pode seguir este tutorial:
http://devopslab.com.br/como-criar-e-configurar-um-repositorio-local-centos/

2. Templates de instalação

Home-The-Foreman -> Hosts -> Provisioning Templates
Clique nos templates abaixo e associe ao Sistema Operacional CentOS7.
Template—————————–Tipo
Kickstart default PXELinux———–PXELinux
Kickstart RHEL default—————provision
Kickstart default finish————-Finish

theforeman-templates1
Clique em Submit.

3. Criação do Sistema Operacional – parte 2 final

Vá para Home-The-Foreman -> Hosts -> Operating Systems -> Centos 7.0 -> Templates
Associe os templates ao Sistema Operacional.
theforeman-template2
Clique em Submit.

4. Configuração do Servidor de Provisionamento – SmartProxys DHCP, DNS e FTP

Antes de fazer a instalação via rede, precisamos preparar o servidor do Foreman ativando os serviços de DHCP, DNS e TFTP.
O TFTP já foi instalado quando executamos o “Foreman-installer”.

Set up Provisioning
Vá para Home-The-Foreman -> Infrastructure -> Provisioning setup -> Set up Provisioning
Em “Pre-requisites” selecione sua rede.
theforeman-prov1

Network Config
Em “Network Config” preencha os dados da sua rede conforme exemplo do print e clique em Submit.
theforeman-prov2

Você terá um resultado como este:

foreman-installer \
  --enable-foreman-proxy \
  --foreman-proxy-tftp=true \
  --foreman-proxy-tftp-servername=10.0.0.170 \
  --foreman-proxy-dhcp=true \
  --foreman-proxy-dhcp-interface=enp0s3 \
  --foreman-proxy-dhcp-gateway=10.0.0.110 \
  --foreman-proxy-dhcp-range=" " \
  --foreman-proxy-dhcp-nameservers="10.0.0.170" \
  --foreman-proxy-dns=true \
  --foreman-proxy-dns-interface=enp0s3 \
  --foreman-proxy-dns-zone=devopslab.com.br \
  --foreman-proxy-dns-reverse=0.0.10.in-addr.arpa \
  --foreman-proxy-dns-forwarders=8.8.8.8 \
  --foreman-proxy-dns-forwarders=208.67.222.222 \
  --foreman-proxy-dns-forwarders=200.221.11.100 \
  --foreman-proxy-foreman-base-url=https://theforeman01.devopslab.com.br \
  --foreman-proxy-oauth-consumer-key=PYUixcJi5EQwFKqR9nHDTLe7AVjV \
  --foreman-proxy-oauth-consumer-secret=AobRoR8RqHi6kPTj7qwQKV9uQxwv

theforeman-priv4

Execute este trecho de código no servidor do Foreman

[root@theforeman01 ~]# foreman-installer \
>   --enable-foreman-proxy \
>   --foreman-proxy-tftp=true \
>   --foreman-proxy-tftp-servername=10.0.0.170 \
>   --foreman-proxy-dhcp=true \
>   --foreman-proxy-dhcp-interface=enp0s3 \
>   --foreman-proxy-dhcp-gateway=10.0.0.110 \
>   --foreman-proxy-dhcp-range=" " \
>   --foreman-proxy-dhcp-nameservers="10.0.0.170" \
>   --foreman-proxy-dns=true \
>   --foreman-proxy-dns-interface=enp0s3 \
>   --foreman-proxy-dns-zone=devopslab.com.br \
>   --foreman-proxy-dns-reverse=0.0.10.in-addr.arpa \
>   --foreman-proxy-dns-forwarders=8.8.8.8 \
>   --foreman-proxy-dns-forwarders=208.67.222.222 \
>   --foreman-proxy-dns-forwarders=200.221.11.100 \
>   --foreman-proxy-foreman-base-url=https://theforeman01.devopslab.com.br \
>   --foreman-proxy-oauth-consumer-key= PYUixcJi5EQwFKqR9nHDTLe7AVjV \
>   --foreman-proxy-oauth-consumer-secret= AobRoR8RqHi6kPTj7qwQKV9uQxwv
Installing  Done  [100%] [............................]
  Success!
  * Foreman is running at https://theforeman01.devopslab.com.br
      Initial credentials are admin / LcuFswt8wjGLAn7wK
  * Foreman Proxy is running at https://theforeman01.devopslab.com.br:8443
  * Puppetmaster is running at port 8140
  The full log is at /var/log/foreman-installer/foreman-installer.log
[root@theforeman01 ~]#

Installation Media
Na próxima aba “Installation Media” selecione CentOS Mirror.
theforeman-priv3
Agora basta finalizar a configuração.

5. Instalação de um servidor via PXE

Vamos para a parte de instalação propriamente dita, então clique em New Host e siga os passos abaixo.

Nós vamos utilizar o recurso Bare Metal. Bare Metal é um Compute Resource.
Compute Resourses são serviços que podem gerar um host pode exemplo AmazonWS, Docker, OpenStack, Google Compute Engine, Rackspace e etc.

Home-The-Foreman -> Hosts -> New Host

Host
Preencha os campos:
Name: nome-do-servidor
Host Group:
Deploy on: Bare Metal
Environment: production
Puppet CA: theforeman01.devopslab.com.br
Puppet Master: theforeman01.devopslab.com.br
theforeman-host1

Puppet classes
Selecione as classes do Puppet.
theforeman-ntpclass1

Interfaces
Preencha os dados de rede, você precisa ter o MAC Address do servidor alvo da instalação.
O campo “identifier” é referente a placa de rede (eth0, enp0s3 …).
theforeman-interfaces1

Operationg System
Preencha os campos:
Architecture
Operating system
Build mode: Enable this host for provisioning
Media
Partition table
Root password
theforeman-so2

Adittional information
Escolha do tipo de Hardware.
theforeman-addinfo1

Após configurado Host, Puppet Classes, Interfaces, Operating System, Parameters, e Additional Information clique em Submit.
theforeman-end1

Agora ligue a VM ou host físico, selecione o boot via rede (PXE) que a instalação vai começar.
theforeman-redeboot1
theforeman-redeboot2

Pronto, host provisionado e integrado ao Puppet.

The Foreman – Como instalar e configurar o Foreman – Parte 1/3

The Foreman – Lifecycle, Provisioning, Configuration, Orchestration and Monitoring.

Parte 1 de 3.

The Foreman é uma ferramenta para gerenciamento do ciclo de vida de servidores físicos e virtuais, ele te permite instalar VMs em Clouds como AmazonWS, Google Compute Engine, OpenStack, VMWare e também a instalação de servidores físicos e VMs via PXE (Bootstrap), tudo integrado com a gestão de configuração como Puppet, Ansible, Salt e Chef.

Também tem suporte ao container Docker.

Eu acho um problema quando uma empresa tem vários tipos de Cloud, por exemplo VMware e AmazonWS, sem uma ferramenta de gerência como The Foreman, existirão duas interfaces para gestão, gerencia descentralizada de VMs, é difícil ter uma visão global do ambiente, e o The Foreman centraliza tudo isto, todos os servidores em uma única ferramenta e isto é agilidade.

Com ferramentas como esta, você tem um forte aliado para colocar em prática a cultura DevOps, pois você vai integrar os times em uma única ferramenta, todo mundo vai falar a mesma língua, o time de desenvolvimento vai poder fazer seus deploys e integrações tranquilamente de forma autônoma, o time de Administração estará vendo e controlando tudo que acontece no ambiente, todo mundo vai poder ver e administrar o ambiente, e os ganhos todos sabem, times mais próximos, problemas resolvidos mais rápidos e entregas com mais rapidez e qualidade.

E sem falar que com times mais próximos aumenta a grana para poder rachar o churrasco no fim de semana.

Dê uma lida na introdução sobre o The Foreman:
http://theforeman.org/introduction.html

Entre no site do projeto:
http://theforeman.org/

Github
https://github.com/theforeman/foreman

Parte 1 – Instalação e configuração do The Foreman

1. Pré requisitos
Sistema Operacional Centos 7 X64 – instalação mínima.

Para facilitar desative o Selinux e Firewall mas considere utilizar ambas opções no seu ambiente.

#sed -i "s/enforcing/disabled/g" /etc/selinux/config
#setenforce 0

#systemctl stop firewalld
#systemctl disable firewalld

2. Hostname fqdn
Configure o fqdn do servidor conforme exemplo:

#vi /etc/hosts
10.0.0.170	theforeman01.devopslab.com.br	 theforeman01

#hostname -f
theforeman01.devopslab.com.br

3. Instalação dos repositórios

#rpm -hiv http://yum.puppetlabs.com/puppetlabs-release-el-7.noarch.rpm
#rpm -hiv http://yum.theforeman.org/releases/1.10/el7/x86_64/foreman-release.rpm
#yum install epel-release

4.Instalação do foreman-installer

#yum install foreman-installer

5.Execução do instalador
Execute o “foreman-installer”. O instalador por padrão vai executar de forma não interativa, mas você pode adicionar o “–i” para uma instalação interativa.

#foreman-installer

Após terminar a execução do foreman-installer você terá um resultado como este:

[root@theforeman01 ~]# foreman-installer 
Installing  Done  [100%] [............................]
  Success!
  * Foreman is running at https://theforeman01.devopslab.com.br
      Initial credentials are admin / LfcuPwtw7jCLAn8wK
  * Foreman Proxy is running at https://theforeman01.devopslab.com.br:8443
  * Puppetmaster is running at port 8140
  The full log is at /var/log/foreman-installer/foreman-installer.log

Agora você já pode logar na interface do The Foreman com as credenciais fornecidas. Entre no The Foreman e altere sua senha.
foremanlogin1

6. Puppet
Execute o puppet agent para a finalização da instalação. O puppet vai aplicar algumas configurações.

#puppet agent -t

Após o término da execução do puppet faça o login no The Foreman e vá para a aba “Hosts”, vai aparecer o próprio servidor do The Foreman, com o status, versão do S.O e etc.
theforemanhome1

theforemanhost1-b
6.1. Gerenciamento do Puppet – instalação do módulo Ntp
É muito importante manter o horário do servidor Foreman e clientes sincronizados portanto instale um módulo ntp no puppet e configure com os servidores ntp da sua localidade.

#puppet module install -i /etc/puppet/environments/production/modules saz/ntp

Após a instalação do módulo ntp faça o login no The Foreman e vá para: Home-The-Foreman –> Configure –> Classes e importe a classe ntp.
theforeman-ntp1-b

Configure o classe Ntp com os servidores de sua preferência.
Home-The-Foreman –> Configure –> Classes –> Ntp –> Smart Class Parameter –> Server List

Para facilitar segue a lista de servidores Ntp Brasileiros: http://www.pool.ntp.org/zone/br
Após a alteração clique no final em “Submit”. Faça o mesmo para a classe “ntp::ntpdate”.

6.2. Inclusão da classe Ntp com o Servidor The Foreman
Após configurado as classes ntp e ntp::update inclua as mesmas ao host The Foreman.

Vá para Home-The-Foreman –> Hosts –> selecione o servidor do Foreman –> clique em Edit

Em Edit –> Puppet Classes –> +NTP (adicione a classe NTP ao host the Foreman) –> Submit
theforeman-ntp3
Por fim rode do comando “puppet agent –t” no Servidor do Foreman para concluir a instalação e configuração do Ntp.

Lembre-se, o processo de instalar um módulo no Puppet, modificar os parâmetros da classe e associar aos hosts é algo que vai acontecer sempre.

Parte 1 – Instalação e configuração finalizada.

Parte 2 – The Foreman – Instalação de hosts via PXE – Bootstrap
Parte 3 – The Foreman – instalação de hosts em Cloud – Amazon Web Services

Abraços

Leonardo Macedo Cerqueira

Puppet – Como instalar e configurar o zabbix-agent de forma automática via Puppet

Como instalar e configurar o zabbix-agent 3.x de forma automática via Puppet.

Instalação em servidores RedHat/Centos 7
Ubuntu 14
Debian 7 e 8

Ambiente Puppet:
Puppet 4.3
Puppet Server 2.2.1
Puppet-agent 1.3.5

Pré-requisitos:
Puppet-agent instalado e funcionando nos nodes/clientes.

Repositórios Zabbix Centos/Redhat
http://repo.zabbix.com/zabbix/3.0/rhel/7/x86_64/

Ubuntu
http://repo.zabbix.com/zabbix/3.0/ubuntu/pool/main/z/

Debian
http://repo.zabbix.com/zabbix/3.0/debian/pool/main/z/

1. Criação do módulo

Logado no Puppet Server crie o módulo zabbixagent.

#cd /etc/puppetlabs/code/environments/production/modules
#puppet module generate devopslab-zabbixagent --skip-interview

2. criação da pasta “templates” para o armazenamento do template

#mkdir /etc/puppetlabs/code/environments/production/modules/zabbixagent/templates

3. Criação do template zabbix_agent.rb

Copie o arquivo zabbix_agent.conf para dentro da pasta “templates” e renomeie-o para zabbix_agent.rb.

[root@puppetserver-01 templates]# mv -v zabbix_agentd.conf zabbix_agentd.rb

O arquivo zabbix_agent.conf você pode pegar de alguma instalação, ou baixe o pacote zabbix-agent.rpm abra e copie o arquivo zabbix_agent.conf.

Altere as diretivas:
#vi zabbix_agentd.rb

Server=servidorzabbix-exemplo.devopslab.com.br
ListenIP=<%= @ipaddress_enp0s3 %>
ServerActive=proxyzabbix-exemplo.devopslab.com.br
Hostname=<%= @hostname %>

Basicamente você informou quais são os servidores Zabbix Server e Proxy Server. (proxy server é opcional).
Seu IP e hostname serão configurados automáticamente através das entradas “ListenIP” e “Hostname”.
@ipaddress_enp0s3 e @hostname são os facter do puppet.

Veja como ficou meu template:

[root@puppetserver-01 templates]# grep -v ^# zabbix_agentd.rb | grep -v ^$

PidFile=/var/run/zabbix/zabbix_agentd.pid
LogFile=/var/log/zabbix-agent/zabbix_agentd.log
LogFileSize=0
Server=servidorzabbix-exemplo.devopslab.com.br
ListenIP=<%= @ipaddress_enp0s3 %>
ServerActive=proxyzabbix-exemplo.devopslab.com.br
Hostname=<%= @hostname %>
Include=/etc/zabbix/zabbix_agentd.conf.d/

4. Definição da classe

#vi /etc/puppetlabs/code/environments/production/modules/zabbixagent/manifests/init.pp

class zabbixagent {

#expressao condicional para instalacao dos repositorios.
if $osfamily == 'RedHat' and $operatingsystemrelease =~ /^7.*/  {
   package {'zabbix-release':
         provider => rpm,
         ensure   => installed,
         source   => "http://repo.zabbix.com/zabbix/3.0/rhel/7/x86_64/zabbix-release-3.0-1.el7.noarch.rpm"
        }
    }

#Instalacao da versao mais nova do zabbix-agent
package { [ 'zabbix-agent' ]:
	ensure    => latest,
	require   => Package['zabbix-release'],
	}

#Zabbix-agent rodando
service { 'zabbix-agent':
	ensure    => 'running',
	enable    => 'true',
	require   => Package['zabbix-agent'],
	}

#criando o arquivo de configuracao zabbix_agent.conf.
file 	{ "zabbix_agentd.conf":
      	path => "/etc/zabbix/zabbix_agentd.conf",
	content => template("zabbixagent/zabbix_agentd.rb"),
	#crie a pasta "templates" em ../zabbixagent/"
	#o template zabbix_agentd.rb vai ficar dentro da pasta templates.
	owner     => 'root',
	group     => 'root',
	mode      => '0644',
	notify    => Service['zabbix-agent'],
	}
}

Valide a classe para garantir a falta de erros.

#puppet parser validate init.pp

5. Definição dos nodes (clientes)

Basta agora criar um cliente e declarar a classe.

#vi /etc/puppetlabs/code/environments/production/manifests/cliente-01.pp

node 'cliente-01.devopslab.com.br' {	
	include	zabbixagent
}

No cliente
Por fim se logue no cliente e rode o comando “puppet agent -t“, isto vai instalar, configurar e iniciar o Zabbix-agent.

Instalação em Ubuntu e Debian

Tudo que foi feito até aqui, também deve ser feito em sistemas Ubuntu e Debian, porém tem algumas coisas que mudam em relação ao Centos/Redhat.

Template Ubuntu/Debian
O arquivo zabbix_agentd.conf é diferente entre Centos/Redhat e Ubuntu/Debian, então você vai criar um novo template por exemplo zabbix_agentd.conf.ubuntu.rb.
Neste caso você vai copiar o zabbix_agentd.conf de uma instalação Ubuntu.

Facter da interface de rede
No Centos/Redhat 7 a interface de rede é nomeada como “enp0s3”, no Ubuntu/Debian utiliza-se o bom e velho “eth0”.
Então edite o template zabbix_agentd.conf.ubuntu.rb e deixe o ListenIP desta forma:
ListenIP=<%= @ipaddress_eth0 %>

Lembrando que @ipaddress_eth0 é a consulta do facter.

Abaixo segue uma classe que eu utilizo para a instalação do agente Zabbix em Ubuntu.

class zabbixagent::ubuntu {

#expressao condicional para instalacao do repositorio Ubuntu
if $osfamily == 'Debian' and $operatingsystemrelease =~ /^14.*/  {
	exec {'curl http://repo.zabbix.com/zabbix/3.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_3.0-1+trusty_all.deb -sJL -o /tmp/zabbix-release_3.0-1+trusty_all.deb':
	path 	=> ['/usr/bin', '/usr/sbin'],
	unless  => ['test -f /tmp/zabbix-release_3.0-1+trusty_all.deb']
	}
	package  {'zabbix-release':
	provider => dpkg,
	ensure   => installed,
	source   => '/tmp/zabbix-release_3.0-1+trusty_all.deb'
	}
}

#Instalacao da versao mais nova do zabbix-agent
package { ['zabbix-agent']:
	ensure    => latest,
	require   => Package['zabbix-release'],
	}

#Zabbix-agent rodando
service {'zabbix-agent':
	ensure    => 'running',
	enable    => 'true',
	require   => Package['zabbix-agent'],
	}

#criando o arquivo de configuracao zabbix_agent.conf.
file 	{'zabbix_agentd.conf':
      	path => '/etc/zabbix/zabbix_agentd.conf',
	content => template('zabbixagent/zabbix_agentd.conf.ubuntu.rb'),
	#crie a pasta 'templates' em ../zabbixagent/'
	#o template zabbix_agentd.conf.ubuntu.rb vai ficar dentro da pasta templates.
	owner     => 'root',
	group     => 'root',
	mode      => '0644',
	notify    => Service['zabbix-agent'],
	}

}

Até mais.

Puppet 4.x.x não precisa do Apache/Passenger.

Você não precisa instalar o Apache/Passenger em versões >= Puppet 4.X.X.
Era comum nas versões anteriores ao Puppet 4.X.X (exemplo Puppet 3.X.X) a instalação do Apache/Passenger para a melhora do desempenho do Puppet Master.

Referência:
https://docs.puppetlabs.com/puppetserver/2.2/puppetserver_vs_passenger.html

Puppet Server is intended to function as a drop-in replacement for the existing Apache/Passenger Puppet master stack. However, there are a handful of differences with Puppet Server due to changes in the underlying architecture.

Overall, Puppet Server performance is significantly better than a Puppet master running on the Apache/Passenger stack, but the initial startup is definitely slower.