Transcript

Gerenciamento de Configuraes Puppet

05/08/2015

Roberto Scudeller
[email protected]
[email protected]

Inicio da apresentao: quem eu sou. E contato.

Gerenciamento de Configuraes - Puppet

Objetivos:Atualizao da ferramenta;

Separao dos ambientes de homolog/dev de production;

Adequao ao padro de mercado;

Utilizao de mdulos prontos via puppetforge;

Poucos mdulos homemade;

Testes automatizados nos mdulos;

Separao de dados de recursos (manifests);

Exportao de dados para analise via puppetdb;

Criao de pipeline para entrega em produo via jenkins.

Objetivos desta apresentao

Gerenciamento de Configuraes - Puppet

homolog/dev

production

(FS) environments =>
common/modules development/modules development/hostsgroup Homolog/... Production/...

Resources e Data juntos!!!!

SVN trunk!!!!

Este um ambiente legado que tinhamos na empresa, usando o svn como controle de verso e utilizando a funao de fileserver do puppet.Problemas como resources e data nos manifests do puppet e todos no trunk do SVN.

Gerenciamento de Configuraes - Puppet

#puppet agent -t

$svn ci -m 'alter something'

Local File System

sysadmin

Aqui temos um exemplo de utilizao do puppet neste ambiente legado, onde os sysadmins fazem o commit diretamente no ambiente e sem nenhum teste (apenas alguns hooks do svn), os manifests j se encontravam em produo. Mesmo com a estrutura modular do puppet, podiamos ter algum mdulo com problema quebrando o catalogo tanto de servidores de desenvolvimento como servidores de produo.

Gerenciamento de Configuraes - Puppet

Portanto, relaxa! Tudo ir bem. Ser?

Gerenciamento de Configuraes - Puppet

A no ser que algo quebre e coloque tudo a perder...

Gerenciamento de Configuraes - Puppet

Alteraes:Nova Verso: 4.2

Como era:/etc/puppet/

Como fica:/etc/puppetlabs/

homolog/dev

production

Git pull/ clone

Environments: $production $branchs

Modules: Puppetfile

Modules (homemade): - git-repo/modules.

Nova verso do puppet e separao do ambiente de desenvolvimento de produo. Dando mais liberdade para os sysadmins atuarem sem terem receio de quebrar algo em produo.
Nesta nova implantao, usaremos mdulos do puppet forge e os dinamyc environments (com os branchs do git)

Gerenciamento de Configuraes - Puppet

#puppetdb

#hosts

Adicionaremos o puppet-db para expandir a visibilidade alm de suas outras funcionalidades, como exported resources.

Gerenciamento de Configuraes - Puppet

Esta a cara do puppet DB.

Gerenciamento de Configuraes - Puppet

$ curl http://puppet.localdomain:8080/pdb/query/v4/nodes/[ { "deactivated" : null, "facts_environment" : "production", "report_environment" : "production", "catalog_environment" : "production", "facts_timestamp" : "2015-07-28T19:33:07.861Z", "expired" : null, "report_timestamp" : "2015-07-28T19:33:08.542Z", "certname" : "puppet-1.localdomain", "catalog_timestamp" : "2015-07-28T19:33:08.762Z"} ]

Um exemplo de informao que o puppet DB trs com um simples GET.

Gerenciamento de Configuraes - Puppet

$ curl http://puppet.localdomain:8080/pdb/query/v4/resources/File[ { "tags" : [ "role", "class", "puppetserver", "profile", "profile::puppetagent", "file", "puppetagent", "role::puppetserver" ], "file" : "/etc/puppetlabs/code/environments/production/modules/profile/manifests/puppetagent.pp", "type" : "File", "title" : "/tmp/tmp.000", "line" : 5, "resource" : "57e64e48ecb6cd68464f1f48bf52a8afea459ae1", "environment" : "production", "certname" : "puppet-1.localdomain", "parameters" : { "content" : "puppet.localdomain", "ensure" : "present" }, "exported" : false} ]

Outro exemplo de puppetdb.

