The Foreman – Instalação de hosts EC2 Amazon Web Services via Foreman – parte 3/3

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

Vamos fazer a instalação de um host na Amazon Web Services utilizando o The Foreman.

Parte 1 – Como instalar e configurar o the foreman
Parte 2 – The Foreman instalacao de hosts via pxe bootstrap bare metal vms parte2

Compute Resources suportados pelo The Foreman
http://theforeman.org/manuals/1.10/index.html#5.2ComputeResources

Plugins
http://projects.theforeman.org/projects/foreman/wiki/List_of_Plugins

1. Usuário Amazon WS

A primeira coisa a se fazer é ter um usuário na Amazon WS com permissões administrativas no EC2 e com as chaves de acesso (Access Key ID e Secret Access Key).
Você pode criar um usuário gratuito na AmazonWS. Sendo assim tenha o Access Key ID e Secret Access Key em mãos.

2. Instalação do Compute Resource Foreman-ec2

Logado no servidor do Foreman instale o compute resource EC2 para habilitar o suporte a AmazonWS EC2.

#yum install foreman-ec2
#systemctl reload httpd

foreman-ec2.noarch : Foreman Amazon Web Services (AWS) EC2 support

3. Configuração do EC2 AmazonWS no Foreman

Em Home-The-Foreman -> Infrastructure -> Compute Resources -> New Compute Resurce
Preencha os dados de configuração informando Access Key, Secret Key e Provider EC2.
theforeman-rec-ec1

Faça um teste de conexão e escolha a região. São Paulo a região é sa-east-1.
Clique em “Submit”.

O Foreman vai gerar um para de chaves para comunicação com o EC2. Para verificar a chave logue no console da AmazonWS: http://console.aws.amazon.com -> EC2 -> Network & Security -> Key Pairs.

4. Criação de um Sistema Operacional genérico

Nós precisamos criar um Sistema Operacional no Foreman, da mesma forma que na instalação Bare Metal no tópico parte2.

É um Sistema Operacional genérico pois de fato ele não será usado, o que vai ser usado serão as imagens da Amazon do tipo ami-xxxxx, ami-27b3094b e etc.
theforeman-ami-27b3094b

4.1. Associar o template user data ao novo Sistema Operacional

Associe o template “Kickstart default user data” ao novo Sistema Operacional. Este é um template do tipo user data, em resumo ele é um script que vai instalar e configurar o Puppet e alterar a senha do usuário ec2-user e root.
theforeman-template1

theforeman-template2

Observação:
No template “Kickstart default user data” eu adicionei as linhas:

- RedHat 6
- RedHat 7
#
#Enable password on ssh
/bin/echo ec2-user:senha123456 | chpasswd
/bin/echo root:senha123456 | chpasswd
/bin/sed -i s/PasswordAuthentication\ no/PasswordAuthentication\ yes/g /etc/ssh/sshd_config
/bin/systemctl reload sshd

Template “Kickstart default user data” na íntegra:

<%#
kind: user_data
name: Kickstart default user data
oses:
- CentOS 4
- CentOS 5
- CentOS 6
- CentOS 7
- Fedora 16
- Fedora 17
- Fedora 18
- Fedora 19
- Fedora 20
- RedHat 6
- RedHat 7
-%>
#!/bin/bash

<%# Cloud instances frequently have incorrect hosts data %>
<%= snippet 'fix_hosts' %>

<%
  # safemode renderer does not support unary negation
  pm_set = @host.puppetmaster.empty? ? false : true
  puppet_enabled = pm_set || @host.params['force-puppet'] && @host.params['force-puppet'] == 'true'
%>
<% if puppet_enabled %>
yum install -y puppet
cat > /etc/puppet/puppet.conf << EOF
<%= snippet 'puppet.conf' %>
EOF

# Setup puppet to run on system reboot
/sbin/chkconfig --level 345 puppet on

/usr/bin/puppet agent --config /etc/puppet/puppet.conf --onetime --tags no_such_tag <%= @host.puppetmaster.blank? ? '' : "--server #{@host.puppetmaster}" %> --no-daemonize
<% end -%>

# UserData still needs wget to mark as finished
/usr/bin/wget --quiet --output-document=/dev/null --no-check-certificate <%= foreman_url('built') %>

# Enable password on ssh
/bin/echo ec2-user:senha123456 | chpasswd
/bin/echo root:senha123456 | chpasswd
/bin/sed -i s/PasswordAuthentication\ no/PasswordAuthentication\ yes/g /etc/ssh/sshd_config
/bin/systemctl reload sshd

5. Definição de imagens EC2

Antes de fazer a instalação de um novo host, você precisa antes definir quais imagens estarão habilitadas para o uso.
Em Home-The-Foreman -> Infrastructure -> Compute Resources -> *EC2-AmazonWS-SaoPaulo -> New image

Você precisa ter uma imagem criada na AmazonWS, pode ser uma própria sua, da comunidade, ou uma da AmazonWS.
Eu vou utilizar uma padrão que a própria AmazonWS fornece.
Imagem Amazon: ami-27b3094b
thefoerman-Amazonimagem1

No Foreman a imagem ficou assim:
theforeman-imagemec2-2
Perceba a referência a imagem ami-27b3094b.

*EC2-AmazonWS-SaoPaulo é o nome que eu dei para a zona de instalação de hosts. No seu caso coloque um nome de sua preferência

6. Deploy na Amazon via Foreman

Agora basta iniciar a criação de um servidor na Amazon via Foreman, então entre em
Home-The-Foreman -> Hosts -> New Hosts e crie uma nova instalação.
A minha instância se chama servidorec2aws-1.devopslab.com.br.

Então preencha os campos Host, Puppet Classes, Interfaces e Operating System, Virtual Machine (tipo de instância, neste caso vamos usar a t2.micro) e clique em Submit.

Host
theforeman-aws1

Interface
theforeman-aws2

Operating System
theforeman-aw3

Virtual Machine
theforeman-aw4

Submit – Processo de instalação
theforeman-aws5

theforeman-aws6

Consulte no EC2 AmazonWS a nova instância
theforeman-amazonec2-a

Consulte no Foreman a nova instância (clique em All hosts)
theforeman-amazonec2-b

theforeman-amazonec2-c

Pronto, provisionado um servidor na AmazonWS EC2 via Foreman.

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