Blog de dada

DevOps, bidouilleur et routard plein de logiciels libres

/e/ sur mon 5T, une semaine plus tard

Rédigé par dada / 03 décembre 2018 / 6 commentaires

Je vais vous étonner. Vraiment. Après une semaine d'utilisation, je peux affirmer que /e/, ça marche.

Si vous avez la bonne idée de me suivre, ici , dans le web 3.0, vous savez que j'ai régulièrement écrit autour de mes aventures avec cette version d'Android un peu spéciale. Je vais y revenir dans ce billet avec plus d'images et des phrases un peu plus longues.

Une version d'Android connectée

Je n'ai jamais lu le site officiel en long, en large et en travers. Jamais. Tout ce que j'ai découvert cette semaine ne provient que de mes tâtonnements. Dans mon précédent billet, je soupçonnais /e/ d'utiliser un Nextcloud pour balancer l'intégralité du contenu important du téléphone dans les nuages. C'est maintenant vérifié. Il suffisait que je me rende sur https://ecloud.global pour le confirmer.


Ça ne saute pas tout de suite aux yeux alors je suis allé voir dans les sources de la page : à l'heure où j'écris ces lignes, Ecloud tourne avec un Nextcloud 14.0.3. Pour info, la dernière version stable de NC est là 14.0.4 et elle est sortie la semaine dernière. Ils ne sont pas encore à jour mais rien d'alarmant.

Voici les données nativement balancées dans l'instance Nextcloud :


On appréciera, ou pas, de voir tout ça partir sur les serveurs de la Fondation, mais c'est là et ça facilitera la vie de celles et ceux qui ne veulent pas maintenir un serveur faisant tourner un Nextcloud.

Autre point important : l'infrastructure utilisée est celle d'OVH, loin des GAFAM. Ça me paraissait évident mais le vérifier rassure toujours.

C'est là, mais pas vraiment

Maintenant que vous savez ce qu'il y a derrière les comptes /e/, je vais vous déconseiller de vous en servir pour le moment. Ça n'est pas à cause des seulement 50 Mo disponibles, c'est parce que la synchro ne semble jamais s’arrêter.

J'étais, depuis quelques heures, loin d'une connexion wifi amicale quand je me suis rendu compte que ma batterie foutait le camp. Si vous avez aussi un téléphone de la marque OnePlus, appréciez cette capture d'écran :


65% de batterie pour moins de 10 heures d'autonomie, on est bien loin des presque 3 nuits et 2 jours d'autonomie observable en temps normal. L'explication ? J'en sais trop rien encore. La synchro semble déconner et passe son temps à uploader des trucs. Comme c'est géré par l'application Nextcloud qu'on sait être ultra gourmande : ça massacre la batterie.

En vrac

- L'alerte sur la consommation de data fonctionne. Ma mésaventure avec mon compte /e/ a fait sonner l'alarme après la disparition de 2 Go de datas dans la nature.
- J'ai découvert que /e/ respectait la configuration par défaut de Silence. Le mode incognito m'a d'abord fait penser à un bug avant qu'on me confirme qu'il s'agit de quelque chose d'absolument normal.
- Je n'ai pas réussi à remettre en place les raccourcis Firefox sur le bureau. J'avais l'habitude d'en faire pour Pixelfed, Peertube et Prismo. L'option est grisée, ce qui me fait penser à un souci de permission.
- Les quelques applications issues du magasin d'application de Google fonctionnent. MicroG s'en sort bien pour moi. En parlant de ça, Aurora Store est vraiment super !
- Le développement est bien actif : on a le droit à 850 Mo d'OTA tous les deux jours, environ. Les changelogs sont disponibles par ici.
- J'ai toujours pas retrouvé comment me servir du lecteur d’empreinte pour scroller. Arg.

Pourquoi ne pas améliorer LineageOS ?

En parlant de /e/ sur Mastodon, je me suis rendu compte qu'il y avait des controverses au sujet de cet OS.

Le grand chef de cette aventure est connu pour avoir créé Mandrake, un fork de Red Hat à l'époque où ce dernier avait une interface franchement Meh. Les plus anciens se souviendront de cette envie qui marqua l'histoire de Linux en France. Il semble à nouveau tenter le coup, avec Android ce coup-ci. Trier ce qu'il y a de primordial pour l’utilisateur, c'est franchement une bonne idée. Les gens ne veulent pas plus savoir comment fonctionnent leur téléphone que leur PC.

