Sysadmin 4 : Chef @ Fotolia

Sysadmin 4 : Chef @ Fotolia

Présenté au séminaire sysadmin #4 à Paris

415efaa445ed983307231341eaa4be55?s=128

Renaud Chaput

March 01, 2013
Tweet

Transcript

  1. Chef : retour d’expérience chez Renaud Chaput renchap@gmail.com Séminaire Sysadmin

    n°4 01/03/2013 Nicolas Szalay nico@rottenbytes.info
  2. None
  3. Historique

  4. 2009 • 30 serveurs • Aucune gestion centralisée • Debian

    (woody, etch)
  5. 2012 • 70 serveurs • Debian (Lenny , Squeeze, FreeBSD

    8 & 9) • 90% géré par Chef • Dont tous les aspects «majeurs» (installation, monitoring, services principaux) • 10% restants : historique non migré
  6. Installation automatique

  7. Données de départ • Numéro de série • Emplacement physique

    (DC, baie) • Addresse IP • Hostname • Identifiants ILO
  8. { "eqx-server1.fotolia.loc": { "bootstrap": { "ilo": { "username": "Administrator", "ip":

    "10.12.0.1", "hostname": "ILOCZJ1100AA1", "password": "azerty" }, "parents": [ "eqx-sw4.fotolia.loc" ], "os": "debian-squeeze", "sn": "CZJ1100AA1", "physical_location": { "datacenter": "equinix", "rackposition": "2", "rack": "A5" }, "ip": "10.1.1.101" } } }
  9. Étape 1 : récupération de la MAC • VLAN dédié

    • DHCP avec un boot PXE par défaut • FreeBSD minimale • Au boot, lance un dmidecode et fait une requête HTTP pour associer la MAC de l’interface principale au serial dans Chef
  10. { "eqx-server1.fotolia.loc": { "bootstrap": { "ilo": { "username": "Administrator", "ip":

    "10.12.0.1", "hostname": "ILOCZJ1100AA1", "password": "azerty" }, "parents": [ "eqx-sw4-4948.fotolia.loc" ], "os": "debian-squeeze", "sn": "CZJ1100AA1", "physical_location": { "datacenter": "equinix", "rackposition": "2", "rack": "A5" }, "ip": "10.1.1.101", "mac": "00:26:55:aa:bb:cc", } } }
  11. Étape 2 : génération des fichiers d’installation • Sur le

    serveur d’installation, run Chef qui va écrire les fichiers d’installation : • Configuration DHCP pour boot spécifique selon la MAC • Preseed debian • ...
  12. Étape 3 : installation • Reboot du serveur • Boot

    PXE sur l’OS d’installation désiré • Récupération des fichiers de config en HTTP • Serveur installé !
  13. Étape 3 : installation • Reboot du serveur • Boot

    PXE sur l’OS d’installation désiré • Récupération des fichiers de config en HTTP • Serveur installé !
  14. Évolutions • Contrôle automatique des reboot/boot PXE/... • Boot PXE

    sur un OS qui met à jour les divers firmwares automatiquement • Utilisation de iPXE pour éviter l’étape de détection de la MAC
  15. Environnements de dev

  16. Isolation

  17. Proche de la production

  18. Architecture

  19. Environnement X

  20. Chef Server Infra Server DNS DHCP Proxy ... Environnement X

  21. Chef Server Infra Server DNS DHCP Proxy ... VBoxNet X

    Environnement X
  22. Chef Server Infra Server DNS DHCP Proxy ... VM Linux

    VM Linux VM FreeBSD ... VMs VirtualBox Gérées par Vagrant Addresses dans 10.251.X.0/24 VBoxNet X Environnement X
  23. Chef Server Infra Server DNS DHCP Proxy ... VM Linux

    VM Linux VM FreeBSD ... VMs VirtualBox Gérées par Vagrant Addresses dans 10.251.X.0/24 VBoxNet X Firewall Backbone Environnement X
  24. Chef Server Infra Server DNS DHCP Proxy ... VM Linux

    VM Linux VM FreeBSD ... VMs VirtualBox Gérées par Vagrant Addresses dans 10.251.X.0/24 VBoxNet X Firewall Quagga Backbone Annonce des routes 10.251.0.0/16 Environnement X
  25. Chef Server Infra Server DNS DHCP Proxy ... VM Linux

    VM Linux VM FreeBSD ... VMs VirtualBox Gérées par Vagrant Addresses dans 10.251.X.0/24 VBoxNet X Firewall Quagga Backbone Annonce des routes 10.251.0.0/16 Autres environnements Environnement X
  26. Notre workflow

  27. Environnement de développement

  28. Git

  29. Git Environnement de développement

  30. Gerrit

  31. Git Gerrit Environnement de développement

  32. Jenkins

  33. Foodcritic http://acrmp.github.com/foodcritic/

  34. None
  35. None
  36. Git Gerrit Jenkins Environnement de développement

  37. knife sharp http://github.com/Fotolia/knife-sharp gem install knife-sharp

  38. ~ $ knife sharp align master production On server sandboxnico

    Aligning cookbooks * tacacs is not up-to-date (local: 0.0.6/remote: 0.0.5) Update tacacs cookbook item on server ? Y/N/(A)ll/(Q)uit [N] A * Uploading cookbook(s) tacacs * Bumping tacacs to 0.0.6 for environment production Aligning data bags Data bags are up-to-date. Aligning roles * Infrastructure role is not up-to-date (run list) Update Infrastructure role on server ? Y/N/(A)ll/(Q)uit [N] * Skipping Infrastructure role
  39. Git Gerrit Jenkins Production Environnement de développement knife sharp

  40. run_state

  41. Problématique : overdose d’attributs

  42. None
  43. Exemple : collectd # cookbooks/collectd/recipes/default.rb template "/etc/collectd/collectd.conf" do source "collectd.conf.erb"

    variables( :auto_plugins => node.run_state[:collectd][:plugins] ) end # cookbooks/collectd/templates/default/collectd.conf.erb <% @auto_plugins.keys.sort.each do |name| %> LoadPlugin "<%= name %>" <% end %>
  44. Exemple : collectd # cookbooks/collectd/definitions/default.rb define :collectd_plugin, :options => []

    do name = params[:name] node.run_state[:collectd][:plugins][name] += params[:options] node.run_state[:collectd][:plugins][name].uniq! end # cookbooks/nginx/recipes/default.rb collectd_plugin "nginx" do options [ { 'URL' => "\"#{status_location}\"" } ] end
  45. Exemple : nginx # cookbooks/nginx/definitions/default.rb define :register_nginx_virtualhost do name =

    params[:name] template "/etc/nginx/vhosts.d/#{name}.conf" do source "vhosts/#{name}.conf.erb" cookbook "nginx" end node.run_state[:nginx][:vhosts] << name end # cookbooks/nginx/recipes/static_fotolia.rb include_recipe 'nginx::default' register_nginx_virtualhost 'static_fotolia' # cookbooks/nginx/templates/default/nginx.conf.erb http { <% node.run_state[:nginx][:vhosts].each do |vhost| %> include "vhosts.d/<%= vhost %>.conf"; <% end %> }
  46. Nagios

  47. None
  48. None
  49. None
  50. Via les attributs nagios_check "check_nginx_connections" do description "Nginx connections count"

    check_command "check_nginx_connections" arguments node["nginx"]["status"]["port"].to_s servicegroups "nginx" end $ knife node show eqx-server1.fotolia.loc -a nagios.checks.check_nginx_connections -F json { "eqx-server1.fotolia.loc": { "nagios.checks.check_nginx_connections": { "check_command": "check_nginx_connections", "arguments": "8099", "description": "Nginx connections count", "servicegroups": "nginx", } } }
  51. Utilisation de la recherche checks = search(:node, "nagios_checks") checks.each do

    |check| template "/etc/nagios/auto/checks/#{check[:name]}" do ... end end $ cat auto/checks/check_nginx_connections.cfg # automatically registered check_nginx_connections # digest key : 4ef655104985c9c6ed70301164560810 define service { use generic-service service_description Nginx connections count check_command check_nginx_connections!8099 host_name eqx-server1.fotolia.loc, ... servicegroups nginx }
  52. Databags chiffrés

  53. Problématique • Stocker des informations dans un databag sans qu’elles

    ne soient lisibles par tous les noeuds • Exemple : certificats SSL
  54. Avantages • Reste un databag, donc : • Stockés à

    un endroit centralisé • Versionnables • Multi-valués • Il suffit de copier la clé sur la machine et le databag devient lisible
  55. $ openssl rand -base64 512 | tr -d '\r\n' >

    /tmp/my_data_bag_key $ knife data bag create --secret-file /tmp/my_data_bag_key postgresql credentials $ knife data bag show postgresql credentials { "id": "credentials", "pass": "trywgFA6R70NO28PNhMpGhEvKBZuxouemnbnAUQsUyo=\n", "user": "e/p+8WJYVHY9fHcEgAAReg==\n" } secret = Chef::EncryptedDataBagItem.load_secret( "#{node[:postgresql][:secretpath]}" ) creds = Chef::EncryptedDataBagItem.load("postgresql", "credentials", secret)
  56. Solr & CouchDB Mes meilleurs ennemis

  57. None
  58. Solr • CHEF-2346 : taille maximale des champs • Réplication

    • Logging • Debug
  59. CouchDB • Compactage • Réplication • Temps de réponse •

    Sécurisation • Debug
  60. CouchDB • Compactage • Réplication • Temps de réponse •

    Sécurisation • Debug
  61. Chef 11

  62. Chef 11 • erchef / PostgreSQL / Solr • Partials

    dans les templates • knife • Support
  63. None