Logo-Rudder-fond-transparent-1

Un article pour aborder l’installation et la configuration de Rudder que j’ai testé il y a cela un an, puis je viens de découvrir les dernières nouveautés de la version 2.8. Rudder est ce qu’on appelle un outil de gestion de configuration et il s’appuie notamment sur CFEngine 3. Lorsqu’on a un parc de serveurs assez conséquent qu’il soit hétérogène ou non, il devient très fastidieux de faire des tâches répétitives. Par exemple, s’assurer que la configuration des routes soient bonnes, la gestion du fichier /etc/hosts (lorsqu’on n’a pas de DNS), appliquer la même politique du sécurité sur le serveur ssh, installer un package… La liste est très longue :-)

Sans rentrer dans les détails, Rudder se compose de 2 gros composants :

  • Rudder Agent : une intégration de l’agent CFEngine et de celui de FusionInventory, qui en se connectant au Rudder Server, va récupérer les rules (promises) à appliquer et envoyer l’inventaire de la machine.
  • Rudder Server : Qui se compose de CFEngine et d’une interface Web. Cette dernière qui reste très intuitive va nous permettre d’intégrer les agents Rudder, composer ces rules et les appliquer sur un ou plusieurs groupes d’agents.

Pourquoi Rudder ? CFEngine est un outil très puissant dont l’apprentissage du langage reste très difficile lorsqu’on commence à l’utiliser. Sa configuration se base essentiellement sur des fichiers textes. Et c’est là que Rudder tire toute sa puissance ! Grâce à son interface web et des promises pré-définies, vous allez pouvoir créer très facilement vos propres promises et choisir les agents sur lesquels les appliquer. D’ailleurs personnellement j’ai encore du mal avec la syntaxe de CFEngine et Rudder accélère énormément le déploiement de mes config.

Pour faire une petite comparaison, Rudder c’est un peu comme Puppet Dashboard mais il n’existe pas de version Enterprise avec une limitation des nodes !

Je vais utiliser 2 vm que j’appelerai rudder-server et rudder-agent. Des packages touts prêt existents pour Debian/Ubuntu, Centos/Redhat et SLES.

Mon installation se fera sur une Centos 6 et je vais utiliser la dernière version du Rudder de dispo. A ce jour, c’est le 2.8 (sorti le 07/11/2013)

Installation du Server

Si vous n’avez pas de DNS, il faut modifier le fichier /etc/hosts et rajouter les informations relatives aux 2 VMs

Un exemple :

192.168.122.10 rudder-server
192.168.122.15 rudder-agent

 

Configuration du repository YUM :

1
rudder-server # vi /etc/yum.repos.d/rudder.repo

copier les informations suivantes :

1
2
3
4
5
[Rudder_2.8]
name=Rudder 2.8 Repository
baseurl=http://www.rudder-project.org/rpm-2.8/RHEL_6/
gpgcheck=1
gpgkey=http://www.rudder-project.org/rpm-2.8/RHEL_6/repodata/repomd.xml.key

Puis lancer l’install :

1
rudder-server # yum install -y rudder-server-root

Après l’installation, une première configuration est nécessaire, lancer la commande suivante :

1
rudder-server # /opt/rudder/bin/rudder-init.sh

Répondez aux questions, à titre d’exemple :

  • Hostname : rudder-server (nom du serveur)
  • Allowed networks : 192.168.122.0/24 (le réseau à autoriser)
  • sample data : no (Information de demo)
  • LDAP database : yes (promises à installer)

J’ai rencontré un soucis au premier lancement, j’ai dû redémarrer le serveur ldap puis relancer la commande :

rudder-server # /etc/init.d/slapd restart

 

Après l’installation, prenez votre navigateur préféré et aller sur l’url : https://rudder-server/rudder/

Identifiant : jon.doe/secret

Sélection_013

Si tout se passe bien, vous devriez avoir cette page ensuite :

Sélection_015

Le serveur d’application Jetty peut mettre un certain temps à se démarrer. Si vous rencontrez des soucis, analyser le fichier de log

