Featured image of post Rudder - astuces en vrac

Rudder - astuces en vrac

Ecrit par ~ zwindler ~

Cet article fait partie d’une suite d’articles sur Rudder. La version qui est testĂ©e ici sera la version open source (car je n’ai pas les moyens de me payer une licence pour mon infra perso 😛) :

Note : une fois de plus, je tiens Ă  prĂ©ciser qu’il ne s’agit PAS d’un article sponsorisĂ©. J’ai eu des contacts (techniques) avec la team Rudder, mais je n’ai Ă©tĂ© influencĂ© d’aucune maniĂšre, en particulier dans la rĂ©daction de cet article.

But de l’article

Dans les deux articles prĂ©cĂ©dents, j’ai parlĂ© des concepts de Rudder, de l’installation du serveur et des agents. Je suis allĂ© un poil plus loin avec mon installation perso mais avec ce que j’ai dĂ©jĂ  Ă©crit, on est dĂ©jĂ  en capacitĂ© de jouer avec Rudder et je pense pas qu’on ait besoin d’aller beaucoup plus loin.

Cependant, au cours de mes pĂ©ripĂ©ties avec Rudder, je suis tombĂ© sur quelques petits “os”. Rien de bien poussĂ©, qui ne justifierait un article seul. Je vais donc tout regrouper ici, en vrac ;-P.

Tuning pour les petits CPUs et les petites RAMs

On l’a dit dans le premier article, Rudder est assez doux en termes de prĂ©requis matĂ©riels. Quelques Mo de mĂ©moire suffisent pour l’agent, et grosso modo pas besoin de machine de guerre pour le CPU.

Cependant, comme je suis extrĂȘmement Ă©conome (aka radin) dans la gestion de mon infra perso, je suis quasiment un anti pattern dans le cas de Rudder. J’ai un cluster Proxmox montĂ© sur des machines louĂ©es Ă  6€/mois Ă  base d’un antĂ©diluvien Atom C2350 (des duals core de 2013 !).

C’est d’ailleurs pour essayer de grappiller quelques % de CPU que j’avais publiĂ© les articles Optimisation de PFsense dans Proxmox VE et Proxmox - Tips and tricks.

Ces machines ne supportant mĂȘme pas les instructions VT-x, je ne fais donc pas de machines virtuelles mais uniquement des machines Ă  bases de containers LXC. Je me retrouve donc Ă  installer une dizaine d’agents (oui, je suis vraiment bourrin) sur un mĂȘme Atom.

Rudder a beau ĂȘtre Ă©conome, multiplier les agents sur une machine aussi faible avait un coĂ»t difficilement soutenable sur ma machine, comme en tĂ©moigne le graphique CPU ci-dessous (mon serveur ne fait quasiment rien, c’est donc quasiment exclusivement de la charge Rudder).

Il est trĂšs peu probable que vous ayez vous une charge perceptible sur vos infras. Dans le cas de machines aussi peu puissantes, il est probable que la team Rudder recommanderait de ne pas installer d’agent sur mes containers LXC. Mais dans le cas de machines trĂšs trĂšs peu puissantes et/ou trĂšs trĂšs densifiĂ©es en termes de nombre de VMs, sachez qu’il est quand mĂȘme possible de tuner le scheduling des runs de Rudder et ainsi limiter la casse.

Dans le menu Administration / Settings, il existe une section Agent run schedule. Par dĂ©faut, l’ordonnancement est prĂ©vu de la façon suivante : Rudder lance les vĂ©rifications / corrections sur sa liste d’agent sur une plage de 5 minutes, le premier tirĂ© au hasard commençant Ă  0 minutes (directement donc) et le dernier jusqu’Ă  4 minutes (1 minute avant la fin de la fenĂȘtre de tir).

Note : au-delĂ  de mon cas particulier, c’est quand mĂȘme intĂ©ressant Ă  savoir, car en fonction de ce qu’on lancera (scripts trĂšs longs par exemple, upgrades apt, …), il peut ĂȘtre intĂ©ressant de tuner ce dernier paramĂštre (Maximum delay) pour ĂȘtre certain que 2 jobs ne se chevauchent pas.

En modifiant le scheduling pour que les runs se lancent non pas sur 5 minutes mais sur 30, avec un dernier lancement Ă  la 29 Ăšme minute, j’ai pu retrouver une charge relativement acceptable sur mon infra.

DeuxiĂšme astuce, si vous ĂȘtes limitĂ© en RAM, que vous avez moins de 50 machines et que vous n’utilisez pas beaucoup les plugins, il est possible de diminuer la taille de la JVM de rudder (par dĂ©faut Ă  1 Go) et ainsi un peu mieux respirer sur une machine Ă  2 Go (prĂ©requis Rudder, un peu justes).

sed -i 's/JAVA_XMX=1024/JAVA_XMX=512/' /etc/default/rudder-jetty
systemctl restart rudder-server.service

Merci Nicolas pour l’astuce :)

Changer le nom des machines du point de vue de Rudder

Autre problĂšme, je n’ai pas toujours la main sur le FQDN des machines que je loue. En particulier, le retour de la commande hostname -f renvoit parfois le nom de la machine telle que l’appelle l’hĂ©bergeur.

Je me retrouve avec un inventaire rudder plein de machines avec des noms du type int.nua.ge et randomid.dedibox.fr

Dans certains cas, je peux le modifier moi-mĂȘme et/ou feinter Rudder (en modifiant le fichier /etc/hosts par exemple) mais plutĂŽt que de faire ça, j’ai prĂ©fĂ©rĂ© utiliser une technique dĂ©taillĂ©e dans la documentation officielle de Rudder appelĂ©e override node fqdn

