Linux, Docker

juillet 18, 2017 Laisser un commentaire

Mon petit cluster commence à ressembler à quelque-chose :

Bien sûr, on peut améliorer les choses :

  • passer en adressage IP V6 au lieu de l’IP V4 actuelle
  • Sécuriser le cluster, par exemple en supprimant l’accès distant à internet
  • Sécuriser l’accès nfs, pour le moment ouvert à tous vents.

L’aspect sécurité est le plus important, et les solutions sont en cours d’évaluation. Par contre l’IP V6 peut encore attendre un peu.

J’ai donc un cluster presque utilisable, mais où presque tout reste à faire pour y faire tourner des applications sans trop avoir à se casser la tête.

La solution qui m’intéresse le plus est Docker, et c’est bien le but de cette série d’articles. Commençons donc par l’installer sur chacun des noeuds.

Installation de Docker

Mes machines tournent sous Debian Linux, en mode headless (sans clavier, souris ni écran), en accès ssh. L’installation se fait donc via une interface chaise-clavier à coups de commandes apt sur chacun des nœuds du cluster:

  1. Activer les backports. Ceux-ci permettent d’installer des paquets en principe non prévus pour la version actuelle de Debian (8 dans mon cas, 9 pour les courageux), mais portés depuis une version plus récente de Debian.
  2. Installer quelques paquets nécessaires
  3. Installer Docker
  4. Créer un groupe unix docker et y ajouter le compte utilisateur unix
  5. Tester l’installation

J’ai utilisé les commandes suivantes (à adapter à votre cas) sous le compte root sur chacune des machines du cluster :

# Ajouter les backports au sources.list du noeud
echo '' >> /etc/apt/sources.list
echo '# Backport needed by Docker' >> /etc/apt/sources.list
echo 'deb http://ftp.debian.org/debian jessie-backports main' >> /etc/apt/sources.list

# Mettre à jour la liste des paquets disponibles
apt-get update

# Installer quelques paquets utiles
apt-get -y install apt-transport-https ca-certificates
apt-get -y install curl software-properties-common

# Ajouter la clef et le repository des paquets de Docker
curl -fsSL https://download.docker.com/linux/debian/gpg \
| apt-key add -
add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/debian \
$(lsb_release -cs) stable"

# Mettre à nouveau à jour la liste des paquets disponibles 
apt-get update  

# Télécharger et installer docker 
apt-get -y install docker-ce 

# Démarrer le service docker 
service docker start

Création du groupe docker

Ce groupe unix évite de devoir se connecter en root pour démarrer des conteneurs. Ceci se fait à nouveau sous le compte root.

# Créer le groupe docker.
groupadd docker

# Ajouter un compte (ici user1 sur le noeud island1)
usermod -aG docker user1

Test de l’installation

Si tout se passe bien, on peut passer au test classique du « hello world! »

docker run hello-world

Le résultat devrait ressembler à ceci :

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
3. The Docker daemon created a new container from that image which runs the
executable that produces the output you are currently reading.
4. The Docker daemon streamed that output to the Docker client, which sent it
to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
$ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
https://cloud.docker.com/

For more examples and ideas, visit:
https://docs.docker.com/engine/userguide/

Etat des lieux

Jusqu’ici, les nœuds étaient reliés en un cluster unix où chaque machine faisait ce que l’on voulait bien y lancer au travers d’une connexion ssh.

Après les manipulations indiquées plus haut, chaque nœud fait fonctionner son instance indépendante de Docker, et il « suffit » d’y lancer des applications dans des conteneurs au fur et à mesure des besoins.

London docks c1909

« Suffit » est entre guillemets car plusieurs limites apparaissent très vite :

  • Si une machine « meurt » (carte réseau ou disque HS par exemple), les applications qui y tournaient, ainsi que leurs données, sont perdues, le temps de remplacer le matériel fautif, et de restaurer applications et données.
  • Il faut se souvenir sur quelle machine tourne chaque application …
  • … et que la machine en question soit démarrée.

Ces limites ont plusieurs solutions, dont le mode « Swarm » de Docker.

Autres billets sur le sujet :

Creative Commons License

Catégories :linux Étiquettes :

Mégamètre!

juillet 11, 2017 Laisser un commentaire

Non, pas de remontée nostalgique de Goldorak. Pour information, je préférais Albator pour son côté épique et, toute proportion gardée, plus réaliste. Hey, j’avais neuf ou dix ans, quoi !

Non, là, je vais parler vélo, juste un peu…

