Upgrade to Pro — share decks privately, control downloads, hide ads and more …

DevOpsDays Brasília - início da infraestrutura como código no TCU - Matheus Hernandes

DevOps-DF
November 18, 2016

DevOpsDays Brasília - início da infraestrutura como código no TCU - Matheus Hernandes

Palestrante: Matheus Hernandes

O início da infraestrutura como código no Tribunal de Contas da União
Nesta apresentação iremos compartilhar nossa experiência com “Infra as Code”, Cultura DevOps e em especial o processo de automação de nossa infraestrutura utilizando Puppet no Tribunal de Contas da União.

Trilha: Automation (Automação)
Público alvo: Iniciante

DevOps-DF

November 18, 2016
Tweet

More Decks by DevOps-DF

Other Decks in Technology

Transcript

  1. O início da infraestrutura como código no Tribunal de Contas

    da União Novembro/2016 Matheus Petronillio Hernandes [email protected]
  2. – Tribunal • 96 servidores, 1536 CPUs e 28TB de

    memória RAM • 1100 VMs e crescendo... – 800 Linux – 300 Windows – Infraestrutura de Aplicações • 165 VMs – 165 Linux – 70 AppServer – 20 DB – 10 HTTP Proxy – 65 Outros Ambiente Atual
  3. – Golden Images • Clones • Templates – Clientes SSH

    • Cluster SSH (cssh) • MobaXTerm • Parallel SSH (pssh) – Scripts – Logins Múltiplos Como era realizada a administração
  4. – Ansible, Chef, PowerShell DSC, Puppet, Salt – Puppet •

    Puppet Forge • Solução estabelecida • Solução madura • Suporte no Brasil Escolha da Ferramenta
  5. – Puppet 3.8 + Future Parser – Foreman – Hiera

    – MCollective A arquitetura Puppet CA Puppet Master + MCO Broker Puppet Master Dev + MCO Broker Puppet UI (Foreman) + MCO Client Puppet Agent + MCO Agent Puppet Agent + MCO Agent
  6. – Puppet Master • Produção • Pré-Produção • Desenvolvimento –

    Desenvolvimento – Homologação – Teste – Treinamento – ... – Puppet Master Dev • Produção • Pré-Produção • Desenvolvimento Ambientes Puppet
  7. – accounts – dns client (/etc/resolv.conf) – locale – ntp

    client – app server – db cluster – web portal Estratégia de Implementação
  8. search tcu.gov.br options rotate timeout:1 nameserver 10.0.0.10 nameserver 10.1.1.10 nameserver

    10.2.2.10 Estratégia de Implementação ... class { '::dnsclient': search => $search_list, options => [ 'rotate', 'timeout:1'], nameservers => $server_list, } ...
  9. Estratégia de Implementação tinker panic 0 disable monitor restrict 127.0.0.1

    restrict -6 ::1 server 10.4.4.10 iburst server 10.5.5.10 iburst driftfile /var/lib/ntp/drift ... class { '::ntp': iburst_enable => true, restrict => $restrict, servers => $server_list, } ...
  10. Estratégia de Implementação – Custom Facts • puppet_environment.rb • puppet_role.rb

    # /etc/hiera.yaml :hierarchy: - default - "node/%{clientcert}" - "environment/%{puppet_environment}/default" - "environment/%{puppet_environment}/role/%{puppet_role}" - "environment/%{puppet_environment}/global" - "role/%{puppet_role}" - global
  11. Estratégia de Implementação – accounts – apache (*) – dns

    client – hosts file – java keystore – locale – mcollective • client • middleware • server – mediawiki (*) – php (*) – mount points – mysql (*) – ntp client – puppet agent – vmware tools – yum repos • epel • puppet • zabbix – zabbix agent
  12. Estratégia de Implementação – apache – backup agents – iptables

    – jboss – oracle – puppet master – samba – selinux – sssd – sudoers – syslog
  13. Roles & Profiles & Components # class component::vmwaretools { class

    { 'component::vmwaretools::forge': } ~> class { 'component::vmwaretools::service': } } # class component::vmwaretools::forge { $version = hiera('component::vmwaretools::version') class { '::vmwaretools': version => $version, archive_url => 'puppet:///modules/component/vmwaretools' } } # class component::vmwaretools::service { $service_enable = hiera('component::vmwaretools::service_enable') $service_ensure = hiera('component::vmwaretools::service_ensure') service { 'vmware-tools': ensure => $service_ensure, enable => $service_enable, } }
  14. Roles & Profiles # class profile::mcollective::client { include component::yum::repos::puppetlabs include

    component::mcollective::client Class['component::yum::repos::puppetlabs'] -> Class['component::mcollective::client'] } # class role::appsrv::jboss { include profile::base include profile::java::keystore include profile::jboss }
  15. Hiera # class component::vmwaretools::forge { $version = hiera('component::vmwaretools::version') class {

    '::vmwaretools': version => $version, force_install => true, archive_url => 'puppet:///modules/component/vmwaretools' } } --- ... component::vmwaretools::version: "50.40.9-1234567" ...
  16. Hiera # /etc/hiera.yaml :hierarchy: - default - "node/%{clientcert}" - "environment/%{puppet_environment}/default"

    - "environment/%{puppet_environment}/role/%{puppet_role}" - "environment/%{puppet_environment}/global" - "role/%{puppet_role}" - global #/var/lib/hiera/global.yaml --- component::accounts::user_list: "root": password: "..." managehome: false
  17. Hiera # /var/lib/hiera/global.yaml --- component::accounts::user_list: "root": password: "..." managehome: false

    # /var/lib/hiera/role/db_oracleasm.yaml/ --- component::accounts::user_list: "root": password: "..." managehome: false "usr_oracle": password: "..." gid: "grp_oracle" groups: - "grp_asm"
  18. Ferramentas Dev # vim-puppet https://github.com/rodjek/vim-puppet # puppetlabs/stdlib puppet module install

    puppetlabs-stdlib # puppet parser validate find . -iname "*.pp" | xargs puppet parser validate parser=future # puppet-lint find . -iname "*.pp" | xargs puppet-lint # NOOP File { noop => true }
  19. Primeiros Frutos – Melhora significativa na gerência de configuração –

    Identificação de contas locais desnecessárias • usuários de teste • usuários de prestadores externos • usuários de serviço – Identificação de entradas inconsistentes no arquivo de hosts
  20. Primeiros Frutos – Distribuição de keystore java • problemas com

    certificados da GlobalSign – VMware tools finalmente é mantido atualizado – Atualização global de entrada em arquivos de hosts • solução de contorno devido a perda de DC Windows