1
rudder-server # tail -f -n 20 /var/log/rudder/webapp/YYY_MM_DD.stderrout.log

Installation de l’Agent

Répéter les mêmes actions que pour la partie server : configuration du fichier /etc/hosts et yum.

Puis lancer l’install :

rudder-agent # yum install -y rudder-agent

Configurer l’agent rudder en renseignant le nom du serveur Rudder à contacter :

rudder-agent # echo rudder-server > /var/rudder/cfengine-community/policy_server.dat

Démarrage l’agent :

rudder-agent # /etc/init.d/rudder-agent start

Forcer la communication avec le serveur Rudder si vous ne souhaitez pas attendre que l’agent le fasse de lui-même :

rudder-agent # /var/rudder/cfengine-community/bin/cf-agent -KI

Vous pouvez vérifier que la communication s’est bien faite en lançant cette commande sur le serveur rudder :

rudder-server # find /var/rudder/inventories -name "*.ocs"

Vous devriez voir l’inventaire de fusion dans /var/rudder/inventories/incoming

Petite subtilité : si vous n’avez pas de DNS, il faut impérativement que l’agent puisse résoudre le nom du serveur rudder et inversement. Auquel cas, vous allez rencontrer des difficultés de communication entre l’agent et le serveur.

Visualisation de l’Agent depuis Rudder Server

Depuis l’interface, vous devriez voir votre Agent dans Node Management > Accept new nodes. Ce dernier doit être accepté afin de pouvoir l’utiliser.

Sélection_016

Cochez puis cliquer sur Accept into Rudder

Si vous partez maintenant dans Node ManagementList nodes vous devriez le voir apparaitre :

Sélection_017

Si vous cliquez sur l’agent, vous allez retrouvez plusieurs information dont notamment l’inventaire effectué par FusionInventory.

Utilisation de Rudder

L’installation de Rudder (serveur et l’agent) a été plus tôt simple. Nous allons voir maintenant comment utiliser l’interface et les possibilités qu’elle offre. Je vais prendre 2 exemples corrects :

  • Sur l’ensemble de mon parc de serveurs j’ai notamment quelques Centos 5 et 6. Afin de ne pas trop solliciter notre bande passante internet, j’ai créé un miroir en local des dépôts de Centos. Je souhaite donc pousser sur tous mes serveurs Centos la config yum associé à mon dépôt local.
  • Second exemple : n’ayant pas de DNS il faut gérer le fichier /etc/hosts afin que mes serveurs Centos puisse joindre mon serveur de dépot yum

Tout d’abord, il faut connaitre les objets que Rudder utilise :

  • Les Groups : ils vont nous permettre de rassembler des Nodes (Agents), tous mes serveurs linux, ou CentOS. On verra qu’ils peuvent être dynamiques ou statiques
  • Les Techniques : on peut voir cela comme des templates de Promises. Rudder propose un panel de techniques permettant de gérer différentes configuration. Par exemple, la configuration du service ssh, avec toutes les options qui la composent.
  • Les Directives : On instancie une directive à partir d’une technique. Une directive offre la possibilité de paramétrer des valeurs. C’est un peu l’équivalent d’une promise. Par exemple, dans une configuration particulière du service ssh , je désire que root n’a pas le droits de s’y connecter, l’authentification se fait uniquement par clé ssh, l’authentification par mot de passe est désactivée.
  • Les Rules : c’est l’application d’une ou plusieurs Directives sur un ou plusieurs Groups. A travers du menu de gestion des Rules on peut voir leur état. Si Rudder les a bien déployé ou non.

Les Groups

Je vais créer 2 groupes que je vais nommer Centos 5 et Centos 6. Dans l’interface il faut aller : Node Management > Groups > Create a new item

Sélection_018

Il faut donner un nom « Centos 5″, une description et pour ma part je coche Dynamic comme type et pour finir, Save

Sélection_032

Prochaine étape paramétrer ce groupe en effectuant des filtres :

  • Operating System Name = CentOS
  • Operating System Version Regex 5.*
  • pour finir cliquer sur Search pour visualiser les nodes qui correspondent aux critères.