Nous savons tous que Ubuntu se base outrageusement sur Debian pour faire son beurre. Il a fallu un peu de temps pour que la valeur ajoutée produite par Ubuntu redescende dans Debian. Ça a coincé un temps, mais c'est bon maintenant. Aussi, plus grand monde ne peste contre Mint qui pompe sur Ubuntu qui pompe sur Debian. Est-ce que /e/ et LineageOS ne pourraient pas se retrouver aussi dans un jeu gagnant-gagnant ? Sans doute que si.

Bref.

Une capture d'écran pour la fin ?


MariaDB en Master/Slave via ProxySQL

Rédigé par dada / 01 décembre 2018 / Aucun commentaire



On y est. J'ai enfin réussi à faire tourner ProxySQL comme je l'entendais pour que mes conteneurs tapent dans des BDD loin de Kubernetes. Sortir ses bases de données du cluster est un choix. Si vous êtes courageux, vous pouvez les laisser dedans. Ceci-dit, faut être un tantinet croyant pour se lancer dans la seconde solution. Dans ces histoires de hautes dispo et de résistance aux pannes, la bonne solution semble être de gérer son cluster de BDD en dehors de son cluster k8s.

Installation des MariaDB

Là, je devrais vous passer une pile de commandes pour installer des serveurs MariaDB en master/slave, mais bon. Tout est très clair dans la documentation officielle.

Sachez simplement que le master porte l'IP 192.168.0.17 et que le slave, lui, là 192.168.0.77.

Installation de ProxySQL

Helm ? Non, pas ici. On va donc pondre un YAML avec le Deployment et le Service qui va bien :
dada@master:~/proxysql$ cat proxysql.yaml

apiVersion: v1
kind: Deployment
metadata:
  name: proxysql
  labels:
    app: proxysql
spec:
  replicas: 2
  selector:
    matchLabels:
      app: proxysql
      tier: frontend
  strategy:
    type: RollingUpdate
  template:
    metadata:
      labels:
        app: proxysql
        tier: frontend
    spec:
      restartPolicy: Always
      containers:
      - image: severalnines/proxysql:1.4.12
        name: proxysql
        volumeMounts:
        - name: proxysql-config
          mountPath: /etc/proxysql.cnf
          subPath: proxysql.cnf
        ports:
        - containerPort: 6033
          name: proxysql-mysql
        - containerPort: 6032
          name: proxysql-admin
      volumes:
      - name: proxysql-config
        configMap:
          name: proxysql-configmap
---
apiVersion: v1
kind: Service
metadata:
  name: proxysql
  labels:
    app: proxysql
    tier: frontend
spec:
  type: NodePort
  ports:
  - nodePort: 30033
    port: 6033
    name: proxysql-mysql
  - nodePort: 30032
    port: 6032
    name: proxysql-admin
  selector:
    app: proxysql
    tier: frontend

A remarquer

Le Deployment contient la configuration de ce qu'on appelle un ReplicatSet. Ça permet à k8s de toujours maintenir le nombre de pods déclaré en fonction. Quand un pod se casse la figure, il revient à lui. Dans un RS, quand un pod de casse la figure, il va aussi revenir à lui. Super. Sauf que, par exemple, dans le cas d'une mise à jour, k8s ne va pas terminer les pods d'un coup, mais les gérer un par un.

Le YAML contient aussi un Service de type NodePort qui va nous permettre de mapper les ports 30032 et 30033 internes aux pods sur les ports 6032 et 6033 accessibles depuis l'extérieur. Voyez la suite du billet pour découvrir qu'au lieu de taper sur le port 3306 de vos serveurs MariaDB, vous allez taper sur le port 6033.

On fait gober tout ça au cluster :
dada@master:~/proxysql$ kubectl apply -f proxysql.yaml
Et voilà le travail :
dada@master:~/proxysql$ kubectl get pods --all-namespaces  | grep proxysql
default            proxysql-5c47fb85fb-fdh4g                              1/1     Running     1          39h
default            proxysql-5c47fb85fb-kvdfv                              1/1     Running     1          39h

Configuration de ProxySQL

