42
Gerência de Configurações com Puppet por Péricles S. da C. Jr. SEMCOMP 2015 Salvador/BA 2015.09.04

Gerência de Configurações com o Puppet

Embed Size (px)

Citation preview

Page 1: Gerência de Configurações com o Puppet

Gerência de Configurações com Puppetpor Péricles S. da C. Jr.

SEMCOMP 2015Salvador/BA 2015.09.04

Page 2: Gerência de Configurações com o Puppet

$ whoami● Péricles S. da C. Jr.● Bolsista na CRI/STI UFBA● Sysadmin Voluntário no

grupo GRACO/DCC-UFBA● Entusiasta FOSS (Debian

GNU/Linux)

Page 3: Gerência de Configurações com o Puppet

Automação de Infraestrutura ● Processo de criar scripts de ambientes● Replicação de configuração no ativo da Instituição● Automatização das atividades operacionais.● Infraestrutura Ágil.

○ Ter qualquer ambiente, seja PaaS, IaaS ou servidores físicos e independente do fornecedor utilizado.

● Gerência de configurações.

Page 4: Gerência de Configurações com o Puppet

Como é feita geralmente...● Configuração manual de ambientes (humano) ● Processos propensos à erros● Aumento dos tempos de ciclo● Impossibilidade de escalabilidade

Page 5: Gerência de Configurações com o Puppet

Tarefas Repetivas● Criação de usuários em servidores● Elaboração de scripts● Configuração de serviços● Configuração de monitoramentos● Criação de imagens de ambientes● Configuração do sistema

operacional● Instalação, atualização e remoção

de pacotes

Page 6: Gerência de Configurações com o Puppet

O que é o Puppet?● Ferramenta com versão Opensource, sob

licença Apache● Desenvolvida pelo Luke Kanie (CEO da

Puppetlabs )● Foco na Gerência de configurações● Linguagem DSL declarativa● Outras alternativas:

○ Chef○ Salt ○ CFEngine ○ Ansible

Page 7: Gerência de Configurações com o Puppet

Quem usa?

Fonte: https://puppetlabs.com/about/customers

Page 8: Gerência de Configurações com o Puppet

A Comunidade

Fonte: https://puppetlabs.com/community/overview

Page 9: Gerência de Configurações com o Puppet

Legal não é! Mas pra que usar isso?● Escalabilidade● Gerenciamento de

configurações:○ Laboratórios (Ex: Desktops

e Notebooks)● Administrar Infraestrutura de

grande escala● Replicação de ambiente de

produção● Distribuição de atualizações

críticas

Page 10: Gerência de Configurações com o Puppet

Imperativa vs. Declarativa● Imperativa:● Descrição de um algoritmo

ou processo específico;

● Declarativa:● Descrição do estado ou

objetivo a ser alcançado.

Page 11: Gerência de Configurações com o Puppet

Exemplo● Imperativa

○ “Faça um sanduíche”○ Step by step○ Receitas, procedimentos ou

algoritmos● Declarativa

○ “Desejo um sanduíche”○ Deve existir um saduíche

com pão francês, presunto, alface, tomate e etc, após essa apresentação no coffe-break para o palestrante!

Page 12: Gerência de Configurações com o Puppet

Como funciona?

Page 13: Gerência de Configurações com o Puppet

Componentes Descrição

Agente Um daemon executando que coleta informações sobre o nó e envia essas informações ao Puppet principal.

Catalog Compilação de fatos que especificam como configurar o nó.

Facts Dados sobre um nó, enviados pelo nó para o Puppet Server.

Manifest Descreve recursos e as dependências entre eles.

Recursos Por exemplo, o pacote, arquivo ou serviço.

Módulo Relacionados a grupos (em um diretório). Por exemplo, um module pode definir como um banco de dados como o MySQL é instalado, configurado e executado.

Classes Coleção de recurso no puppet. Uma unidade lógica aplicada pelo agente através de uma definição de um nó.

Nó Um host gerenciado. Os nós são definidos como classes, mas contêm o nome do host ou nome completo do domínio.

Puppet Server O servidor que gerencia todos os nós do Puppet.

Page 14: Gerência de Configurações com o Puppet

Repositório de módulos

Fonte: https://forge.puppetlabs.com/

Page 15: Gerência de Configurações com o Puppet

GIVE ME THE CODES

Page 16: Gerência de Configurações com o Puppet

Declaração de um nónode /^node[0-9][0-9]\.lab$/ {

$rede= "homologacao"include apacheinclude tomcatinclude ntpinclude aliasesinclude openjdk_jre

}

Page 17: Gerência de Configurações com o Puppet

root@puppetserver:~# tree /etc/puppet/modules/ssh//etc/puppet/modules/ssh/├── manifests│ ├── config.pp│ ├── init.pp│ ├── install.pp│ ├── params.pp│ └── service.pp└── templates└── sshd_config.erb

2 directories, 6 files

Page 18: Gerência de Configurações com o Puppet

class ssh { include ssh::install include ssh::params include ssh::config include ssh::service

}

Page 19: Gerência de Configurações com o Puppet

class ssh::install { include ssh::params package { $ssh::params::packages: ensure => present, require => Class['repository::config'], }}

