$30 off During Our Annual Pro Sale. View Details »

Sysadmin 4 : Chef @ Fotolia

Sysadmin 4 : Chef @ Fotolia

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

Renaud Chaput

March 01, 2013
Tweet

More Decks by Renaud Chaput

Other Decks in Technology

Transcript

  1. Chef : retour
    d’expérience chez
    Renaud Chaput
    [email protected]
    Séminaire Sysadmin n°4
    01/03/2013
    Nicolas Szalay
    [email protected]

    View Slide

  2. View Slide

  3. Historique

    View Slide

  4. 2009
    • 30 serveurs
    • Aucune gestion centralisée
    • Debian (woody, etch)

    View Slide

  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é

    View Slide

  6. Installation automatique

    View Slide

  7. Données de départ
    • Numéro de série
    • Emplacement physique (DC, baie)
    • Addresse IP
    • Hostname
    • Identifiants ILO

    View Slide

  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"
    }
    }
    }

    View Slide

  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

    View Slide

  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",
    }
    }
    }

    View Slide

  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
    • ...

    View Slide

  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é !

    View Slide

  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é !

    View Slide

  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

    View Slide

  15. Environnements de dev

    View Slide

  16. Isolation

    View Slide

  17. Proche de la
    production

    View Slide

  18. Architecture

    View Slide

  19. Environnement X

    View Slide

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

    View Slide

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

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  26. Notre workflow

    View Slide

  27. Environnement de
    développement

    View Slide

  28. Git

    View Slide

  29. Git
    Environnement de
    développement

    View Slide

  30. Gerrit

    View Slide

  31. Git Gerrit
    Environnement de
    développement

    View Slide

  32. Jenkins

    View Slide

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

    View Slide

  34. View Slide

  35. View Slide

  36. Git Gerrit
    Jenkins
    Environnement de
    développement

    View Slide

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

    View Slide

  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

    View Slide

  39. Git Gerrit
    Jenkins
    Production
    Environnement de
    développement
    knife sharp

    View Slide

  40. run_state

    View Slide

  41. Problématique :
    overdose d’attributs

    View Slide

  42. View Slide

  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 %>

    View Slide

  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

    View Slide

  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 %>
    }

    View Slide

  46. Nagios

    View Slide

  47. View Slide

  48. View Slide

  49. View Slide

  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",
    }
    }
    }

    View Slide

  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
    }

    View Slide

  52. Databags chiffrés

    View Slide

  53. Problématique
    • Stocker des informations dans un databag
    sans qu’elles ne soient lisibles par tous les
    noeuds
    • Exemple : certificats SSL

    View Slide

  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

    View Slide

  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)

    View Slide

  56. Solr & CouchDB
    Mes meilleurs ennemis

    View Slide

  57. View Slide

  58. Solr
    • CHEF-2346 : taille maximale des champs
    • Réplication
    • Logging
    • Debug

    View Slide

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

    View Slide

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

    View Slide

  61. Chef 11

    View Slide

  62. Chef 11
    • erchef / PostgreSQL / Solr
    • Partials dans les templates
    • knife
    • Support

    View Slide

  63. View Slide