Après un début de saison s’étirant en longueur, avec des arrêts dus à une météo défavorable puis une sciatique chatouilleuse, j’ai retrouvé un rythme à peu près normal. Je suis encore loin des quarante kilomètres quotidiens de l’an dernier, mais je progresse, et surtout, je travaille différemment, en alternant les sessions orientées cardio avec d’autres plus physiques.

Le physique, justement parlons-en. Pas du mien, qui se maintient façon Geebee, mais plutôt celui du vélo. Sur les cinq dernières sorties, trois crevaisons, à chaque fois dans un nid de poule qui a traversé sans regarder. Les poules vont bien, merci pour elles, leurs nids aussi. Dimanche, ça devait être celui d’un hybride de poule croisée avec un émeu. Heureusement que je roule plutôt « souple » – je sais, souple et moi, ça fait trois – sinon j’aurais cassé une jante. Le reste de la mécanique tient bien le choc, même si la chaîne sera bientôt à changer.

Rouler pour rouler, ça peut se faire sur un vélo d’appartement, mais j’aime bien prendre l’air. Sur route, pour l’échauffement ou le cardio, ou sur chemins, je tente de profiter du paysage, et des rencontres intéressantes qui ne manquent pas de se produire. Je passe pour l’instant sur les pok-pok-pok de certains troupeaux groupes de promeneurs dont les bâtons de marche et les babelles font plus de bruit qu’une sortie d’école. Je passe également sur une compagnie de coureurs plus ou moins sportifs qui occupe – dans un apparent désir obsessionnel de possession – toute la largeur du chemin.

Les personnages dont je veux parler sont tout autres. Par exemple, un Border Collie a dû me confondre avec un ovin égaré – surement la barbe ! – vu qu’il m’a coursé, et dépassé, jusqu’à ce que je m’arrête ! Je le savais déjà mais j’en suis désormais certain, il faut toujours parler aux chiens en chien ! Ils comprennent le parler humain, mais par pure amitié. Là, apparemment, un ovin qui parle humain, c’était trop suspect. Après discussion il a dû se rendre à l’évidence – je sais être convaincant – et m’a laissé partir après avoir reconnu son erreur.

Une autre rencontre intéressante était celle d’un cheval de trait, monté à la française. Le bougre avait décidé de rester là où il se trouvait : en travers du sentier. Visiblement, il a eu à choisir entre une séance de méditation impromptue et continuer sa promenade. Malheureusement, je ne parle pas cheval. C’est compliqué, parler cheval : c’est autant vocal que postural, alors face à ce « trait » bien décidé, j’ai dû me résoudre à utiliser les grands moyens et … j’ai simplement attendu qu’il ait terminé son introspection.

Au final, les vrais problèmes sont rares, à part les nids de poule imprudents depuis quelques temps, et je profite de ces sorties sportives pour faire le plein de bon air, de rencontres, d’efforts, de « Oh pétard je suis mort! », le plein de pluie parfois, et souvent d’endorphines.

J’ai un peu bifurqué là, non ? Ok, reprenons.

« Mégamètre ! « , disais-je. Il s’agit simplement du compteur kilométrique. J’ai passé les mille kilomètres, pour être exact mille et sept sur la photo, et douze cent dix à quelques pouillèmes près depuis Dimanche. Ce n’est pas une performance en soi, seulement une étape sympa.

megametre

Creative Commons License

Catégories :life Étiquettes :

Le Rubik’s Cube et la bouteille de Klein

juillet 4, 2017 Laisser un commentaire

J’aurai mis le temps, mais j’y suis enfin parvenu. Depuis le temps qu’il me narguait avec ses facettes colorées, et ses trois axes de rotation ! J’ai laissé mes doutes de côté, dansé une gigue et je me suis lancé.

J’y ai passé la journée, une journée complète de travail acharné à apprendre et comprendre les règles, comment déplacer une facette d’ici à là et inversement, et surtout j’ai longuement médité sur pourquoi, pourquoi, pourquoi six couleurs …

… et pourquoi six faces ? Après tout, une boule aurait été tout aussi bien convenu. Ou un cylindre, un cône, une ellipse de révolution ou un tore ! Ok, c’est chaud pour un tore.

Et pourquoi pas une bouteille de … Klein ? On me dit que non, ça ne sera pas possible pour la  bouteille de Klein. Petit tour sur Wiskykipedia, voyons voir… Je cite :

La bouteille de Klein possède un revêtement orientable à deux feuillets, difféomorphe au tore.