Page 20: Gerência de Configurações com o Puppet

class ssh::config { include ssh::params file { "/etc/ssh/sshd_config": ensure => present, owner => 'root', group => 'root', mode => '0600', content => template('ssh/sshd_config.erb'), require => Class["ssh::install"], notify => Class["ssh::service"], }}

Page 21: Gerência de Configurações com o Puppet

class ssh::service { include ssh::params service { $ssh::params::service: ensure => running, hasstatus => true, hasrestart => true, enable => true, require => Class["ssh::config"], }

}

Page 22: Gerência de Configurações com o Puppet

class ssh::params { $packages = hiera('ssh_packages') $service = hiera('ssh_service') $port_var = hiera('ssh_port') $allow_groups_var = hiera('ssh_allow_groups')}

Page 23: Gerência de Configurações com o Puppet

---ssh_packages: openssh-serverssh_service: sshssh_port: 6666ssh_allow_groups: sysadmins devels

Page 24: Gerência de Configurações com o Puppet

case $rede { 'desenvolvimento': {

$nameserver_var = ['192.168.xxx.xx']$domain_var = ['foo.exemlo.br']

} 'dmz': {

$nameserver_var = ['10.0.x.xxx','10.0.1.xxx']$domain_var = ['bar.exemplo.br']

} 'homologacao': {

$nameserver_var = ['192.168.xx.xx', '200.xxx.x.xx']$domain_var = ['bla.exemplo.br']

} default: {

fail("A ${rede} nao pertence a nenhuma rede de servidores") }

Page 25: Gerência de Configurações com o Puppet

<% @nameserver_var.each do |val| -%>nameserver <%= val %>

<% end -%><% @domain_var.each do |val_domain| -%>

search <%= val_domain -%><% end -%>

Page 26: Gerência de Configurações com o Puppet

A Pilha

Page 27: Gerência de Configurações com o Puppet

Exemplos

Page 28: Gerência de Configurações com o Puppet

Profiles e Roles

class java($distribution = 'jdk',$version = 'present',$package = undef,$java_alternative = undef,$java_alternative_path= undef

) { include java::params...

Page 29: Gerência de Configurações com o Puppet

class profile::java::jre { class { 'java': distribution => 'jre', } contain ::java}

Page 30: Gerência de Configurações com o Puppet

class logstash { yumrepo { 'logstash-1.5': ... } -> package { 'logstash': ... } -> file {'/etc/logstash/conf.d/central.conf': ... } ~> service {'logstash': ... }}

Page 31: Gerência de Configurações com o Puppet

class role::logserver { include profile::java::jre include profile::elasticsearch include profile::logstash include profile::kibana include profile::logging

Class['profile::java::jre'] -> Class['profile::elasticsearch'] Class['profile::elasticsearch'] -> Class['profile::logstash'] Class['profile::logstash'] -> Class['profile::kibana']}

Page 32: Gerência de Configurações com o Puppet

Pensamento do dia!

O “sucesso” do projeto de um bolsista depende do mouse ( by

Madson )

Page 33: Gerência de Configurações com o Puppet

Dashboard

Page 34: Gerência de Configurações com o Puppet

Dashboard

Page 35: Gerência de Configurações com o Puppet

Opa!!! “Peraí”!!!

● Que opressão é essa?

● E seu meu ativo tiver somente M$-Window$, como é que eu fico!?!?!?

Page 36: Gerência de Configurações com o Puppet

Plataformas Suportadas● Server 2003

e 2003 R2● Server 2008

e 2008 R2● Window$ 7● Server 2012

Page 37: Gerência de Configurações com o Puppet

Tipos de recursos Suportados

● File● User● Group● Schedule_task

● Package● Service● Exec● Host

Fonte: https://docs.puppetlabs.com/references/latest/type.html

Obs: 49 tipos de recursos em ambientes *nix.

Page 38: Gerência de Configurações com o Puppet

Chocolatey Package Manager

Page 39: Gerência de Configurações com o Puppet

Chocolatey Puppet Provider

Page 40: Gerência de Configurações com o Puppet

Dúvidas??

Page 41: Gerência de Configurações com o Puppet

Contato

Email: [email protected] / [email protected]: http://github.com/periclesjuniorLinkedin: http://br.linkedin.com/in/periclesjunior

Page 42: Gerência de Configurações com o Puppet

Referências● http://www.ibm.com/developerworks/br/library/a-devops2/● http://softwarelivre.gov.br/palestras-tecnicas-cisl/palestra_puppet● http://spin.atomicobject.com/2012/09/13/from-imperative-to-

declarative-system-configuration-with-puppet/● http://www.example42.com/tutorials/PuppetTutorial● http://www.olindata.com/blog/2014/02/how-can-i-use-puppet● https://chocolatey.org/● http://docs.puppetlabs.com/windows/index.html● http://www.slideshare.net/PuppetLabs/plugging-chocolatey-into-your-

puppet-infrastructure-rob-reynolds-puppet-labs● https://github.com/instruct-br/webinar-elk● https://www.youtube.com/playlist?list=PLwbuDNhcHQgAr-

d5sOB0xwpQw3SNbsnDa