gerência de configurações com o puppet

Post on 15-Apr-2017

214 Views

Category:

Software

1 Downloads

Preview:

Click to see full reader

TRANSCRIPT

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

SEMCOMP 2015Salvador/BA 2015.09.04

$ 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)

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.

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

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

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

Quem usa?

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

A Comunidade

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

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

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

ou processo específico;

● Declarativa:● Descrição do estado ou

objetivo a ser alcançado.

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!

Como funciona?

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.

Repositório de módulos

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

GIVE ME THE CODES

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

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

}

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

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

}

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

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"], }}

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

}

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

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

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") }

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

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

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

A Pilha

Exemplos

Profiles e Roles

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

) { include java::params...

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

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

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']}

Pensamento do dia!

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

Madson )

Dashboard

Dashboard

Opa!!! “Peraí”!!!

● Que opressão é essa?

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

Plataformas Suportadas● Server 2003

e 2003 R2● Server 2008

e 2008 R2● Window$ 7● Server 2012

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.

Chocolatey Package Manager

Chocolatey Puppet Provider

Dúvidas??

Contato

Email: pjota@dcc.ufba.br / psdjunior@ufba.brGithub: http://github.com/periclesjuniorLinkedin: http://br.linkedin.com/in/periclesjunior

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

top related