O documento discute os sistemas de gerenciamento de configuração Puppet, Chef e Ansible. Ele explica o que é gerenciamento de configuração, como esses sistemas funcionam, suas arquiteturas, e como declarar recursos básicos em cada um. O documento também fornece exemplos de como aplicar as configurações e próximos passos para automação.
1. Gerenciamento de Configuração
“DevOps em Ação”
Samuel Sampaio - SMk Tecnologia
samuel@smktecnologia.com.br
github.com/SamukaSMk
2. O Que é Gerenciamento de
Configuração ?
● O que é:
“Gerenciamento de Configuração é o processo de controle de itens configuraveis e seus
requisitos, gerenciados e declarados de forma controlada para mudanças, organizando e
padronizando a infraestrutura de TI de uma forma ágil e automatizada.
● Como funciona:
Levantar
Dependências
Aplicar
dependencias no Declarar
ambiente Configurações
Testar Alterações
By: Samuel Sampaio – SMk Technologia <samuel@smktecnologia.com.br> aka: github.com/SamukaSMk
3. Sistemas de Gerenciamento
de Configurações Atuais
● Puppet ● Chef ● Ansible
(Desenv. em Ruby) (Desenv. em Ruby) (Desenv. Em Python)
Muito Conhecido Conhecido no mundo Não tão famoso
no ambiente e TI e de TI, porem mais quando os outros,
complexo de porem de simples
Facil de Configurar configurar/utilizar utilização
By: Samuel Sampaio – SMk Technologia <samuel@smktecnologia.com.br> aka: github.com/SamukaSMk
4. Como Compara-los ?
“Depende das necessidades de Aplicação”
Puppet Chef
http://www.transpi.com.br/noticias/saipem7000_01.jpg
Ansible
By: Samuel Sampaio – SMk Technologia
http://www.motorstown.com/imgs/22100-ducati-1098-superbike-4.html <samuel@smktecnologia.com.br>
Aka: github.com/SamukaSMk
8. Principais Itens de Configuração (IC's)
Para o Inventário de Recursos :
➔ Grupos de ativos/servidores de seu (parque de maquinas)
➔ Aplicações Instaladas x Versionamento de Necessidades
➔ Atributos Especificos de Configurações das Aplicações
➔ Configurações Padrões do ambiente necessárias para um certo proprósito
➔ Execução de Serviços/Processos (Agendado x 24x7)
By: Samuel Sampaio – SMk Technologia <samuel@smktecnologia.com.br> aka: github.com/SamukaSMk
9. Métodos de Definição
de Recursos:
Uso: Puppet Chef Ansible
Linguagem: ● Própria – DSL ● Própria – DSL ● Markup: YAML
● Ruby
Declaração das ● Manifestos ● CookBooks ● PlayBooks
Configurações:
Itens de ● Resources ● Resources ● Modules
configuração:
Blocos de ● Classes ● Blocos de ● Tasks
configurações: Cookbooks
● Blocos Ruby
Pacotes de ● Módulos ●CookBooks ●PlayBooks
Declarações Genéricos Genéricos
By: Samuel Sampaio – SMk Technologia <samuel@smktecnologia.com.br> aka: github.com/SamukaSMk
10. Declaração de Inventário e
Conjuntos de Recursos :
Puppet Ansible
ARQUIVO: manifests/site.pp ARQUIVO: hosts
# Declaraçoes que afetam todos hosts [test_servers]
node default { web-servers-1
include classes_dos_manifestos,
} [apache_servers]
web-servers-2
# Declaraçoes afetam hosts do grupo test_servers web-servers-3
node test_servers { 10.0.0.10
include classes_dos_manifestos,
}
# Declaraçoes afetam host especifico web-server-1
node web-servers-1 inherits test_servers {
include usuarios_smktech
}
ARQUIVO: manifests/classes/exemplo.pp ARQUIVO: playbooks/exemplo-test_servers.yml
- hosts: test_servers
class usuarios_smktech { tasks:
# Declaraçoes de Recursos AQUI - name: Nome do Recurso
tipo_de_recurso { 'nome_ou_acao_do_recurso' : action:
atrubuto_do_recurso => 'valor', modulo_do_recurso
atrubuto_do_recurso => 'valor', atrubuto_do_recurso=valor
} atrubuto_do_recurso='valor'
- modulo_do_recurso: atrubuto_do_recurso=valor
} handlers:
- name: Nome do Handler
- action: service name=httpd state=restarted
By: Samuel Sampaio – SMk Technologia <samuel@smktecnologia.com.br> aka: github.com/SamukaSMk
11. Mãos a Massa: Definição de Recursos Básicos
➔ Grupos de ativos/servidores (parque de maquinas) :
➔ test_servers:
➔ Web-server-1 (192.168.100.15)
➔ Configurações Padrões necessárias do ambiente (SMK Tecnologia)
– Grupo de Usuários:
● Smktech
– Gid: 1000
– Usuários:
● SamukaSmk
– Uid: 1001
– Grupo: Smktech
● Lindenbergh
– Uid: 1002
– Grupo: Smktech
● Aplicações Instaladas x Versionamento de necessidades e (segurança) :
– NTP:
● Versão: 4.2.6p5
● Repo: epel6
– OpenSSH:
● Versão: v5.3p1
● Repo: amzn-main
● Atributos Especificos de Configurações das Aplicações:
– Privilégios (Sudoers):
● Grupo: (smktech) com sudo sem senha
– Acesso (SSH):
● Grupo: (smktech)
– HoraCerta (NTP):
By: Samuel Sampaio – SMk Technologia
● Coleta de hora dos servidores brasileiros <samuel@smktecnologia.com.br>
Aka: github.com/SamukaSMk
12. Declaração de Recursos Básicos:
1. Usuários / Grupo
Puppet Ansible
# CRIA Grupo (smktech) ### Exemplo de uso do módulo, sem declarar action:
group { 'smktech' :
ensure => 'present', # CRIA Grupo (smktech) no linux
gid => '1000', - group:
name => 'smktech', name=smktech
} gid=1000
state=present
# CRIA Usuario (samukasmk), no grupo (smktech)
user { 'samukasmk' : ### Exemplo de uso dos módulos, declararando na action
ensure => present, - name: CRIA Usuario (samukasmk), no grupo (smktech)
uid => '1001', action:
gid => 'smktech', user
shell => '/bin/bash', name=samukasmk
home => '/home/samukasmk', group=smktech
managehome => true, shell=/bin/bash
} uid=1001
state=present
# CRIA Usuario (lindenberg), no grupo (smktech)
user { 'lindenbergh' : - name: CRIA Usuario (lindenbergh), no grupo (smktech)
ensure => present, action:
uid => '1002', user
gid => 'smktech', name=lindenbergh
shell => '/bin/bash', group=smktech
home => '/home/adminzero', shell=/bin/bash
managehome => true, uid=1002
} state=present
By: Samuel Sampaio – SMk Technologia <samuel@smktecnologia.com.br> aka: github.com/SamukaSMk
13. Declaração de Recursos Básicos:
2. Atribuiçoes de Chaves SSH
Puppet Ansible
# ATRUIBUI Chave ao usuário (samukasmk) - name: ATRIBUI Chave ao usuário
ssh_authorized_key { 'samukasmk.pub' : (samukasmk)
ensure => 'present', action:
user => 'samukasmk',
key => 'ssh-rsa AAAAs8ds879d7...',
authorized_key
} user=samukasmk
state=present
# ATRUIBUI Chave ao usuário (lindenbergh) key=”ssh-rsa AAAAs8ds879d7...”
ssh_authorized_key { 'lindenbergh.pub' :
ensure => 'present', - name: ATRIBUI Chave ao usuário
user => 'lindenbergh', (lindenbergh)
key => 'ssh-rsa AAAAdud7h8d7...', action:
} authorized_key
user=lindenbergh
state=present
key=”ssh-rsa AAAAdud7h8d7...”
By: Samuel Sampaio – SMk Technologia <samuel@smktecnologia.com.br> aka: github.com/SamukaSMk
14. Declaração de Recursos Básicos:
3. Privilégios (Sudoers)
Puppet
# Se NÃO (Encontrar o grupo [smktech] liberado)
# LIBERA o grupo [smktech] com permissão de 'sudo su'.
exec { ”/bin/echo '%smktech ALL=(ALL) NOPASSWD : ALL' >> /etc/sudoers” :
unless => ”grep '^%smktech.*NOPASSWD' /etc/sudoers > /dev/null 2>&1”,
path => ”/usr/bin:/usr/sbin:/bin”,
}
Ansible
- name: LIBERA o grupo (smktech) com permissão de 'sudo su', por substituição
action:
“ lineinfile
dest=/etc/sudoers
regexp=''
line='%smktech ALL=(ALL) NOPASSWD : ALL'
backup=yes
insertafter=EOF
state=present “
By: Samuel Sampaio – SMk Technologia <samuel@smktecnologia.com.br> aka: github.com/SamukaSMk
15. Declaração de Recursos Básicos:
4. HoraCerta (NTP)
Puppet Ansible
# INSTALA pacote (ntp) - name: INSTALA pacote (ntp)
package { 'ntp' : action:
ensure => 'installed', yum
} name=ntp
state=present
# HABILITA o serviço (NTPd)
service { 'ntpd' : - name: CRIA o arquivo (/etc/ntp.conf) a partir do
ensure => 'running', template
enable => true, action:
require => Package["ntp"], template
} src=base_linux/ntpd/templates/ntp.conf.j2
dest=/etc/ntp.conf
# CRIA o arquivo (/etc/ntp.conf) a partir do template owner=root
file { '/etc/ntp.conf' : group=root
source => 'puppet:///files/base_linux/ntp/ntp.conf', mode=0644
ensure => present,
owner => 'root', - name: HABILITA o serviço (NTPd) e o REINICIA
group => 'root', para efetivar mudancas
mode => 644, action:
notify => Service["ntpd"], service
} name=ntpd
enabled=yes
state=restarted
By: Samuel Sampaio – SMk Technologia <samuel@smktecnologia.com.br> aka: github.com/SamukaSMk
16. Aplicação de Declarações:
Puppet
# Uma Vez Configurado os manifestos e testados:
# 1. Certifique-se que o serviço puppet (client/node) esta rodando
service puppet restart
# 2. Aguarde por 30 min para as declarações serem aplicadas.
# Forçando a aplicação das declarações pelo (server/master) {para teste dos manifestos}
puppet apply --verbose --debug /etc/puppet/manifests/site.pp
# Declaração na linha de comando (no quente) [ad-hoc]:
puppet resource user dave ensure=present shell="/bin/zsh" home="/home/dave" managehome=true
Ansible
# Exportando a variavel do arquivo de inventário
export ANSIBLE_HOSTS=./hosts
# Carregando ssh-agent e chave
ssh-agent $BASH
ssh-add /path/para/chave_ssh
# Uma Vez Configurado o playbook:
ansible-playbook -u usuario --sudo test_servers-playbook.yml
# Declaração na linha de comando (no quente) [ad-hoc]:
ansible -u usuario –sudo grupo_de_servidores -m user -a “name=dave state=present shell=/bin/zsh”
By: Samuel Sampaio – SMk Technologia <samuel@smktecnologia.com.br> aka: github.com/SamukaSMk
17. Controle de Versões:
Puppet
cd /etc/puppet
git add .
git commit -m “Alteração XPTO do manifesto BLAH”
Ansible
cd /etc/ansible
git add .
git commit -m “Alteração XPTO do playbook BLAH.yml”
By: Samuel Sampaio – SMk Technologia <samuel@smktecnologia.com.br> aka: github.com/SamukaSMk
18. Próximos Passos Para
Auto-Automação:
Puppet
# Módulo não-nativo do puppet
puppet help mode_aws
Ansible
# Módulos Nativos do Ansible
ansible -u user --sudo -m add_host -a “ hostname=${ip_from_ec2create}
groups=just_created foo=42”
ansible -u user --sudo -m ec2 -a “keypair=admin instance_type=m1.large image=emi-
40603AD1 wait=true group=webserver count=3 group=webservers”
By: Samuel Sampaio – SMk Technologia <samuel@smktecnologia.com.br> aka: github.com/SamukaSMk
19. Perguntas?
Muito Obrigado!
Por: Samuel Sampaio
<samukasmk@gmail.com>
By: Samuel Sampaio – SMk Technologia <samuel@smktecnologia.com.br> aka: github.com/SamukaSMk