Puppet – Torne Seu Datacenter áGil
Upcoming SlideShare
Loading in...5
×
 

Puppet – Torne Seu Datacenter áGil

on

  • 2,829 views

Apresentação realizada no Forum Internacional de Software Livre (FISL) de 2010.

Apresentação realizada no Forum Internacional de Software Livre (FISL) de 2010.

Statistics

Views

Total Views
2,829
Views on SlideShare
2,819
Embed Views
10

Actions

Likes
0
Downloads
39
Comments
0

2 Embeds 10

http://www.linkedin.com 8
https://www.linkedin.com 2

Accessibility

Categories

Upload Details

Uploaded via as OpenOffice

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment
  • Breve apresentação Quiz: - Quandos sysadmin temos aqui? - Quantos sysadmin tem alguma afinidade com programação? - E se a configuração fosse vista como programavel? Bom, a nossa paletra tem duas partes. Uma breve indrodução ao Puppet e como utilzamos o Puppet no ambiente do Terra.
  • Surge como sucessor do cfengine para administrar um ou milhares de servidores, ou 10000 servidores conforme a idéia do idealizador. É um framework open-source robusto, flexivel e estensivel. Destina-se a automação e gerencia de configuração, tambem é utilizado como solução para execução de tarefas repetitivas. Por exemplo ... Se destina especialmente para administradores de sistemas (sysadmin). 5 minutos falando da historia
  • Irei demostrar na sequencia o que é cada item e qual sua funcionalidade.
  • Puppetmasterd is a central management daemon. In most installations, you’ll have one puppetmasterd server and each managed machine will run ‘puppetd’. By default, puppetmasterd runs a certificate authority, which you can read more about in the security section . Puppetmasterd will automatically serve up puppet orders to managed systems, as well as files and templates. Puppetd runs on each managed node. By default, it will wake up every 30 minutes (configurable), check in with puppetmasterd, send puppetmasterd new information about the system (facts), and then recieve a ‘compiled catalog’ containing the desired system configuration that should be applied as ordered by the central server. When running Puppet locally (for instance, to test manifests, or in a non-networked disconnected case), puppet is run instead of puppetd. It then uses local files, and does not try to contact the central server. Otherwise, it behaves the same as puppetd.
  • Catalogo que tem como responsabilidade de agrupar os facter, classes e seus resources.
  • Catalogo que tem como responsabilidade de agrupar os facter, classes e seus resources
  • Criando uma classe para instalar e configurar de maneira automaitzada o webserver nginx Explicar com calma cada passo do exemplo...
  • idem
  • idem
  • Ponte com resolv.conf. Exemplo em multiplos datacenters Definitions, on the other hand, can be reused many times on the same node. They essentially work as if you created your own Puppet type just by using the language. They are meant to be evaluated multiple times, with different inputs each time. This means you can pass variable values into the defines. Both classes and defines are very useful and you should make use of them when building out your puppet infrastructure. Classes Classes are introduced with the class keyword, and their contents are wrapped in curly braces. The following simple example creates a simple class that manages two seperate files:
  • Por exemplo, o resolv.conf de um servidor em uma determinada localidade consulta servidores de DNS especificos. Explicar para criança....
  • Idem.... Explicar para criança
  • Basenode é um modelo padrão que adotamos que todo o servidor deve ter. Já o monit-web-poa é classe que herda caracteriscas de basenode e constroe um servidor do frontend da monitoracao ....
  • Basenode é um modelo padrão que adotamos que todo o servidor deve ter. Já o monit-web-poa é classe que herda caracteriscas de basenode e constroe um servidor do frontend da monitoracao ....
  • Facter is an independent, cross-platform Ruby library designed to gather information on all the nodes you will be managing with Puppet. It is available on all platforms that Puppet is available. Quick information gathering on nodes Facter is a lightweight program that gathers basic node information about the hardware and operating system. Facter is especially useful for retrieving things like operating system names, hardware characteristics, IP addresses, MAC addresses, and SSH keys.
  • Aqui a saida dos facter que podemos utilizar para tomada de decissão, por exemplo, a construção de um define...
  • Exemplo de uso do facter. O proprio resolve $operationsystem
  • Visite a documentação é muito boa e bem completa