Tout va se jouer dans le fichier proxysql.cnf. Tout, ou presque, mais j'en parlerai après. Voici déjà de quoi faire :
datadir="/var/lib/proxysql"
admin_variables=
{
        admin_credentials="proxysql-admin:adminpwd"
        mysql_ifaces="0.0.0.0:6032"
        refresh_interval=2000
}
mysql_variables=
{
        threads=4
        max_connections=2048
        default_query_delay=0
        default_query_timeout=36000000
        have_compress=true
        poll_timeout=2000
        interfaces="0.0.0.0:6033;/tmp/proxysql.sock"
        default_schema="information_schema"
        stacksize=1048576
        server_version="5.1.30"
        connect_timeout_server=10000
        monitor_history=60000
        monitor_connect_interval=200000
        monitor_ping_interval=200000
        ping_interval_server_msec=10000
        ping_timeout_server=200
        commands_stats=true
        sessions_sort=true
        monitor_username="proxysql"
        monitor_password="proxysqlpwd"
}
mysql_replication_hostgroups =
(
        { writer_hostgroup=10, reader_hostgroup=20, comment="MariaDB Replication" }
)
mysql_servers =
(
        { address="192.168.0.17", port=3306, hostgroup=10, max_connections=100, max_replication_lag = 5 },
        { address="192.168.0.77", port=3306, hostgroup=20, max_connections=100, max_replication_lag = 5}
)
mysql_users =
(
        { username = "nextcloud" , password = "nextcloudpwd" , default_hostgroup = 10 , active = 1 }
)
mysql_query_rules =
(
        {
                rule_id=100
                active=1
                match_pattern="^SELECT .* FOR UPDATE"
                destination_hostgroup=10
                apply=1
        },
        {
                rule_id=200
                active=1
                match_pattern="^SELECT .*"
                destination_hostgroup=20
                apply=1
        },
        {
                rule_id=300
                active=1
                match_pattern=".*"
                destination_hostgroup=10
                apply=1
        }
)
Il est long alors on va le découper ensemble.

Global

{
        admin_credentials="proxysql-admin:adminpwd"
        mysql_ifaces="0.0.0.0:6032"
        refresh_interval=2000
}
Ici, on retrouve surtout les accès administrateur de ProxySQL et son port qui écoute sans limite d'IP.

Mysql_variables

mysql_variables=
{
        threads=4
        max_connections=2048
        default_query_delay=0
        default_query_timeout=36000000
        have_compress=true
        poll_timeout=2000
        interfaces="0.0.0.0:6033;/tmp/proxysql.sock"
        default_schema="information_schema"
        stacksize=1048576
        server_version="5.1.30"
        connect_timeout_server=10000
        monitor_history=60000
        monitor_connect_interval=200000
        monitor_ping_interval=200000
        ping_interval_server_msec=10000
        ping_timeout_server=200
        commands_stats=true
        sessions_sort=true
        monitor_username="proxysql"
        monitor_password="proxysqlpwd"
}
Là encore, je ne vais pas m'étendre sur toute la configuration (par défaut) mais sur deux points seulement : le port 6033 sera celui que vous allez rentrer dans les fichiers de configuration de vos services ayant besoin de MariaDB et l'utilisateur "monitor" est là pour vérifier l'état de vos serveurs MariaDB.

Mysql_replication_hostgroups

mysql_replication_hostgroups =
(
        { writer_hostgroup=10, reader_hostgroup=20, comment="MariaDB Replication" }
)
C'est à partir de là qu'on commence à s'amuser ! Ici, on déclare deux groupes de serveurs avec deux ID différents. Les writer, ceux qui ont le droit d'écrire et les reader, ceux qui n'auront que le droit de lire. Ça tombe bien, c'est plus ou moins ce qu'on veut.

Mysql_servers

mysql_servers =
(
        { address="192.168.0.17", port=3306, hostgroup=10, max_connections=100, max_replication_lag = 5 },
        { address="192.168.0.77", port=3306, hostgroup=20, max_connections=100, max_replication_lag = 5}
)
Si vous aviez suivi le blabla précédent, vous pouvez déchiffrer ces deux lignes en :

- Le serveur avec l'IP 192.168.0.17 fait partie du groupe des writers On lui demande de traiter 100 connexions actives maximum et d'avoir un lag avec son master de moins de 5 secondes.
- Le serveur avec l'IP 192.168.0.77 fait partie du groupe des reader. On lui demande de traiter 100 connexions actives maximum et d'avoir un lag avec son master de moins de 5 secondes.

Mysql_users

