If you can't read please download the document
Upload
roberto-scudeller
View
271
Download
4
Embed Size (px)
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