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.com.br 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 35 minutos de apresentação 5 minutos de hand s on 5 minutos para perguntas
Agenda Gerência de Configurações/Infra como Código Puppet como solução de Gerência de Configurações Puppet Arquitetura, Funcionamento e Recursos Mão-na-Massa Perguntas
Cloud Computing
Cloud e seus Benefícios Hiper-escalável Rápida e Elástica Abstração de Hardware Infraestrutura Dinâmica Sempre Disponível Economicamente Atrativa
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 e 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
Visão Rápida Infraestrutura como código Pare de administrar e comece a desenvolver sua infra
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
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 DSL: Linguagem declarativa para descrever configurações
Sobre a ferramenta Suporte a Linux, Unix, BSD s e Windows
Sobre a ferramenta Suporte a Linux, Unix, BSD s e Windows Criado por Luke Kaines (CEO e Founder PuppetLabs)
Sobre a ferramenta Suporte a Linux, Unix, BSD s e Windows Criado por Luke Kaines Empresa PuppetLabs mantém a Ferramenta
Sobre a ferramenta Suporte a Linux, Unix, BSD s e Windows Criado por Luke Kaines Empresa PuppetLabs mantém a Ferramenta Ferramenta OpenSource (Licença Apache)
Sobre a ferramenta Suporte a Linux, Unix, BSD s e Windows Criado por Luke Kaines Empresa PuppetLabs mantém a Ferramenta Ferramenta OpenSource (Licença Apache) Recebeu grandes investimentos recentemente
Sobre a ferramenta Suporte a Linux, BSDs, Solaris e Windows Criado por Luke Kaines Empresa PuppetLabs mantém a Ferramenta Ferramenta OpenSource (Licença Apache) Recebeu grandes investimentos recentemente Empresa oferece Suporte e Versão Enterprise
Feito por um SysAdmin para Sysadmins
Perfeito para DevOps
Especificações Escrito em Ruby
Especificações Escrito em Ruby Extensível usando código Ruby
Especificações Escrito em Ruby Extensível usando código Ruby Funciona em modo AD/HOC
Especificações Escrito em Ruby Extensível usando código Ruby Funciona em modo AD/HOC Funciona em arquitetura Cliente/Servidor
Especificações Escrito em Ruby Extensível usando código Ruby Funciona em modo AD/HOC Funciona em arquitetura Cliente/Servidor RESTful API
Especificações Escrito em Ruby Extensível usando código Ruby Funciona em modo AD/HOC Funciona em arquitetura Cliente/Servidor RESTful API Comunicação segura (SSL Certificate)
Clientes Puppet
Arquitetura Como funciona o Puppet?
Puppet Resource Abstraction Layer (RAL)
Puppet: RAL Resource Abstraction Layer = RAL
Puppet: RAL Resource Abstraction Layer = RAL Camada de Abstração de Recursos
Puppet: RAL Resource Abstraction Layer = RAL Camada de Abstração de Recursos Fale o que você quer que seja feito
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
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 dado
Tratamento de informações No Puppet tudo é modelado e tratado como dado O estado atual de um node (servidor) é um dado.
Tratamento de informações No Puppet tudo é modelado e tratado como dado O estado atual de um node (servidor) é um dado Um pacote instalado em um node é um dado
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
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
Funcionamento Módulos Estáticos Puppet Master Configurações Voláteis e Dados
Funcionamento Módulos Estáticos Puppet Master Configurações Voláteis e Dados Camada de Serviços Estruturantes LDAP DNS MONIT SYSLOG
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
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 é simples
Administração IaaS Administrar uma Cloud IaaS é simples Escalabiliade Automática é fantástica
Administração IaaS Administrar uma Cloud IaaS é simples Escalabiliade Automática é fantástica Criar novos servers conforme demanda é maravilhoso
Administração IaaS Administrar uma Cloud IaaS é simples Escalabilidade Automática é fantástica Criar novos servers conforme demanda é maravilhoso Elasticidade é fundamental
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
Como o Puppet pode ajudar? Automatizando seu ambiente Gerando maior produtividade com menor esforço
Como o Puppet pode ajudar? Automatizando seu ambiente Gerando maior produtividade com menor esforço Padronizando seus nodes logo após a instalação
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
Arquitetura Cliente/Servidor O agente gera um certificado digital
Arquitetura Cliente/Servidor O agente gera um certificado digital O master precisa autorizar o certificado
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
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
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
Instala, Configura e Inicia # aptitude install apache2 # update-rc.d -f apache2 defaults # cp ~/httpd.conf /etc/apache2/ # invoke-rc.d apache2 start debian-way
Instala, Configura e Inicia package { 'apache2': ensure => present, } service { 'apache2': ensure => running, enable => true, } file { 'httpd.conf': path => /etc/apache2/httpd.conf, source => /home/guto/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 => /home/guto/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 architecture => amd64 augeasversion => 0.7.2 domain => sprawl facterversion => 1.6.10 fqdn => puppetmaster.hacklab ardwaremodel => x86_64 hostname => puppetmaster interfaces => eth0,eth1,lo ipaddress => 10.0.2.15 ipaddress_eth0 => 10.0.2.15 ipaddress_eth1 => 192.168.56.150 ipaddress_lo => 127.0.0.1 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.ebc', => '2 GB', => '6 MB', => '128 MB', => 'heap GDSF', => 'heap LFUDA', => 'aufs /var/spool/squid 1024 16 256', => 'monitora@dominio.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
Orquestrando nodes com Mcollective
Puppet Dashboard
Auto-documentado
Controle das Mudanças (filebucket)
Use VCS para cuidar de seu código
Processo + Padrão + Automação
Benefícios Maior produtividade em menor tempo Diminuição de falhas Maior controle de seu parque Diminuição do tempo gasto em mudanças
Tecnologia trabalhando para você
Puppet & Cloud IaaS Cloud FOSS Cloud Hosts Ganeti
Use API do fornecedor
Construa suas Confs
Seja criativo
Reaproveite Código
GitHub & PuppetForge
Pesquise!
Projeto & Comunidade 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?
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