Prestação de serviços em: Baseados em: - Consultoria - Suporte - Projetos - Desenvolvimento - Soluções e Aplicativos - Treinamento - Softwares Livres - Open Source - Padrões Abertos Para construir sua infraestrutura de TI e criar novas soluções de negócio.
Gerência de Configurações em Cloud Puppet em ambientes IaaS José Augusto (Guto) Carvalho jose.carvalho@4linux.com.br
whoami Consultor/SysAdmin (LPIC-3) na 4Linux 12 anos de experiência com tecnologias FOSS Blogueiro FOSS há 6 anos no site gutocarvalho.net Atuação em vários projetos de Governo no MDA, MINC, EBC/RADIOBRÁS, MPS/DATAPREV, ITI/PR, CEF, MD/SIPAM, DETRAN/DF Há 2 anos trabalhando com gerência de configurações em ambientes virtualizados e clouds privadas em Brasília
Puppet em IaaS
Plano de Trabalho 40 minutos de apresentação 5 minutos para perguntas
Agenda Gerência de Configurações Infraestrutura como Código Puppet como solução de Gerência de Configurações Puppet Arquitetura, Funcionamento e Recursos Perguntas
Cloud Computing - Tendência
Cloud e seus Benefícios Hiper-escalável Rápida e elástica Abstração de hardware Infraestrutura dinâmica Alta-disponibilidade Investimento atraente
Provisionamento Podemos criar 500 VM s em poucos minutos
Como Administrar 500 VM s?
Configuração Manual?
Acesso Secure Shell (ssh)?
Host a Host?
Quantos SysAdmins são necessários para administrar 500 servidores?
Qual a velocidade nas mudanças em seu ambiente?
Qual a probabilidade de falhas decorrentes de mudanças manuais?
Você consegue manter todo o seu ambiente padronizado?
Seu custo com manutenção e equipes técnicas está aumentando?
Está difícil colocar suas configurações nos trilhos?
Como resolver isto? Como obtenho controle e padronização em meu ambiente?
Gerência de Configurações
Padronização
Automatização
Controle
Integridade
Desempenho
Agilidade nas mudanças
Puppet Ferramenta de nova geração que implementa gerência de configurações para seu ambiente.
Visão Rápida Infraestrutura como código Pare de administrar e comece a desenvolver sua infra Reuse código para gerenciar seu parque com facilidade Linguagem declarativa para descrever configurações (DSL)
Sobre a ferramenta Suporte a Linux, BSDs, Solaris e Windows Criado por Luke Kaines (CEO e Fundador) Empresa PuppetLabs mantém a Ferramenta Ferramenta OpenSource (Licença Apache) Recebeu grandes investimentos Empresa oferece Suporte e Versão Enterprise
Feito por um SysAdmin para SysAdmins
Eficiente para uso DevOps
Especificações Escrito em Ruby Extensível usando código Ruby Funciona em modo Autônomo (serverless) Funciona em modo Cliente/Servidor RESTful API Comunicação segura (SSL Certificate)
Cases Puppet
Arquitetura Como funciona o Puppet?
Resource Abstraction Layer (RAL)
Puppet: RAL Resource Abstraction Layer = RAL Camada de Abstração de Recursos Fale o que você quer que seja feito Não se preocupe em como será feito O Puppet sabe como fazer
Instale Pacote X
Remova usuário Z
(Re)inicie serviço Y
Tratamento de Informações O grande diferencial do Puppet é a forma como ele trata as informações de seus nodes
Tratamento de informações No Puppet tudo é modelado e tratado como dados O estado atual de um node (servidor) é um dado Um pacote instalado em um node é um dado Um usuário em um servidor é um dado
Os dados são inseridos em catálogos pelo master O catálogo é processado pelo node e as modificações são aplicadas de acordo com o que foi declarado.
Processamento do Catálogo 1) Agente Requisita Catálogo 1.1) Agente envia Fatos para Master 2) Master Processa Fatos e Compara 2.1) Master Produz e envia Catálogo 3) Node Recebe, Compara e Aplica 4) Node informa estado atual ao Master 5) Sistema reflete catálogo
Idempotência
Funcionamento Módulos Estáticos Puppet Master Configurações Voláteis e Dados Camada de Serviços Estruturantes LDAP DNS MONIT SYSLOG Camada de Aplicação JBOSS APACHE MYSQL PGSQL Puppet Agents
Puppet Master 8140 TCP Client puppetd -t SSL 8139 TCP Server puppetrun Puppet Client Puppet Visão em Rede
Administração IaaS Administrar uma cloud IaaS não é algo complicado Escalabilidade automática é um recurso fantástico Ter elasticidade é fundamental Criar novos servidores é muito fácil Administrar centenas de nodes? Aqui começa a complicar.
Quando seu ambiente IaaS começar a crescer demais você vai perceber administrá-lo não é tão simples.
Adicionando Novos Nodes NGINX ZABBIX JBOSS POSTGRESQL MEMCACHED
Adicionando Novos Nodes NGINX ZABBIX JBOSS POSTGRESQL MEMCACHED Adicionar um novo node representa N mudanças
Adicionando Novos Nodes NGINX ZABBIX JBOSS POSTGRESQL MEMCACHED sysadmin-utils zabbix-agent ntpconf locales hosts users localmta smtpd vimrc backup-agent apt-repos
Como o Puppet pode ajudar? Automatizando seu ambiente Gerando maior produtividade com menor esforço Padronizando seus nodes logo após a instalação Modificando configurações de forma controlada
Insira o Puppet na imagem de instalação de seus nodes.
Não tenha medo de realizar atualizações, o puppet faz pra você!
Você pode fazer deploy de sua APP Você pode controlar a versão de sua APP
Como funciona o modo cliente/servidor?
Arquitetura Cliente/Servidor O agente gera um certificado digital O master precisa autorizar o certificado Sem autorização o agente não pode se comunicar Toda a comunicação entre agente e master é segura
Fluxo Cliente/Servidor Instalação do node
Fluxo Cliente/Servidor Instalação do node Inicialização do puppet
Fluxo Cliente/Servidor Instalação do node Inicialização do puppet Geração de Certificado
Fluxo Cliente/Servidor Instalação do node Inicialização do puppet Geração de Certificado Envio de Certificado
Fluxo Cliente/Servidor Instalação do node Inicialização do puppet Geração de Certificado Master Assina Certificado Envio de Certificado
Fluxo Cliente/Servidor Instalação do node Inicialização do puppet Geração de Certificado Agente Sincroniza Master Assina Certificado Envio de Certificado
Fluxo Cliente/Servidor Instalação do node Inicialização do puppet Geração de Certificado Agente Sincroniza Master Assina Certificado Envio de Certificado Modalidades de Assinatura de Certificado Assinatura pode ser manual Assinatura pode ser automática por domínio Assinatura pode ser automática em qualquer requisição
Quais recursos estão disponíveis?
Recursos do Puppet Resource Types Parâmetros e Meta-parâmetros Templates e Definições Classes e Módulos Funções e Condicionais
Puppet Resource Types Arquivos e Diretórios Usuários Alias Pacotes Serviços Yum Repos Augeas Hosts SSH Cron O puppet oferece 38 tipos de recursos nativos, e você pode estendê-lo.
Resource Type: Packages Suporte a 23 tipos de provedores de pacotes Faz a abstração do OS Declare se o pacote deve estar presente ou ausente Declare se o pacote deve sempre estar em sua última versão
Resource Type: Services Suporta 11 tipos de sistemas INIT para inicializar serviços Declare se um serviço deve estar sempre rodando Declare se um serviço deve ser carregado no boot Declare se um serviço depende de um pacote ou arquivo
Resource Type: File Especifique permissões e owners Declare arquivos, diretórios e links Controle de mudanças usando até 15 tipos de checksums
Exemplos
Instala, Configura e Inicia debian-way # aptitude install apache2 # update-rc.d -f apache2 defaults # cp ~/httpd.conf /etc/apache2/ # invoke-rc.d apache2 start
Instala, Configura e Inicia package { 'apache2': ensure => present, } service { 'apache2': ensure => running, enable => true, } file { 'httpd.conf': path => /etc/apache2/httpd.conf, source => /etc/puppet/files/httpd.conf, }
Instala, Configura e Inicia package { 'apache2': ensure => present, } service { 'apache2': ensure => running, enable => true, } resource type parameter title value file { 'httpd.conf': path => /etc/apache2/httpd.conf, source => /etc/puppet/files/httpd.conf, }
Base Class class linux-server { include sysadmin-utils include zabbix-agent include ntpconf include locales include hosts include users include localmta include vimrc include backup-agent include apt-repos }
Declarando um node node servidor.dominio { include linux-server include module } node balancer.dominio { include linux-server include cyrus::backend include postfix::hub include haproxy::mailproxy }
Variáveis e Fatos Fatos (facter) domain fqdn hostname interfaces ipaddress_eth0 ipaddress_eth1 ipaddress_lo lsbdistid lsbdistrelease => hacklab, => puppetmaster.hacklab, => puppetmaster, => eth0,eth1,lo, => 10.0.2.15, => 192.168.56.150, => 127.0.0.1, => debian, => 6.0.5, Variáveis vimpackage => vim-puppet, apacheservice => apache2, ntpconfrhel => ntp.conf.rhel,
Condicionais case $operatingsystem { CentOS,RedHat: { $package_name = 'ntp', $service_name = 'ntpd', $conf_file = 'ntp.conf.el', } Debian,Ubuntu: { $package_name = 'ntp', } }... $service_name = 'ntp', $conf_file = 'ntp.conf.debian',
Definições proxy::squid { 'ProxyFilial' : http_port squid_mode squid_hostname cache_mem maximum_object_size_in_memory maximum_object_size memory_replacement_policy cache_replacement_policy cache_dir cache_mgr cache_effective_user cache_effective_group dns_nameservers ips_squid } => '3128', => 'transparent', => 'proxy.4linux', => '2 GB', => '6 MB', => '128 MB', => 'heap GDSF', => 'heap LFUDA', => 'aufs /var/spool/squid 1024 16 256', => 'monitora@4linux.com.br', => 'proxy', => 'proxy', => '127.0.0.1 10.61.12.2 172.16.1.1', => '127.0.0.1 192.168.12.3',
Templates Trecho do template postfix/main.cf myorigin = <%= hostname %> mydestination = $myhostname,..., localhost, <%= fqdn %> Substituição de variáveis por fatos myorigin = servidor.dominio mydestination = $myhostname,..., localhost, servidor.dominio
Como acompanho mudanças?
Puppet Dashboard
Posso fazer mudanças em tempo real?
Marionette Collective Orquestrador de nodes Execução de Tarefas Paralelas Interação com centenas de nodes Inventário descentralizado Leitura de meta-dados do Puppet Similar a Fabric e Capistrano
Qual o resultado concreto?
Documentação Instantânea
Restore e backup de mudanças
Processos bem definidos
Ambiente Padronizado
Tarefas Automatizadas
Benefícios Reais Maior produtividade em menor tempo Poucos SysAdmins para muitos nodes Diminuição de falhas humanas Maior controle de todo o seu parque Diminuição do tempo gasto em mudanças Diminuição do custo de manutenção
Tecnologia trabalhando para você
E a compatibilidade?
Puppet & Cloud IaaS Cloud Tools (FOSS) Cloud Hosts Ganeti
Boas Práticas
Use API do fornecedor
Desenvolva sua Infra
Versione suas configurações
Reaproveite Código
GitHub & PuppetForge
Pesquise!
Puppet em números 727 pessoas online no canal #puppet da irc.freenode.net 8.500 repositórios no GitHub 450 módulos no PuppetForge 4457 usuários ativos na lista puppet-users com 7795 tópicos de discussão Dados coletados em 2012-08-06 às 10:34 PM
4Linux & PuppetLabs 1o Parceiro no Brasil Consultores Especializados Cases no Governo Federal Suporte Puppet Enterprise Treinamentos Puppet Master
Puppet na rede Site/Blog http://www.puppetlabs.com http://www.puppetlabs.com/blog/ http://puppet-br.org/ Twitter @puppetlabs GitHub http://www.github.com/puppelabs Google Groups Puppet-camp, puppet-users, puppet-users-br, puppet-dev IRC irc.freenode.org #puppet #puppet-br
Perguntas?
4linux na rede Contato Twitter @4linuxBR Facebook /4Linux Twitter @gutocarvalho jose.carvalho@4linux.com.br slideshare.net/gutocarvalho Obrigado!
Prestação de serviços em: Baseados em: - Consultoria - Suporte - Projetos - Desenvolvimento - Soluções e Aplicativos - Treinamento - Softwares Livres - Open Source - Padrões Abertos Para construir sua infraestrutura de TI e criar novas soluções de negócio.
Comparando Ferramentas Recursos Puppet Chef CfEngine Pull Yes Yes Yes Push No No No Idempotence Yes Yes Yes Config Language Declarative Ruby Declarative Web UI Yes Yes Yes OS Support *NIX,Windows *NIX,Windows *NIX,Windows License Apache Apache GPL Company Puppetlabs OpsCode CfEngine Cloud Yes Yes Yes