Ça doit être pour ça. Et, en plus, je lis ceci :

D’après le théorème d’Hurewicz, son premier groupe d’homologie en est l’abélianisé. C’est donc le produit direct ℤ×2.

 

Je ne suis pas sur d’avoir tout compris, mais c’est de toute apparence bel et bien foutu pour la bouteille !

De toute façon mon Rubik’s Cube est un cube. Pas besoin de tortiller de l’arrière train pour avancer droit, même en fermant les yeux et en serrant très fort ses petits poings rageurs, tout en récitant l’alphabet à l’envers une lettre sur sept trois-quarts, ça ne changera pas, ou si ça change alors le réveil-matin se chargera de remettre le cube au carré.

Reprenons. Cube, faces, facettes, couleurs. J’ai choisi la surface supérieure, examiné la configuration, évalué la stratégie le plus appropriée pour parvenir à mes fins, respiré un grand coup et …

… et bien après coup, je suis déçu. Je ne vois pas pourquoi on en fait tout un foin, car au fond, c’est très simple. Même un piou-piou de cinq ans saurait le faire. Je ne comprends pas comment on a pu écrire des bouquins et faire des programmes informatiques là dessus !

En résumé, je lui ai fait sa fête ! Et du premier coup en plus !

Ouaip les gens ! J’ai enfin réussi à mélanger un Rubik’s Cube !

rubik_s_cube_640x360

 

Creative Commons License

 

Catégories :Ca ne va pas mieux ! Étiquettes :

Electronique, magie noire, 8bits

juin 27, 2017 Laisser un commentaire

L’électronique a toujours été pour moi un domaine mystérieux. Bien sur, je l’ai étudiée un peu au lycée, avec le peu qui figurait au programme, les circuits RLC en mode alternatif, l’effet « ampli » des transistors, les alimentations à découpage. Bien sur, j’y suis un peu revenu – de loin – quand j’ai appris l’informatique et les circuits logiques. Bien sur, je connais les principes de base, U=RI, la loi des noeuds, Ampère et son bonhomme – sacré lui ! – , Lorentz, Laplace, les circuits équivalents, etc.

Pourtant, j’ai toujours été incapable de concevoir un circuit électronique un tant soit peu utile, et vu de moi, les circuits présentés dans les revues grand public tiennent plus de la magie noire que de l’ingénierie. Chacun son domaine, c’est comme ça.

Mon « truc », sans être un génie, c’est l’informatique, et notamment la programmation, les système, le « bas » niveau, et ça ne me défrise pas plus que ça de remettre sur pieds une vieille babasse tout juste bonne pour le recyclage ou le musée, uniquement pour que ça fonctionne. Malheureusement, les vieilles machines à un prix correct se font de plus en plus rares. En passant, je trouve ignoble de vendre plusieurs centaines d’euros un « huit bits », même en bon état, même dans sa boîte uniquement parce que c’est « vintage ».

La programmation ? Les machines grand public d’aujourd’hui sont tellement rapides et dotée en mémoire et en espace de stockage, que la programmation d’une application en serait devenue presque triviale sans toutes les couches intermédiaires – API, toolkit, etc, et même créer un système d’exploitation est abordable pour l’amateur obstiné.

J’ai commencé à programmer sur calculatrices – 22 pas de programme sur la TI 57, 220 sur la casio 7000G – puis sur micro en basic, pascal, C, assembleur dans 64 puis 512 kilo octets ! Ca c’était fun. Une idée, un besoin ? Hop, un brouillon, du code, de l’optimisation et ça roulait.

C’est la faible épaisseur des couches d’abstraction qui rendait tout cela possible. Aujourd’hui , le système est si complexe et prend tellement de place qu’il est parfois difficile de voir si un programme plante à cause d’un bug ou à cause d’une classe ou d’une API un peu tatillonne ou bancale.

Pour retrouver un peu cet esprit « micro » de l’informatique, j’ai acquis et revendu ou donné plusieurs « ordinosaures », mais par manque de place je n’en conserve que deux ou trois.

J’ai ensuite découvert presque par hasard un projet d’émulation d’une machine à base de Z80 tournant sous CPM. Cette émulation fonctionne sur … Un Arduino due. On en est là ! Une simple carte à quarante boulons est capable d’émuler une machine qui coûtait un bras au début des années quatre-vingt !

Custom serial card (front)