La méthode pour le faire à la main est la suivante. En tant que root, je crée un script qui renvoie un JSON contenant une variable avec le nom que je souhaite pour mon hÎte :

# mkdir -p /var/rudder/hooks.d/
# vi /var/rudder/hooks.d/override-hostname.sh
    echo '{"rudder_override_hostname": "myhost.domain.tld"}'
# chmod +x /var/rudder/hooks.d/override-hostname.sh

# rudder agent inventory
Rudder agent 7.2.4
Node uuid: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx

C’est relativement simple, mais j’Ă©tais pas satisfait car ça nĂ©cessite une action manuelle et je suis super fainĂ©ant. Comme les noms courts de mes machines sont eux toujours bons, quel que soit le provider et que je connais le domaine par avance (zwindler.fr), j’ai crĂ©Ă© unedirective Rudder pour le faire Ă  ma place !

A partir d’une technique de type Distribution files / File content, j’ai mis les valeurs suivantes :

Et voilà le résultat, 5 minutes pour tard :)

Agent qui ne démarre pas aprÚs une désinstallation / réinstallation

Au dĂ©but, quand je commençais Ă  jouer avec Rudder, je me suis un peu mĂ©langĂ© les pinceaux au point qu’il Ă©tait plus simple de tout dĂ©sinstaller et recommencer proprement.

En théorie, quand on veut debug et/ou réinstaller un agent qui marche mal, on peut utiliser les commandes suivantes :

rudder agent factory-reset 
rudder agent inventory
rudder agent check

Sauf que dans mon cas, j’avais dĂ©sinstallĂ© puis rĂ©installĂ© l’agent. Et Ă  chaque fois, tout avait l’air OK, mais rudder ne faisait rien et voici le message d’erreur que j’avais :

rudder agent check

INFO: No disable file detected and no agent executor process either. Restarting agent service... Done
WARNING: The file /var/rudder/cfengine-community/last_successful_inputs_update is older than twice 10 minutes, the agent is probably stuck. Purging the CFEngine lock database... Done
FINISH: Rudder agent check ran properly, please look at messages above to see if there has been any error.

Pour essayer de comprendre pourquoi Rudder ne se lançait jamais alors que la communication avec le serveur semblait OK, je suis allé voir ce que faisait le service systemd rudder-agent.service.

cat /lib/systemd/system/rudder-agent.service
[Unit]
Description=Rudder agent umbrella service
Documentation=man:rudder(8)
Documentation=https://docs.rudder.io
After=syslog.target
# Dependencies register themselves with a WantedBy/RequiredBy
# currently they are rudder-cf-serverd and rudder-cf-execd

[Service]
Type=oneshot
RemainAfterExit=yes
# This is required for the service to be able to
# pass these commands to its dependencies
ExecStart=/bin/true
ExecReload=/bin/true

[Install]
WantedBy=multi-user.target

Et lĂ , c’Ă©tait tout de suite plus clair. Le service rudder-agent est en rĂ©alitĂ© un simple service “chapeau”, dont dĂ©pendent 2 sous services rudder-cf-serverd et rudder-cf-execd.

Or, par dĂ©faut, quand vous dĂ©sinstallez rudder-agent (Ă  minima sur Debian/Ubuntu), les services rudder-cf-serverd.service et rudder-cf-execd.service sont “disabled” mais pas re-“enabled” Ă  la rĂ©installation.

root@node01:/# systemctl status rudder-cf-serverd
● rudder-cf-serverd.service - CFEngine file server
     Loaded: loaded (/lib/systemd/system/rudder-cf-serverd.service; disabled; vendor preset: enabled)
     Active: inactive (dead)

Rudder ne faisait rien, tout simplement parce qu’il n’Ă©tait juste pas activĂ© :D. On rĂšgle ça en 4 commandes :-P

root@node01:/# systemctl enable rudder-cf-serverd
Created symlink /etc/systemd/system/multi-user.target.wants/rudder-cf-serverd.service → /lib/systemd/system/rudder-cf-serverd.service.
Created symlink /etc/systemd/system/rudder-agent.service.wants/rudder-cf-serverd.service → /lib/systemd/system/rudder-cf-serverd.service.
root@node01:/# systemctl start rudder-cf-serverd

root@node01:/# systemctl enable rudder-cf-execd
Created symlink /etc/systemd/system/multi-user.target.wants/rudder-cf-execd.service → /lib/systemd/system/rudder-cf-execd.service.
Created symlink /etc/systemd/system/rudder-agent.service.requires/rudder-cf-execd.service → /lib/systemd/system/rudder-cf-execd.service.
root@node01:/# systemctl start rudder-cf-serverd

Note : je ne suis pas convaincu que ce soit un comportement voulu, j’ai remontĂ© le point Ă  la team Rudder, je vous tiendrais au courant.

Conclusion

VoilĂ  les quelques petits trucs rigolos que j’ai eu avec Rudder pour l’instant.

Je ne sais pas quand je ferai le prochain article sur Rudder. La version 8 approche doucement, ça sera peut-ĂȘtre Ă  cette occasion (il y a une fonctionnalitĂ© que j’attends dedans).

On a pas non plus parlĂ© des plugins. Ca pourrait valoir le coup (il en existe certains uniquement utilisables avec la version entreprise que je n’ai pas, mais aussi des gratuits).

A voir. En attendant, have fun !

Généré avec Hugo
ThÚme Stack conçu par Jimmy