Puppet, Ansible, Salt – Por quê? – Puppet



Puppet, Ansible, Salt – Por quê? – Puppet

0 0


talk-puppet-ansible-salt

Presentation comparing puppet, ansible and salt

On Github dgmorales / talk-puppet-ansible-salt

Puppet, Ansible, Salt

Maturidade, Simplicidade e Flexibilidade

Diego Morales

  morales@propus.com.br   @dgmorales

Meu nome é Diego Morales. Sysadmin há 15+ anos. Trabalho na Propus, que presta serviços de infraestrutura de TI e de BigData e NoSQL.

Origem da palestra

Meu histórico as ferramentas

Então, quem aí usa? Puppet? Ansible? Salt?

Vai ser interessante ter a visão e a experiência de vocês. Mas o tempo vai ser apertado.

O que vem por aí

Quem são, e o cenário geral de configuration management. Arquitetura básica de cada um Pagando ... ... e não pagando Show me the code! Repositórios de receitas Documentação e Comunidade

Online: http://dgmorales.info/talks/cm-pas

Pressione S para Speaker's Notes

A proposta aqui não é fácil. Cada uma certamente precisa de uma palestra inteira ou mais para ser devidamente apresentada.

Objetivo: apresentar o mínimo básico sobre cada ferramenta e sobre o "ecossistema" de cada uma, e dar caminhos para vocês conhecerem mais.

Vou direto ao ponto, fiquem à vontade de interromper para perguntar ou acrescentar e eu à vontade de dizer guardar para depois a discussão.

Config Management

               

Ferramentas de gerência de configuração, infraestrutura como código.

Concorrentes ou complementares? Há controvérsias.

Minha visão: concorrentes. Os diferentes focos e abordagens diferentes formam um espectro, puppet e ansible nos extremos, salt buscando tudo. Chuto que o crescimento de cada um vai agravar a concorrência.

4 principais players + o pai de todos, cfengine.

Deixei o Chef de fora. Ele é muito popular. Deve ser ótimo. Achei "muito parecido" com puppet (até mais complexo) e eu apostei no Puppet.

Em uma palavra ...

Puppet:   Maturidade

Ansible:   Simplicidade

Salt:   Flexibilidade

Se eu tivesse que dizer só uma palavra sobre cada um...

Descobri fazendo essa palestra que eles mesmos se descrevem assim (ansible e salt, ao menos).

Puppet & PuppetLabs

Criado em 2005, por um sysadmin, Luke Kanies.

Bem velhinho já, mais que o Chef até. Cfgengine nasceu em 93, though.

Alguns clientes...

Puppet (2)

  • Master (pull) e Masterless (pull rodando local).
  • Linguagem: Puppet DSL + templates ERB (ruby)
  • Feito em ruby / clojure / java ...
    • ... DSL torna isso geralmente irrelevante.
  • Segurança e auth: certificados SSL.
  • Mcollective para orquestração.

Ruby: facts feitos em ruby, mas cada vez menos necessários.

Tem uma CA interna super fácil de usar, mas suporta apontar para um CA externa também

Como eu queria um modo push. Código vivo na minha máquina, lê aqui, vai lá e faz. Feio e perigoso, eu sei.

Faz um tempo que eu não procuro, mas não tinha nada muito interessante.

Mcollective muito utilizado para disparar agent runs.

É o mais maduro em suporte a windows.

Puppet (3): Enterprise

Um dos pontos a favor da maturidade.

Orchestrator: define os componentes de um app, a relação entre eles, onde roda cada um, e ele se vira com o resto.

Ao meu ver Puppet App Orchestrator é uma resposta da PuppetLabs aos features de orquestração de Ansible e Salt, com o jeito Puppet de ser.

Ainda um privilégio do Enterprise. Não se sabe até quando.

Puppet (4): não Enterprise

Puppet Explorer: meu atual favorito.

Puppet Dashboard é mais velho. Abandonado? Há dúvidas...

Foreman: ainda não suporta o Puppet 4. Projeto maior, mais abrangente.

PCP do Guto Carvalho e Miguel Di Ciurcio Filho da Instruct, com ajuda de outros da comunidade puppet Brasil. Inclui Server, PuppetDB, Explorer e Mcollective.

Ansible & Ansible Inc. RedHat

"Ansible’s main goals are simplicity and ease-of-use."

Criado em 2012, por Michael DeHaan.

Recentemente adquirido pela RedHat.

Michael DeHaan se afastou, e parece bem afastado.

Alguns clientes...

Ansible (2)

  • Agentless
    • Push over SSH (Simplicidade!). Pull rodando local.
    • Lento? Veja algumas alternativas [1] [2]
    • Windows: WinRM + PowerShell Remoting
  • Simplifica orquestração em várias máquinas
  • Linguagem: YAML + templates jinja2
  • Python!
  • Auth/Crypto: seu fiel amigo SSH