Dans le cadre d’un groupe dynanique, les nouveau node du type CentOS 5 seront automatiquement rattachés à ce groupe.

Pour finir, cliquer sur Save et ajouter si nécessaire un commentaire.

La création du prochain groupe les CentOS 6 se fait de la même manière mais on va utiliser la fonctionnalité de clonage de groupe et changer les critères :

Sélection_034

  • Operating System Name = CentOS
  • Operating System Version Regex 6.*

Si vous cliquez sur Search, vous devriez voir apparaitre le node rudder-agent

Directives

Pour la création d’une nouvelle directive, il faut aller dans Configuration Policy > Directives. Pour le moment, il n’y a de technique qui gère les repo YUM alors que pour APT, il en existe une dans Application management > APT package manager configuration. C’est pas grave, on va utiliser Distributing files > Enforce a file content.

Sélection_023

On clique que Create Directive

Sélection_024

On donne un nom et une description par ex. : « yum config local miroir centos 5/6″ puis cliquer sur Configure

Sélection_026

En terme de configuration, j’ai choisi :

  • Path : /etc/yum.repos.d/CentOS-Base.repo
  • « Enforce the content of the file » coché
  • File Content
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# YUM repo Centos configuration
# Don't change this file
# it is managed by rudder
 
[base]
name=CentOS-$releasever - Base
baseurl=http://mirrorcentos/centos/$releasever/os/$basearch/
gpgcheck=1
enabled=1
 
[updates]
name=CentOS-$releasever - Updates
baseurl=http://mirrorcentos/centos/$releasever/updates/$basearch/
gpgcheck=1
enabled=1
 
[extras]
name=CentOS-$releasever - Extras
baseurl=http://mirrorcentos/centos/$releasever/extras/$basearch/
gpgcheck=1
enabled=1

On clique sur Save pour finaliser la configuration de la directive.

On attaque la création de la seconde directive selon le même principe. Mais cette fois-ci, il faudra gérer le fichier /etc/hosts afin de connaitre le host mirrorcentos. Son adresse ip par ex est 192.168.122.99

On va utiliser la technique System settings > Networking > Hosts settings

Sélection_027

On renseigne un nom et une description

Sélection_028

 

Dans Hosts setting #1 il faut renseigner les informations associées au host. Si besoin, on peut en rajouter un autre en cliquant sur Add another.

Rules

On va maintenant créer notre première rule il faut aller dans « Configuration Policy » > Rules > « Add a new rule »

Sélection_029

Au niveau du paramétrage :

Sélection_030

Rien de plus simple, on va sélectionner les 2 directives créées et les 2 groupes dynamiques :

  • rule : yum config local miroir centos 5/6
  • rule : mirrorcentos host
  • group : Centos 5
  • group : Centos 6

Cliquer sur Save pour créer la rule. Il faut attendre quelques minutes pour que la rule s’applique sur le node. Mais si vous n’avez pas de problème de résolution de noms (agent et serveur), voire de syncho NTP vous devriez voir les rules s’appliquer sans problème :

Sélection_031

On peut aussi vérifier que les modifications ont bien été déployées :

rudder-agent # cat /etc/hosts
rudder-agent # cat /etc/yum.repos.d/CentOS-Base.repo

Pour aller plus loin

Il est possible d’écrire ces propres Techniques et l’intégrer dans Rudder une doc est disponible. Il faut au minimum connaitre la syntaxe de CFEngine. Pas très pratique pour un débutant ou soit passé par une formation.

CFengine sous Windows : l’agent existe mais il est payant. La société Normation (éditrice de la solution Rudder) propose une version de leur agent pour Windows. Perso, je ne l’ai pas testé.

Il existe aussi CFEngine en version Enterprise, voici un comparatif https://cfengine.com/cfengine-comparison

Si vous souhaitez discuter avec les développeurs et la communauté un channel irc est disponible : #rudder sur Freenode. Une forge est aussi disponible pour remonter des bugs ou des features.

Références :

http://www.rudder-project.org

https://cfengine.com/docs/3.5/index.html

http://www.blogcompiler.com/2012/09/30/scalability-of-cfengine-and-puppet-2/