Le Due attend sagement dans sa boîte que je prenne le temps de m’en occuper. Je l’ai déjà dit, j’adore les cartes Arduino. La Uno avec son atméga a ma préférence, de même que les ATtiny85 pour leur simplicité et leur ouverture. Comme avec les ordinateurs des années 70 et 80, on a un accès plein et entier aux fonctionnalités du micro contrôleur, la différence étant la nécessité d’utiliser un ordinateur récent pour le programmer.
Grâce à l’ATtiny ou à son grand frère l’ATmega, il ne doit pas être bien difficile de créer une pico-machine simple, extensible, et programmable simplement, une espèce de huit bits au goût du jour. Les ressources sur Internet ne manquent pas.

L’ATtiny est limité en mémoire et en « pins » d’I/O, mais ça oblige à garder des buts simples et maitrisables. Je cherche à apprendre, et non à recréer un « Coco », un IIGS ou un Speccy, alors je vais procéder par étapes, un module après l’autre. Outre une carte « CPU » des plus simples, puisque basée sur un micro-contrôleur, un fond de panier, une alimentation, un peu de « glue » et quelques entrées/sorties devraient suffire pour commencer.

D’un autre côté, l’ATtiny sait « parler » I2C, tant en maitre qu’en esclave, ce qui ouvre pas mal d’opportunités, à commencer par une horloge RTC et une petite mémoire Flash de 32ko, ainsi qu’un petit écran oled, tous trois sortis de ma boîte à rabiots.

Creative Commons License

Catégories :Arduino Étiquettes :

Linux, réseau, ssh

juin 20, 2017 3 commentaires

Mes trois machines sont maintenant en réseau, et chacune sait être accédée depuis les autres. Idem depuis mon PC de travail.

Se connecter sur l’une ou l’autre demande d’y connaître un compte et de pouvoir en fournir le mot de passe via une interface chaise-clavier. Outre ajouter une couche de sécurité relative, ssh permet, sous certaines conditions, de se passer de mot de passe en utilisant le principe des clefs publiques et privées.

Pour le moment, l’aspect sécurité est secondaire en ce qui concerne mon cluster, mais je changerai certainement d’avis plus tard. Un pas à la fois.

Les manipulations sont faites depuis mon PC, et les paquets ssh-server et client sont déjà installés sur les nœuds du cluster ainsi que sur le PC

Création et copie des clefs

Rien de bien compliqué, il suffit de suivre l’un des nombreux tutoriaux disponibles sur le web, en adaptant les commandes si besoin.

1 – Créer un répertoire de travail et s’y placer

mkdir ~/src/islandscluster-ssh-key
cd ~/src/islandscluster-ssh-key

2 – Créer les clefs

ssh-keygen -f  id_rsa -q -N ""

3 – Créer le fichier des clef autorisées

cp id_rsa.pub authorized_keys

4 – Ajouter la clef publique du PC de travail

cat ~/.ssh/id_rsa.pub >> authorized_keys

5 – Copier les clefs sur le noeud island1 du cluster. Le mot de passe de user1 est demandé

scp -r . user1@island1:~/.ssh

6 – Tester la connexion

$ ssh user1@island1
The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Sat Mar 11 20:05:11 2017 from 192.168.0.41
user1@island1:~$

Voilà, le premier nœud est accessible sans mot de passe depuis le PC de travail.

Il reste à  réitérer la commande scp pour les deux autres nœuds du cluster, puis à tester les accès mutuels entre eux.

Un peu de sécurité : ssh et root

Il est généralement conseillé de désactiver l’accès à une machine via ssh sous le compte root. Il suffit, sous le compte root, de modifier dans le fichier /etc/ssh/sshd_config le paramètre PermitRootLogin à no :

PermitRootLogin no

puis de redémarrer le serveur sshd sur la machine :

/etc/init.d/sshd restart

Prochaine étape

La prochaine étape consiste à installer Docker sur chacun des nœuds, puis d’activer le mode swarm. Cela mérite bien un billet ad-hoc.

 

Autres billets sur le sujet :

Creative Commons License

Catégories :linux Étiquettes :

Univers complexe

juin 13, 2017 1 commentaire

Cutting the Stone (detail)