Depende de um inventário de hosts, que pode ser dinâmico, um script, vários prontos.

Orquestração: vai no balanceador e tira máquinas x, y, z do serviço, vai em x, y e z e atualiza a aplicação, reboota elas, e aguarda voltarem, vai lá no balanceador e põe elas de volta.

Ansible (3): Tower

  • Dashboard, Inventário, Remote Execution ...
  • ... e agora System Tracking também.
  • 3 variantes, US$ ~ 50-140/node/ano.

Pode até não ser tão bom quanto o Puppet Enterprise, mas parece muito interessante.

Ansible (4): não Tower

  • Rundeck como frontend do Ansible parece bem popular.
  • Semaphore: Open Source Alternative to Ansible Tower.
    • (não, não é o SemaphoreCI)
  • Foreman de novo.

Rundeck já é uma ferramenta de execução remota (SSH, plugin pra salt e outros tb), mas focada na usabilidade pela web, controle de acesso e auditoria/logging.

Casam muito bem

Semaphore: único projeto público específico para ansible que eu ouvi falar até agora.

Salt & SaltStack

Criado em 2011, por Thomas Hatch.

Alguns clientes...

Salt (2)

  • Push/Pull com ZeroMQ , Pull rodando local. (Flexibilidade!)
  • Rápido! (com ZeroMQ)
  • Linguagem: YAML + templates jinja2
    • A sua receita é um template jinja!
  • Python again
  • Auth/Crypto: meio problemático.
    • ZeroMQ não tem SSL. Salt adiciona AES em cima.
    • Novos transportes no forno: RAET, outro TCP usando Tornado.

É o mais rápido.

Segurança é uma preocupação. Rodar salt na internet não parece uma boa. E não suporta CA externas

"Salt crypto is partly ... " Estão explorando novos transportes. RAET Feito em casa, inclusive a crypto. Projeto que será aberto e independente. O novo com tornado está sendo feito no LinkedIn.

Salt-SSH é outra história

  • salt-ssh tem limitações
    • sudo só com NOPASSWD
    • algumas operações com o fileserver interno dele precisam de contornos...

Salt (3): Enterprise

?

  • Novato: 4.0 em early adopter program. 4.5 a ser lançado
  • Sem pricing divulgado.
  • SaltConf16 começa dia 19/4, deve ter novidades.

Agora tem uma interface GUI. Antes era só suporte.

Tudo muito escondido ainda.

Salt (4): não Enterprise

Saltpad tem uma fama de ter seus problemas. Tudo meio alpha.

Slide com Meme gif: check!

Ufa.

Package, File, Service

Se fosse possível fazer apenas isso, já seria muita coisa.

Puppet

package { 'openssh-server':
  ensure => installed,
}

file { '/etc/ssh/sshd_config':
  source  => 'file:///vagrant/puppet/sshd_config',
  owner   => 'root',
  group   => 'root',
  mode    => '0644',
  notify  => Service['ssh']
#  require => Package['openssh-server'],
 }

service { 'ssh':
  ensure => running,
  enable => true,
}
			

O require não é mais necessário no 4.x, ele segue a ordem do manifest

package, file e service são resources

Limpo e organizado, não?

Ansible

- hosts: all
  name: Install SSH Server
  tasks:
  - package: name=openssh-server state=present
  - template:
      src: sshd_config
      dest: /etc/ssh/sshd_config
      owner: root
      group: root
      mode: 0644
    notify:
    - restart ssh
  - service: name=ssh state=started
  handlers:
  - name: restart ssh
    service: name=ssh state=restarted
			

Não me ajuda na tese de simplicidade, eu sei

Install SSH Server é uma play, aplicada em all hosts

package (new in 2.0), template e service são modules

Simples?

YAML: "é só dados", "não é uma linguagem de programação". Sei, como se isso ajudasse neste caso.

Mas tem a vantagem de ser mais facilmente consumível programaticamente.

Note o handler separado.

Cada task pode ter um name. Mas é opcional.

Salt

openssh-server:
  pkg.installed:
    - name: openssh-server
  service.running:
    - name: ssh
    - enable: True

  file.managed:
    - name: /etc/ssh/sshd_config
    - source: salt://sshd_config
    - user: root
    - group: root
    - mode: 644
    - watch_in:
      - service: openssh-server
			

Esta é uma formula, pkg.installed, service.running e file.managed descrevem states dentro da fórmula.

State functions vs Execution functions

Loops

Loops é um caso interessante de se examinar pois são:

3 maneiras bem diferentes...

... que dizem muito sobre o estilo de cada um.

Puppet

$binaries = ["run", "build", "update", "foo"]