Puppet – Torne Seu Datacenter áGil Puppet – Torne Seu Datacenter áGil Presentation Transcript

  • Puppet – Torne seu datacenter ágil Jeferson Rodrigues
  • Puppet
    • Como surgiu?
    • A que se destina?
    • Pra quem se destina?
    www.puppetlabs.com/company/overview /
  • Puppet: Modelo
    • Componentes
    • Manifest
    • Classes
    • Resource Types
    • Defines
    • Templates
    • Facter
  • Puppet: Componentes
    • Puppetmasterd é o servidor central da solução.
    • Puppetd é o cliente da solução que busca o catálogo compilado e reporta informações do sistema para servidor.
    • Puppet é um aplicativo, em especial, para teste do catálogo.
  • Puppet: Manifest
    • O Manifest é uma declaração de expressões para controlar o Puppet.
    • É uma linguagem de domínio específica.
  • Puppet: Manifest
  • Puppet: Classe e Resource Types
    • Classe é uma estrutura lógica para agrupar recursos.
    • Resource é a unidade fundamental do Puppet. O resource representa aspectos do sistema, por exemplo, um serviço, um arquivo ou diretório, um pacote ou qualquer outro resource customizado e relacionados.
  • Puppet: Classe e Resource Types
    • class nginx {
    • package { "nginx":
    • ensure => "installed";
    • }
    • file { "/etc/nginx/nginx.conf":
    • owner => "root",
    • group => "root",
    • mode => 644,
    • require => Package["nginx"],
    • notify => Service["nginx"],
    • source => "puppet://$server/files/$platform/etc/nginx/nginx.conf";
    • }
    • service { "nginx":
    • restart => "/usr/sbin/nginx -s reload > /dev/null",
    • binary => "nginx",
    • ensure => "running",
    • require => File["/etc/nginx/nginx.conf"];
    • }
    • }
  • Puppet: Resource Types
    • exec { "nginx-reload":
    • path => "/usr/bin:/usr/sbin:/bin",
    • command => "nginx -s reload > /dev/null",
    • onlyif => "nginx -t -c /etc/nginx/nginx.conf > /dev/null",
    • subscribe => File["/etc/nginx/nginx.conf"],
    • refreshonly => true,
    • require => File["/etc/nginx/nginx.conf"];
    • }
    • user { "www":
    • provider => useradd,
    • comment => 'Web User',
    • ensure => 'present',
    • home => '/var/www',
    • shell => '/sbin/nologin';
    • }
  • Puppet: Resource Types
    • cron { "tmpwatch-varnish":
    • command => "/usr/sbin/tmpwatch -qm 6 /var/log/varnish",
    • user => "root",
    • minute => 30;
    • }
    • group { "www":
    • gid => 503;
    • }
  • Puppet: Define
    • Define é muito semelhante a uma classe, mas é possível reaproveitar um codigo e manipulá-lo por criterios.
  • Puppet: Define
    • define resolv_conf ($domainname = "$domain", $searchpath, $nameservers) {
    • case $operatingsystem {
    • FreeBSD: { $group = "wheel" }
    • default: { $group = "root" }
    • }
    • file { "/etc/resolv.conf":
    • owner => root,
    • group => $group,
    • mode => 444,
    • content => template('header.erb', 'resolv.conf.erb')
    • }
    • }
  • Puppet: Define
    • class resolv :: client {
    • case $ datacenter {
    • “MIA”: {
    • resolv_conf { " resolv . conf ":
    • domainname => 'terra.com',
    • searchpath => ['terra.com', ' tpn .terra.com'],
    • nameservers => ['10.253.120.200', '10.253.120.201', '10.253.120.202'];
    • }
    • }
    • default: {
    • resolv_conf { " resolv . conf ":
    • domainname => 'terra.com. br ',
    • searchpath => [' tpn .terra.com', 'terra.com. br '],
    • nameservers => ['10.225.54.200', '10.225.54.201', '10.225.54.202'];
    • }
    • }
    • }
    • }
  • Puppet: Template resolv.conf.erb
    • domain <%= domainname %>
    • <% if !searchpath.empty? %>search <%= searchpath.join(&quot; &quot;) %><% end -%>
    • <% nameservers.each do |ns| %>nameserver <%= ns %>
    • <% end -%>
    • options rotate
    ############################## # By Puppet ############################## domain terra.com.br search tpn.terra.com terra.com.br nameserver 10.225.54.200 nameserver 10.225.54.201 nameserver 10.225.54.202 options rotate cat /etc/resolv.conf Header.erb resolv.conf.erb
  • Puppet : Nodes node basenode { include ntp :: client include puppet :: client include resolv :: client include host:: ssh } node_terminus = plain
  • Puppet : Nodes
    • class monit-web-poa inherits basenode {
    • $platform = 'monit-web-poa'
    • $datacenter = 'POA'
    • include apache
    • include php
    • include semon::web
    • include semon::util
    • include oracle::client
    • nfs::mount { &quot;/nfs/semon-rrd01&quot; : }
    • nfs::mount { &quot;/nfs/semon-rrd02&quot; : }
    • }
    • node_terminus = ldap
    Facter!
  • Facter
    • Facter é uma biblioteca em ruby destina a reunir informações do sistemas para tomada de decisão do Puppet.
    • Reune informações de sistema operacional, por exemplo, versão do kernel, distribuição, numero de interfaces de redes e outras.
  • Facter
    • [root@puppet-master01-poa ~]# facter
    • architecture => x86_64
    • domain => tpn.terra.com
    • facterversion => 1.5.7
    • fqdn => puppet-master01-poa.tpn.terra.com
    • hardwareisa => x86_64
    • hostname => puppet-master01-poa
    • interfaces => eth0
    • ipaddress => 200.176.14.72
    • ipaddress_eth0 => 200.176.14.72
    • is_virtual => false
    • kernel => Linux
    • kernelmajversion => 2.6
    • kernelversion => 2.6.18
    • lsbdistdescription => CentOS release 5.5 (Final)
    • lsbdistid => CentOS
    • lsbdistrelease => 5.5
    • lsbmajdistrelease => 5
  • Facter
    • <% if manufacturer == &quot;Dell Computer Corporation&quot; -%>
    • # Dell Agent
    • smuxpeer .1.3.6.1.4.1.674.10892.1<% end -%>
    • <% if manufacturer == &quot;HP&quot; -%>
    • # HP Agent
    • <% if architecture == &quot;x86_64&quot; -%>
    • dlmod cmaX /usr/lib64/libcmaX64.so
    • <% else -%>
    • dlmod cmaX /usr/lib/libcmaX.so
    • <% end -%><% end -%>
    • snmpd.conf com facter
  • Documentação
    • http://docs.puppetlabs.com/
    • http://github.com/lak/puppet
  • Terra: Automação da Infraestrutura
    • Instalar 1 servidor manualmente pode até ser divertido
    • Instalar 100 servidores não é!
    • O tempo é o fator crítico
    • A qualidade é prejudicada
  • Terra: Processo de Deploy
  • Terra: Objetivos projeto Automação
    • Deploy Automatizado de Serviço
    • Deploy Automatizado da Configuração
    • Integração das transições de deploy
    • Histórico de Mudança
  • Fatores Críticos de Sucesso
    • Prova de conceito
    • Planejamento
    • Apoio da diretoria
    • Apoio dos formadores de opinião
    • “De o doce para a criança”
  • Terra: Desafios do Projeto
    • Resistência a mudança
      • É normal existir algum nível de resistência
      • É uma oportunidade de crescimento
      • Vença os “por quês?”
    • Nova maneira de administrar
    • Configuração é vista como programável
  • Arquitetura
  • Desenho da Arquitetura Apache mod_ssl mod_passenger Rack: /puppet/rack/puppetmasterd Load Balance SVN puppet-manifest puppet-facts puppet-files puppet-templates LDAP LDAP LDAP puppetclass MySQL reports sysadmin puppet client
  • Integração
    • Monitoramento
    • Repositórios de pacotes
    • Inventario Básico
    • Deploy do SO
    • Gestão de Identidade
    • Webservices
  • Webservices
    • Método para configurar PuppetClass
    • Método para configurar VLAN
    • Método para configurar DNS (em construção)
  • Webservice PuppetClass
  • Webservice SetVLAN
  • Gestão de Identidade
    • Integre com solução de autenticação
    • Centralize toda a autenticação
    • Automatize a configuração da autenticação
  • Deploy de sistema operacional
    • Utilize PXE e KS
    • Use pre e post install do KS
  • Repositórios de pacotes
    • Crie repositórios de pacotes com YUM
    • Automatize os repositórios
    class yumrepos { case $datacenter { MIA: { $server = &quot;terralinux-mia.tpn.terra.com&quot; } default: { $server = &quot;terralinux-poa.tpn.terra.com&quot; } } trrnoarch&quot;: name => &quot;trrnoarch&quot;, baseurl => &quot;http://$server/yum/sistemas/centos/$lsbmajdistrelease/noarch/&quot;, descr => &quot;Terra-NoArch&quot;, enabled => 1; } }
  • Inventario Básico
    • Faça uso da base de reports
    • Faça uso dos facters
    mysql> select b.name, a.value from fact_values a, fact_names b where a.host_id = (select id from hosts where name like 'osborne.%') and a.fact_name_id = b.id and a.value = &quot;monit-web-poa&quot; order by b.name; +-------------+---------------+ | name | value | +-------------+---------------+ | puppetclass | monit-web-poa | +-------------+---------------+ 1 row in set (0.00 sec)
  • Monitoração
    • Categorize seu servidor por plataforma
    • Integre com SNMP
    • Smart Discovery
    snmpget -v2c -c xxxxxx 127.0.0.1 1.3.6.1.4.1.7803.3.1.20 TERRA-SYSTEM-MIB::CorePuppetClass = STRING: &quot;monit-web-poa&quot;
  • Puppet e o Terra
    • 358 resource Package
    • 248 plataformas
    • 39 defines
    • 10267 files
  • Terra: Tecnologia
  • Puppet – Torne seu datacenter ágil Jeferson Rodrigues Muito Obrigado!!! Perguntas? www.terra.com.br/trabalhenoterra