– ‘lo John !
– ‘lo Sir ! Comment vas-tu bien mieux que si ça allait beaucoup moins bien ?
– Ben en réalité, pareil ! J’ai bon ?
– En fonction du spin de l’électron de troisième couche associé à celui de l’anti gluon au cœur d’une étoile naine à neutrons, 1 partout.
– à neutrons ou à protons ? Parce que ça ne change rien, ne l’oublions pas ! Et donc résultat contradictoirement non faussé !
– Après tout, pourquoi pas, en mesurant la vitesse de rotation de manière péremptoire.
– Péremptoire OU perpendiculaire, évidemment !
– Oui, évidemment  , mais parce que l’angle delta/mu est anti égal sinon ça marche moins bien
– anti-égal métaphysiquement ou sporadiquement ?
– anti égal métaphysiquement et sporadiquement, vu qu’on est dans un univers complexe étendu et que du coup le poids de la couleur devient non négligeable si on pousse l »étude jusqu’aux quarks étranges avec un charme négatif.
– Je comprends mieux ! Si on extrapole, on pourrait donc dire que, dans un sens (comme dans l’autre d’ailleurs), on n’est pas en mesure de dire que ça va ou pas (et réciproquement) puisque que, péremptoirement, l’univers complexe rend intangiblement sporadique la notion même de couleur.
Et vice et versa…

Creative Commons License

Linux, réseau local

juin 6, 2017 3 commentaires

More Spaghetti, I Say (95916146)

Mon projet de cluster avance un peu à la fois. Les marchés aux puces étant de saison, j’ai acheté à très bon prix quelques barrettes de mémoire pour gonfler deux des trois PC que je compte utiliser. Le troisième utilisant des barrettes un peu spéciales (ECC ou un truc du genre), c’est un peu plus compliqué.

Pour rappel, mon but premier est de découvrir et utiliser Docker, et notamment Docker Swarm.

Y arriver n’est pas très compliqué, si j’en crois les documentations disponibles.

Commençons par le début : l’installation du système et la connexion en réseau. Les pratiques varient en fonction de l’historique de chacun, mais ce qui suit (à part la photo)  fonctionne chez-moi.

 

Installation du système

Chacun des ordinateurs du futur cluster doit avoir son système d’exploitation. J’ai choisi Debian Stable. Un écran, un clavier, une clef USB d’installation (merci unetbootin) et on commence par le premier PC.

L’installation est relativement rapide, pour peu qu’on ait une connexion internet rapide. Ici, avec 200 kbps en pointe, il vaut mieux être patient.

Je n’ai installé que le système de base, plus quelques paquets bien utiles, comme gvim, ssh-client et ssh-server.

PC suivant… et PC suivant.

Après quelques tests, on peut passer à la suite.

Mise en réseau avec adresses IP fixes

Par défaut, mon routeur attribue aux ordinateurs des adresses en 192.168.0.* . C’est bien pratique en usage classique (bureautique, développement ou jeu), mais beaucoup moins pour des serveur où on aime bien savoir qui (quelle machine) est où (sur quelle adresse IP).

Un serveur DNS ou un bail DHCP très long sont deux solutions, mais je préfère fixer les choses. Mes trois machines auront pour adresses IP 192.168.0.11 à 13. J’ai donc configuré mon routeur pour que la plage d’adresses de 192.168.0.11 à 20 me soit réservée.

Reste à assigner un nom et une adresse IP à chaque machine. D’habitude, mes machines portent le nom d’une ville, mais là j’ai fait au plus court : island1, 2, et 3 .

Reste à modifier les fichier /etc/network/interfaces comme suit :

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

source /etc/network/interfaces.d/*

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto eth0
iface eth0 inet static
address 192.168.10.11
netmask 255.255.255.0
gateway 192.168.1.1

La ligne « address » doit être modifiée sur chaque machine : 192.168.0.11 sur la machine island1, 192.168.0.12 sur island 2 et ainsi de suite.

Chacune des machine du futur cluster devant connaître les autres, le ficheir /etc/hosts doit contenir les lignes suivantes :

192.168.0.11 island1
192.168.0.12 island2
192.168.0.13 island3

Un petit reboot ou /etc/init.D/networking restart plus loin, la partie réseau proprement dite est terminée.

On peut tester que chaque machine sait parler aux autres, par exemple avec la commande ping suivie de l’adresse IP ou du nom d’une des autres machines.

Un peu de sécurité électrique

Mes trois machines sont alimentées via une multiprise qui ne servira qu’à ça. Même si leur consommation électrique est raisonnable, il est hors de question d’y brancher un fer à repasser ou un four à micro-ondes ou même une lampe de bureau. L’idéal serait une multiprise dotée d’un disjoncteur intégré. On n’est jamais trop prudent.

 

Autres billets sur le sujet :

Creative Commons License

Catégories :linux, Uncategorized Étiquettes :
%d blogueurs aiment cette page :