$binaries.each |String $binary| {
  file {"/usr/local/bin/myapp-$binary":
    ensure => link,
    target => "/opt/myapp/bin/$binary",
  }
}
			

Requer puppet 4.x ou parser=future

each, slice, filter, map, e mais

No puppet 3.x o workaround é defined types + resource-title-arrays, muito mais trabalhoso e limitado.

Ansible

- hosts: all
  tasks:
  - name: create symlinks for our app
    file: >
      state=link src=/opt/myapp/bin/{{ item }}
      dest=/usr/local/bin/myapp-{{ item }} force=yes
    with_items:
      - run
      - build
      - update
      - foo
			

with_dict, with_nested, with_fileglobs, e mais...

outros jeitos de quebrar ... >

... linhas

Aproveitando: Idempotência?

Idempotência: uma bandeira do Puppet. Ele é provavelmente o melhor dos 3 nisso, mas não é como se os outros ignorassem esse conceito.

Salt

{% for binary in ['run', 'build', 'update', 'foo'] %}
/usr/local/bin/myapp-{{ binary }}:
  file.symlink:
    - target: /opt/myapp/bin/{{ binary }}
{% endfor %}
			

Jinja. Dentro da sua formula salt.

Programe o seu código. Pode ser bom, pode ser ruim.

Usado por tudo, inclusive pillar (definição condicional de variáveis).

Já vi cara reclamando muito disso tender a gerar bugs difíceis de debugar no seu código. Mensagens de erro péssimas.

"Baterias" internas e externas

Puppet Forge: 4000+ módulos, 36 Supported, 79 Approved. E alguns poucos tipos nativos.

Ansible: batteries included, muitos módulos. E 5000+ roles no Galaxy.

E o Salt sendo o Salt: temos execution modules, state modules, e mais. Tem de tudo no salt-contrib, e agora no SaltStarters.

Documentação

Puppet ...

... Ansible

Salt    /o\

Como referência é bem interessante. Como tutorial, era ruim, mas essa nova linha do getting started tá resolvendo isso.

Comunidade e Brasil

Puppet, pacote completo: listas br e en, telegram, IRC #puppet-br, #puppet, meetup. Empresa BR: Instruct e outras...

https://telegram.me/joinchat/AejjFQIq_2kBH1EQ7mVfjw

Ansible... em inglês: #ansible, lista. Meetups BR parados: SP e RJ.

Salt ... em inglês: #salt, lista. Comunidade muito forte, campeão em contribuidores (1500+). No Brasil, nada...

Receptividade de fixes das comunidades: salt é mais permissivo e aberto. Ansible mais cuidadoso e limitador.

Concluindo

De novo: maturidade, flexibilidade, simplicidade. Qual é o mais importante?

Github repo: em breve mais.

https://github.com/dgmorales/vagrant-cfgmgmt-sandbox

Puppet é o que tem mais classe, é o mais "bonito". Adoro a DSL, acho que é o código mais fácil de ler. E o forge é algo insanamente útil (e mais útil que as alternativas dos outros dois).

Mas a simplicidade do Ansible tem um valor imenso. É muito mais fácil de começar do que os outros: não subestime o valor disso para muitos ambientes.

E a flexibilidade do Salt é sedutora também. Ele faz o que você quer, do jeito que você quiser. Eu vou lendo aquela documentação e vendo videos e descobrindo mais e mais coisas interessantes. Até um Reactor system para responder a eventos no ambiente.

Contato

Diego Morales morales@propus.com.br   @dgmorales Do, Automate, Repeat: http://doauto.wordpress.com

Slides: http://dgmorales.info/talks/cm-pas

Github repo: em breve mais.

https://github.com/dgmorales/vagrant-cfgmgmt-sandbox

Cena  pós-creditos!

Terminologia

Puppet Ansible Salt Server Puppet (old Master|Server) Control Machine Master Agente Puppet Agent - Salt Minion Receita Manifest Playbook SLS (State) file Tipo/Objeto Resource/Class/Defined Type Module State Componente Module Role Formula Repo Componentes Forge Galaxy Contrib/SaltStarters Variáveis Hiera Variables Pillar Fatos Facts/Facter Facts/Setup Grains Secrets Storage Hiera eyaml Vault salt.renderers.gpg
Puppet, Ansible, Salt Maturidade, Simplicidade e Flexibilidade Diego Morales   morales@propus.com.br   @dgmorales Meu nome é Diego Morales. Sysadmin há 15+ anos. Trabalho na Propus, que presta serviços de infraestrutura de TI e de BigData e NoSQL. Origem da palestra Meu histórico as ferramentas Então, quem aí usa? Puppet? Ansible? Salt? Vai ser interessante ter a visão e a experiência de vocês. Mas o tempo vai ser apertado.