Accueil
Le blog tech de Nicolas Steinmetz (Time Series, IoT, Web, Ops, Data)
monitor.stateChanges()
et monitor.stateChangesOnly()
.Si vous êtes en manque de news, vous pouvez aller consulter (et vous abonner) aux brèves du BigData Hebdo
Surveillez le Time Series Paris Meetup, car la première édition du Meetup sera annoncée mardi avec une présentation des usages avancées des séries temporelles avec Warp10 (comprendre au-delà du monitoring classique) et une présentation par les équipes OVH sur du monitoring de datacenter aidé par du machine learning et leur offre Préscience.
git checkout
par git switch
et git restore
pour mieux encadrer les usagesDeux petites annonces pour démarrer cette édition :
Dans les bonnes pratiques Docker, il est dit d'utliser stdout/stderr pour avoir les logs de votre conteneur via docker logs. Toutefois, cette pratique va alimenter un fichier de log /var/lib/docker/containers/<container id>/<conteiner id>-json.log
. Ce fichier peut donc saturer votre disque et aller jusqu'à corrompre vos conteneurs. L'autre bonne pratique étant que tout fichier de log doit avoir une politique de rotation du fichier associée pour éviter toute saturation de disque ou d'avoir des trop gros fichiers de logs.
Docker permet de configurer le driver de logs au niveau du démon (via /etc/docker/daemon.json
), en argument lors d'un docker run
ou dans docker-compose.yml
.
Si l'on reste sur le driver json-file et que l'on veut piloter la rotation des logs au niveau de docker-compose.yml
, cela donne par ex (version simplifiée) :
version: '3'
services:
service_xxx:
image: docker_image_xxx
[...]
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "10"
Vous pouvez alors définir une stratégie de rotation des logs par container si vous le souhaitez. Ainsi, vous gérer la taille maximale de logs qui vont être générés et êtes ainsi assurés de ne pas avoir de mauvaises surprises à ce niveau là.
fsync()
, l'astuce consiste ici à désactiver fsync()
et/ou à mettre le dossier des données de votre base en RAM pour accélérer les temps de déroiulement de tests. Testé chez un client, c'est un gain d'au moins 20s qui a été constaté sur une opération de quelques minutes (< 5).kubectl diff
montrera les différences entre la ressource existante et celle décrite dans la nouvelle version du fichier yaml.J'ai eu le plaisir et l'opportunité de participer à la réalisation de l'épisode 10 de Dev'Obs, le magazine du DevOps, pendant lequel nous avons parlé de formation, d'innovation et des tests dans la mouvance Infrastructure As Code.
*.domaine.fr
). Si je m'étais réjoui de l'idée au début, je ne vois finalement pas ou peu l'intérêt du fait de la méthode de validation (enregistrement DNS avec le temps de propagation associé). En dehors du cas où l'on dépassait les limites d'enregistrement de Let's Encrypt en terme de nombre de certificats, la génération dynmique et unitaire via une méthode HTTP me semble plus simple. Surtout quand on utilise Traefik ;-)J'utilise Ansible dans une logique d'IAC et pour automatiser un maximum des actions pour la gestion de l'infrastructure et des applications de mes clients. Toutefois, chaque client avait son arborescence et la réutilisation d'un composant d'un client à l'autre était fastidieuse (copier/coller).
Un premier travail a consisté à extraire les rôles commun dans un dépôt git tiers et faire des liens symboliques mais cela n'était pas très pratique. Suite à un travail chez un autre client, j'ai revu mon approche et je pars pour le moment sur la solution suivante :
<composant>.<client>
ou <client>.<composant>
(le choix n'est pas encore arrêté). Le second répertoire contenant les éléments spécifiques au client.Exemple avec un rôle MariaDB :
mariadb/
├── README.md
├── defaults
│ └── main.yml
├── files
├── handlers
│ └── main.yml
├── meta
├── tasks
│ └── main.yml
├── templates
│ └── my.cnf.j2
└── vars
└── main.yml
co.mariadb/
├── README.md
├── handlers
│ └── main.yml
├── tasks
│ └── main.yml
├── templates
│ ├── my-primary.cnf.j2
│ └── my-replica.cnf.j2
Ainsi, la partie générique et la partie spécifique à mon client sont isolées. Il faut juste envisager le séquencement entre les deux rôles pour que cela se passe bien. Pour le moment, le seul code dupliqué se retrouve au niveau des handlers.
Si je devais donner accès à mes clients à leurs playbooks respectifs, il faudrait que je revois l'organisation pour ne leur donner accès qu'à leurs données. Il faudrait alors recréeer n dépots mais avec cette méthode, il est aussi facile de reconstruire a posteriori des dépots par clients depuis un dépot global. L'intérêt étant pour moi de conserver ma flexibilité et d'améliorer la réutilisabilité de mes composants.
Il ne me reste plus qu'à vous souhaiter de bonnes fêtes de fin d'année et à vous retrouver l'année prochaine pour de nouvelles aventures.