Upload
periclesjunior
View
214
Download
1
Embed Size (px)
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
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.
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: [email protected] / [email protected]: 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