Gerenciamento de Configuraes - Puppet

/etc/puppetlabs/code/environments: $branch = production hieradata/*.yaml manifests/ modules/profile modules/role

/etc/puppetlabs/code/modules/{puppetforge sources}

Role => funo de negcioProfile => regra de implantaoModulos => classesHiera => data

Role e Profile so mdulos do puppet para organizar as classes.

Nova organizao do puppet:

Visualizao da estrutura de diretrios do puppet e como ser a funo de alguns diretrios dentro do puppet.
Uma recomendao a utilizao dos mdulos profile e role para organizao de seus manifests e aplicao das classes importadas do puppet forge.A utilizao do hiera como guardio da data, da informao referente aos manifests, como um IP do servidor de monitorao por exemplo.

Gerenciamento de Configuraes - Puppet

hieradata/puppet_role/servername.yaml- - -
puppetmaster: puppet.localdomainclasses:
include role::webserver

class role::webserver { include profile::apache
include profile::php include profile::certificados }

class profile::apache { apache::vhost { 'first.example.com': port => '80', docroot => '/var/www/first', }}

Aqui alguns exemplos de profile, role e hiera data.Utilizando o hiera como node classifier.

Gerenciamento de Configuraes - Puppet

1 - Git push testing

hook

#puppet agent -t environment=testing

Testes:
- rspec-puppet;
- syntax check
- lint

DEPLOY $branch=testing

IF OK

#merge $production

sysadmin

Este seria o diagrama do workflow propopsto, iniciando sempre com as alteraes do sysadmin no repositrio do git e fazendo o push para o git que inicia todo o processo com um hook que chama o jenkins para validar suas alteraes, como check de manifests, check de templates e etc, para caso de sucesso nos testes, ele aplica no servidor do puppet. Aps isso, o sysadmin teste usando a tag --environment testing ao executar o puppet nos servidores. Assim que suas alteraes estiverem ok, ele realiza o merge deste cdigo em produo. Assim suas alteraes seriam visualizadas por todo o parque de computadores.

Gerenciamento de Configuraes - Puppet

Workflow proposto:Branch environment.git;

Faz todas as alteraes necessrias;

Executa o commit e push;

Executa o deploy no puppet server;

Testa no servidor com environment=$branch;

Valida se tudo esta ok;

Executa o merge deste $branch em $production;

Realiza o deploy no puppet server.

Detalhamento do workflow proposto.

Gerenciamento de Configuraes - Puppet

E tudo ser bem mais incrvel. Ou pelo menos mais estruturado e fcil. Um pouco de controle sobre o gerenciador de confirguraes sempre bem vinda.

Gerenciamento de Configuraes - Puppet

Prximos passos:Testar a integrao com o jenkins e criao de jobs;

Implatantao da estrutura em produo;

POC de estratgias de migrao do puppet legado, 2.7 para o novo 4.2;

Importar as primeiras classes (Puppetfile);

Criar os primeiros profiles e roles;

Criar workflow de entrega em produo;

Notas sobre os prximos passos a serem feitos, ou que precisam ser validados.

Gerenciamento de Configuraes - Puppet

Referncias:

https://puppetlabs.com/presentations/designing-puppet-rolesprofiles-patternhttp://www.craigdunn.org/2012/05/239/http://rnelson0.com/2014/07/14/intro-to-roles-and-profiles-with-puppet-and-hiera/http://www.jeffmalnick.com/blog/2014/05/16/r10k-control-repos/https://puppetlabs.com/presentations/killer-r10k-workflow-phil-zimmerman-time-warner-cablehttp://somethingsinistral.net/blog/rethinking-puppet-deployment/http://rnelson0.com/2014/10/20/rewriting-a-puppet-module-for-use-with-hiera/http://rnelson0.com/2014/12/01/beyond-rspec-puppet-puppetlabs_spec_helper/http://rnelson0.com/2015/04/15/improved-r10k-deployment-patterns/https://github.com/puppetlabs/r10k/blob/master/doc/puppetfile.mkd

Referncias


Recommended