mysql_users =
(
        { username = "nextcloud" , password = "nextcloudpwd" , default_hostgroup = 10 , active = 1 }
)
Les utilisateurs MariaDB doivent être renseignés ici !
Dans mon cas, profitez de la configuration sécurisée de mon utilisateur nextcloud. Il sera assigné à un groupe d'utilisateur par défaut : le groupe des writer, et sera activé. Il est possible qu'un besoin particulier soit à l'origine de la création de la variable "active" mais j'ai du mal à comprendre pourquoi un compte MariaDB resterait renseigné avec active = 0 plutôt que dégagé. M'enfin.

Mysql_query_rules

mysql_query_rules =
(
        {
                rule_id=100
                active=1
                match_pattern="^SELECT .* FOR UPDATE"
                destination_hostgroup=10
                apply=1
        },
        {
                rule_id=200
                active=1
                match_pattern="^SELECT .*"
                destination_hostgroup=20
                apply=1
        },
        {
                rule_id=300
                active=1
                match_pattern=".*"
                destination_hostgroup=10
                apply=1
        }
Là, c'est la définition des règles qui seront automatiquement appliquées pour chaque serveur. La plus claire est la règle à l'ID 200 qui est assignée au hostgroup 20, celui des reader. C'est là que ProxySQL va faire un tri. Le hostgroup 20 n'ayant que la possibilité de faire des SELECT, on comprend bien qu'on parle de lecteurs uniquement.

ConfigMap

On charge tout ça dans une ConfigMap :
dada@master:~/proxysql$ kubectl create configmap proxysql-configmap --from-file=proxysql.cnf

Si on prend le temps de revenir sur le YAML pour comprendre la ConfigMap, on la repère ici :

      containers:
[...]
        volumeMounts:
        - name: proxysql-config
          mountPath: /etc/proxysql.cnf
          subPath: proxysql.cnf
[...]
      volumes:
      - name: proxysql-config
        configMap:
          name: proxysql-configmap

On comprend que les pods ProxySQL vont aller parcourir la liste des ConfigMaps disponibles pour repérer celle qui porte le nom "proxysql-config" et la monter dans /etc/proxysql.cnf.

Vérifier tout le système

Une commande que vous devriez connaître par cœur va nous prouver que tout fonctionne :

dada@master:~/proxysql$ kubectl logs proxysql-5c47fb85fb-fdh4g

Chez moi, elle sort quelque chose comme ça :

2018-12-01 08:30:19 [INFO] Dumping mysql_servers
+--------------+--------------+------+--------+--------+-------------+-----------------+---------------------+---------+----------------+---------+-----------------+
| hostgroup_id | hostname     | port | weight | status | compression | max_connections | max_replication_lag | use_ssl | max_latency_ms | comment | mem_pointer     |
+--------------+--------------+------+--------+--------+-------------+-----------------+---------------------+---------+----------------+---------+-----------------+
| 10           | 192.168.0.17 | 3306 | 1      | 0      | 0           | 100             | 5                   | 0       | 0              |         | 140637072236416 |
| 20           | 192.168.0.17 | 3306 | 1      | 0      | 0           | 100             | 5                   | 0       | 0              |         | 140637022769408 |
| 20           | 192.168.0.77 | 3306 | 1      | 0      | 0           | 100             | 5                   | 0       | 0              |         | 140637085320960 |
+--------------+--------------+------+--------+--------+-------------+-----------------+---------------------+---------+----------------+---------+-----------------+

On y retrouve la liste des serveurs et leurs rôles : mon master appartient aux groupes reader et writer. Normal puisqu'il doit écrire et lire. Mon slave, lui, n'appartient qu'au groupe des reader, comme convenu.

Le piège

Si j'ai pesté un certain temps contre ProxySQL sur Mastodon , c'est que ma configuration ne marchait pas alors que tout semblait normal. J'avais bien en tête ce que je viens de vous expliquer: Les reader, les writer, la configuration des users, etc. C'était clair.
Pourtant, quand je lancais mon conteneur Nextcloud pour qu'il s'installe comme un grand, il pété ma réplication en écrivant sur mon slave. Le con.
J'ai fini par ouvrir une issue pour crier à l'aide et on m'a expliqué ceci : ProxySQL vérifie la présence de la variable READ_ONLY sur tous les serveurs renseignés dans la rubrique mysql_replication_hostsgroups. Si la variable est a OFF sur votre slave, la réplication entre les deux serveurs MariaDB ne bronchera pas, mais ProxySQL ira taper dans votre slave, peu importe la configuration en place. Re le con.

Pour vous épargner des soucis, pensez bien à vérifier que votre slave affiche bien ceci :
MariaDB [(none)]> SHOW VARIABLES like 'read_only';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| read_only     | ON   |
+---------------+-------+
1 row in set (0.00 sec)
Vous êtes bons. Vous pouvez maintenant aller configurer vos pods pour aller taper sur vos MariaDB via proxysql:6033 en place et lieu de localhost:3306.

Retours sur /e/ dans un OnePlus 5T

Rédigé par dada / 26 novembre 2018 / 15 commentaires



C'est donc un dimanche soir, vers 18h, que j'ai décidé de faire ce que j'avais quasiment juré d'arrêter : changer l'OS de mon téléphone.
Je fais partie de celles et ceux qui se sont jetés sur FirefoxOS en y croyant, puis sur Ubuntu Touch, en y croyant déjà moins. L'expérience des abandons et des échecs m'avait pourtant bien fait comprendre que les OS alternatifs sur un objet aussi important que le mobile étaient une mauvaise idée. Et pourtant. Merci Monseigneur.

/e/ ?

Ne me demandez pas comment ça se prononce. Pas la moindre idée. C'est pourtant un OS alternatif basé sur Android dont on entend souvent parler sur Mastodon. N'essayez pas de retrouver le hashtag qui va bien, le nom de l'OS ne permet pas d'en faire une pub correcte. C'est le compte de Gaël Duval qu'il faut suivre pour se tenir informé.
Pour plus d'informations, je vous redirige vers le site officiel de la fondation derrière ce projet. Il faut simplement retenir que l'OS se veut respectueux de la vie privée : ciao les Google Apps, Services et autres cochonneries installées de force dans votre mobile.

/e/ est un projet à but non lucratif, dans l’intérêt de tous. Nous concevons des systèmes d’exploitation mobile open source et des services en lignes associés, qui respectent la vie privée et les données personnelles de chacun.
Nous sommes une équipe internationale d’entrepreneurs expérimentés, de développeurs et de designers, qui s’appuie sur une communauté de contributeurs grandissante.

À quoi ça ressemble ?

 

Pas grand-chose à raconter. C'est une version propre d'Android avec un thème et un jeu d'icônes personnalisés.

Les applications par défaut

On retrouve les grands classiques bien connus des libristes :
  • K9Mail pour gérer les mails
  • Signal et Telegram pour les SMS & co
  • Chrome (Chromium ?) comme navigateur par défaut
  • Davdroid pour gérer les carnets d'adresses distants
  • Etar pour le calendrier
  • Notes pour la prise de notes
  • Tasks comme gestionnaire de tâches
  • Magic Earth pour le GPS
  • Nextcloud comme gestionnaire de fichiers
  • Open Camera pour la photo
Personnellement, je ne comprends pas le choix de Chromium. Je reste un adorateur de Mozilla, avec tous les travers que cela entraîne.
Leur navigateur vient avec une configuration particulière : il a pour moteur de recherche par défaut l'instance Searx de la /e/ Foundation.

Sous le capot

Sous le capot, on retrouve une version 8.1.0 d'Android avec les correctifs de sécurité datés du 5 novembre. En passant par la page d'installation de l'OS, on remarque que c'est effectivement une version de LineageOS remastérisée à la sauce /e/. Mastodon me raconte qu'un OS débarrassé des services Google et avec des services de synchronisation, ça existait : CyanogenMod.

Des services ?

Un mail

Si vous en faites la demande, ça n'a rien d'obligatoire, vous pouvez demander la création d'un compte en @e.email. Ce faisant, vous obtiendrez une nouvelle adresse à ajouter entre celle qui sert pour le boulot, la Gmail à spam et la Protonmail qui va bien. Une fois le compte créé, c'est sur un Rainloop que vous allez atterrir.


Sauvegarde des comptes et fichiers



J'ai l'impression qu'ils ont une instance Nextcloud sur leurs serveurs. La liste des applications permet de ne pas trop en douter. C'est une solution simple et bien supportée pour synchroniser tout le contenu important d'un téléphone moderne.

Le magasin d'applications

Là, j'ai un peu froncé les sourcils : il n'y a pas de store par défaut. Si vous en voulez un, c'est à vous d'aller le choper en passant par le navigateur. C'est une manipulation marrante : lancer le navigateur pour aller taper sur une instance Searx et enfin télécharger, disons, F-droid, c'est un truc qu'on ne fait pas souvent.

F-droid

Une fois installé à la main, F-droid ne pose pas de problème. Tout roule. J'ai installé une version complète de Nextcloud, Fennec (Firefox), Maps, Silence pour mes SMS et Tusky.

Aurora Store

C'est encore sur Mastodon qu'on m'a conseillé ce store. Aurora est un fork de Yalp. Il permet d'aller récupérer sereinement vos applications uniquement disponibles sur le Play Store de Google.  J'ai réussi à installer mes applications critiques : ProtonMail, ProtonVPN, les applications SNCF et celle de ma banque. Et ça marche. Au choix, vous pouvez vous connecter avec votre compte Google pour retrouver les applications que vous auriez achetées ou passer par leur service anonyme.

Des soucis ?

À l'installation de Tusky, le navigateur qui vient avec /e/ ne m'a pas permis d'autoriser la connexion à mon instance. J'ai dû installer Fennec depuis F-droid et le configurer comme navigateur par défaut pour y arriver.
Autant j'ai réussi à installer des applications du Play Store depuis Aurora sans problème et réussir à m'en servir, autant l'application Qobuz s'est lamentablement vautrée. Rien à faire, elle ne démarre pas. Moi qui envisageais de m'y abonner pour de bon, c'est mal barré. C'est corrigé.

Est-ce que c'est vraiment utilisable ?

OnePlus 5T

Pour le moment, pas grand-chose à signaler. /e/ fonctionne et permet de renouer avec un Android propre. Mon téléphone supporte bien la chose. Même le lecteur d'empreinte fonctionne. J'aimerais bien réussir à le configurer non pas pour qu'il lise le bout de mes doigts mais pour m'en servir comme pavé tactile. Je n'ai pas encore retrouvé l'option.
Au niveau de l'appareil photo, chose pour laquelle j'avais décidé d'acheter un OnePlus 5T, je doute qu'on retrouve le même niveau de qualité que sur OxygenOS. Par exemple, je ne retrouve pas la possibilité de passer par le zoom optique du deuxième capteur. Après, je ne m'en sers jamais. Quant à l'application Open Camera, elle semble quand même fournir une foule d'options intéressantes. N'oubliez pas d'aller régler la résolution à fond dans les options si vous vous voulez retrouver quelque chose qui se rapproche de ce que vous aviez avant.

En général

Avant de vous lancer dans l'aventure, n'oubliez pas que l'absence de Play Store va vous pénaliser d'une façon ou d'une autre. L’intégration de MicroG permet de vivoter mais n'apporte pas de miracle. Les applications sont de plus en plus dépendantes des services Google pour fonctionner. Google a réussi son coup : les développeurs ne regardent même plus ce qu'il y a dans leur SDK et ajoutent des dépendances dégueulasses à la truelle.

Gardez aussi à l'esprit que c'est un OS en version alpha, à utiliser à vos risques et périls.

Je me souviens de l'époque de FirefoxOS : nous étions beaucoup à avoir spécialement acheté les téléphones siglés pour pouvoir nous en servir. J'avais spécialement commandé le téléphone de référence des développeurs, le Flame, pour en avoir un peu plus sous le capot. Certains avaient même pris de leur temps pour aller en faire la promotion dans des grandes surfaces. Une période assez dingue quand on y repense. Le choix de /e/ loin des délires de Mozilla me rassure, un peu. La suite ? On verra.

Liens utiles :

Prometheus et Graphana pour voir dans son cluster Kubernetes

Rédigé par dada / 23 novembre 2018 / Aucun commentaire


Mes aventures avec Kubernetes ne se sont pas arrêtées, loin de là. J'ai actuellement 54 pods répartis sur 3 nodes et 1 master et 2 VM MariaDB en master/slave, le tout reparti sur mon laptop, mon PC fixe et un vieux PC portable datant de ma vie étudiante. Je pourrais aussi vous parler de mon Pi-Hole sur ma Raspberry qui voit passer toutes les requêtes. Bref.
Aujourd'hui, alors que je peste contre ProxySQL sur Mastodon, j'ai décidé de regarder du côté du monitoring de l'orchestrateur, histoire de prendre l'air. Si vous êtes un malheureux lecteur régulier, vous devriez savoir que j'adore Prometheus et que Grafana fait, à mes yeux, des dessins bien plus impressionnants que Klimt.

Note : ça n'a pas calmé ma frustration : c'est très rapide et simple à mettre en place.

Installer Prometheus

Avec pour base mes billets précédents, nous allons installer Prometheus, Grafana et l'AlertManager avec Helm.

Ajouter le dépôt dans helm

Là, à la manière d'APT, nous allons ajouter une source à Helm pour lui permettre d'installer ce qu'on lui demande.

helm repo add coreos https://s3-eu-west-1.amazonaws.com/coreos-charts/stable/

Installer l'operator

On enchaîne sur l'installation de l'operator, le grand patron qui va s'occuper pour nous de Prometheus dans k8s.

helm install coreos/prometheus-operator --name prometheus-operator --namespace monitoring

Installer les kubes

Les Kubes sont des pods qui vont se poser sur nos différents nodes et sur le master afin de remonter les metrics. Ce sont, en gros, nos exporters.

helm install coreos/prometheus-operator --name prometheus-operator --namespace monitoring

Une fois ces quelques commandes exécutées, vous devriez voir ça :

dada@master:~/prometheus$ kubectl get pods -n monitoring -o wide
NAME                                                   READY   STATUS    RESTARTS   AGE   IP             NODE     NOMINATED NODE
alertmanager-kube-prometheus-0                         2/2     Running   0          37m   10.244.3.140   node3    <none>
kube-prometheus-exporter-kube-state-65b6dbf6b4-b52jl   2/2     Running   0          33m   10.244.3.141   node3    <none>
kube-prometheus-exporter-node-5tnsl                    1/1     Running   0          37m   192.168.0.76   node1    <none>
kube-prometheus-exporter-node-fd7pt                    1/1     Running   0          37m   192.168.0.49   node3    <none>
kube-prometheus-exporter-node-mfdj2                    1/1     Running   0          37m   192.168.0.22   node2    <none>
kube-prometheus-exporter-node-rg5q6                    1/1     Running   0          37m   192.168.0.23   master   <none>
kube-prometheus-grafana-6f6c894c5b-2d6h4               2/2     Running   0          37m   10.244.2.165   node2    <none>
prometheus-kube-prometheus-0                           3/3     Running   1          37m   10.244.1.187   node1    <none>
prometheus-operator-87779759-wkpfz                     1/1     Running   0          49m   10.244.1.185   node1    <none>

Notez que si vous êtes, comme moi, sur une connexion ADSL classique, vous aller avoir le temps d'aller faire couler un grand café et d'aller le boire une clope au bec et au soleil. Votre cluster va télécharger beaucoup de pods et sur chaque nœud.

En y regardant bien, on retrouve :

  • L'AlertManager permettant de nous spammer en cas de souci,
  • Les exporter nodes placés logiquement sur chaque node et sur notre master,
  • Grafana, le copain de Prometheus qui vous fait des beaux dessins,
  • Le kube et l'operator.

Accéder à tout ça

L'installation est vraiment triviale. Le petit bonus de ce billet sera de vous passer une liste de commandes pour admirer le tout dans votre navigateur préféré : Firefox.

Pour accéder à l'interface de Prometheus

Commencez par ouvrir un tunnel SSH sur le port 9090 vers votre master :

ssh -L 9090:127.0.0.1:9090 dada@IPDuMaster

Puis lancez le port-foward :

kubectl port-forward -n monitoring prometheus-kube-prometheus-0 9090

Pour accéder à l'interface de Grafana

Encore un tunnel SSH, sur le 3000 ce coup-ci :

ssh -L 3000:127.0.0.1:3000 dada@IPDuMaster

Et encore un port-forward :

kubectl port-forward $(kubectl get  pods --selector=app=kube-prometheus-grafana -n  monitoring --output=jsonpath="{.items..metadata.name}") -n monitoring  3000

Vous êtes bons ! Les dashboards sont maintenant accessibles en tapant http://localhost:PORT dans Firefox.

En image, ça devrait donner ça pour Grafana :

Et ça pour les alertes Prometheus :

Alors, oui. Vous avez aussi remarqué que des alertes étaient déjà levées ? Ce sont des outils/configurations que Prometheus attend de rencontrer dans votre cluster. Le mien n'a pas encore ces histoires de scheduler ou de controller manager. Ça va faire partie des découvertes à suivre dans les futurs billets.

Des bisous !