CérénIT

Cloud

Container et orchestration

  • APIServer dry-run and kubectl diff : Un des soucis majeurs avec Kubernetes est l’écriture de fichiers YAML où la moindre faute peut s’insérer très rapidement et à l’insu de son auteur. Le billet présente les efforts fait pour ajouter un mode “dry run” qui simule les modifications et retourne l’objet qui aurait du être créé. Dans la même veine, un kubectl diff montrera les différences entre la ressource existante et celle décrite dans la nouvelle version du fichier yaml.
  • 9 Kubernetes Security Best Practices Everyone Must Follow : rien de transcendental mais une petite piqure de rappel après la faille majeure découverte en fin d’année.
  • Kubernetes NodePort vs LoadBalancer vs Ingress? When should I use what? : billet synthétique sur les avantages et inconvénients d’utiliser un service de type ClusterIP, NodePort, LoadBalancer ou Ingress. Sachant que l’on peut combiner LoadBalancer & Ingress !.
  • Why Is Storage On Kubernetes So Hard? : Les données, c’est tout sauf stateless et le stockage distribué c’est pas facile non plus. Le billet revient sur les logiques de stockages sous Kubernetes (PV, PVC), la couche d’interface de stockage CSI et sur des solutions comme Ceph ou Rook.
  • Stateful Kubernetes with Saad Ali - Software Engineering Daily : une présentation globale des Volumes, Persistent Volume, Persistent Volume Claims et des StorageClass sous Kubernetes et de l’évolution de la gestion du stockage sous k8s
  • Kubernetes Podcast - #36 Rook : une présentation de Rook, un opérateur k8s de gestion de stockage (Ceph, NFS, etc).

Data

IDE

Infrastructure (as Code)

  • Tester son code d’infrastructure avec Terratest : le billet présente terratest, un outil en go qui permet de tester du code Terraform, des templates Packer ou encore des images Docker. La conclusion montre qu’il n’est pas parfait certes mais peut être intéressant.
  • Infrastructure as (real) code : Faire de l’IaC, ce n’est pas que rédiger des fichiers YAML. Le billet montre comment on pourrait avoir de l’IaC avec du vrai code (du go en l’occurence). Avoir un vrai langage et un moteur de template semble en effet plus complet que juste du YAML pour lequel les validateurs sont assez faibles et la probabilité d’écrire une faute assez importante.
  • Reactive planning is a cloud native pattern : Le reactive planning tiendrait dans l’idée que pour une action donnée, il va y avoir un plan et que ce plan est constitué d’une multitude de petites étapes. Chaque étape informant la/les précédentes et voire globalement sur l’état de l’étape en cours et peut décider des étapes suivantes.

Langages

  • Why you should use pyenv + Pipenv for your Python projects : Une solution propre pour mieux gérer ses versions de python installées sur son poste / sur un serveur avec pyenv et pipenv (mix de pip et virtualenv) pour gérer les dépendances. A tester !
  • Pipenv: promises a lot, delivers very little : le billet nuance les propos autour de pipenv comme le nouveau gestionnaire officiel (autopromu) et fait le point sur l’outil.
  • shiv : Shiv permet de packager des applications python en une seule archive zip avec toutes les dépendances incluses. Disponible pour Windows / Linux / OSX, il faut néanmoins builder sur l’OS Cible pour que cela fonctionne - pas de “build one, run everywhere”.

Logs

(No)SQL

Cloud

  • AWS Re:Invent 2018 : Difficle de passer à coté des annonces d’AWS - AWS re:Invent 2018 - Jour 1, AWS re:Invent 2018 - Jour 2, AWS re:Invent - Jour 3, AWS re:Invent - Jour 4 : le résumé des sorties de la conférence AWS re:Invent 2018 par le cabinet Ippon.
  • #9 - Quentin Adam - Horacio Gonzales - Steven Le-Roux - La guerre du cloud : dans cet épisoide du podcast databuzzword, il est question de guerre du cloud, du multi-cloud, d’AWS et de ses “partenariats” et du cloud chinois et russe.
  • Episode 63 : “Re-Invent le Cloud” : L’épisode 63 de BigDataHebdo s’intéresse aussi aux annonces de la conférence d’AWS et discute aussi d’AWS et du monde de l’opensource.
  • License Changes for Confluent Platform : la sortie de l’offre Kafka managé n’a pas plus à Confluent. A l’instar de Redis et MongoDB, c’est au tour de Confluent d’adopter une licence plus restrictive pour les fournisseurs de cloud dans le cadre de la distribution de sa platforme Confluent. La licence de Kafka est inchangé, cela concerne l’API Rest, la Schema REgistry, KSQL et des connecteurs confluent.
  • Copyleft and community licenses are not without merit, but they are a dead end : Paul Dix, le CTO D’InfluxData donne son avis sur les changements de licences en cours. Un point intéressant est que ce changement de license vers des licences de type “Community” va surtout pénaliser les développeurs en créant une incertitude autour du mode de collaboration/contribution et peuvent aussi chercher à créer un monopole pour les services SasS créés par l’éditeur du produit. Oui il est dommage qu’AWS par ex ne contribue pas à Kafka/Confluent dans le cadre de son offre managée, mais par la même occasion Confluent se crée un monopole de fait sur l’offre SaaS autour de KSQL. Est-ce vraiment mieux ? En ce sens, Paul préfère alors soit du tout open ou tout fermé - mais que la solution du milieu n’est pas si idéale que ça (surtout pour des couches basses des produits sur lequel nous sommes censés bâtir quelque chose).
  • We need Sustainable Free and Open Source Communities : Pour finir sur une note plus optimiste, l’auteur cherche à renverser la conversation en regardant comment créer des communautés soutenables et faire en sorte que la licence permette de soutenir la communauté. Pas sur que les libristes les plus convaincus n’y voient pas une atteinte aux libertés du logiciel justement : “Any commercial activity around the software must further the sustainability of the community, and the potential for commercial benefit must be available to all. The incentives in any commercial model must bend away from the creation of proprietary downstream software”

Container et orchestration

  • Introducing Traefik Enterprise Edition : le reverse proxy Traefik voit apparaitre une version Entreprise qui se veut plus distribuée avec l’apparition d’un “data plane” qui gère les connexions et joue le rôle de reverse proxy et un “control plane” qui coordonne le bon fonctionnement des noeuds.
  • CNCF to Host etcd : la base clé/valeur distribuée etcd et qui sert notamment de datastore pour kubernetes va être hébergé par la CNCF. Elle fut développée initiallement par CoreOS, désormais propriété de Red Hat (et donc IBM).
  • [Podcast] PodCTL – Kube Security, Kube 1.13 and KubeCon :
  • MetalLB : MetalLB propose de fournir un service de type load balancer prévu pour cluster Kubernetes dans un contexte bare metal (ie non cloud).
  • MetalLB, with David Anderson : Episode du Kubernetes Podcast sur MetalLB avec son auteur pour une présentation de la solution.

Dataviz

  • Grafana v5.4 Released : une version de consolidation avec des améliorations sur la temporisation des alertes avant de l’émettre. D’autres améliorations sur l’intégration Google Stackdriver, l’éditeur de requêtes MySQL et des améliorations sur les panels et des préférences d’équipes.

Langages

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.

Méthodologie

  • Infliger de l’aide : Quand une personne demande de l’aide et qu’on n’y met pas d’empathie, on peut alors lui infliger de l’aide - Je pense que je vais reprendre ce concept et l’appliquer.

Sécurité

Tests

Web

Windows

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.

Acquisition

Automatisation

  • Mitogen for Ansible : extension pour Ansible qui permettrait d’accélérer Ansible via une optimisation de la connexion à l’hôte distant. “Expect a 1.25x - 7x speedup and a CPU usage reduction of at least 2x, depending on network conditions, modules executed, and time already spent by targets on useful work. Mitogen cannot improve a module once it is executing, it can only ensure the module executes as quickly as possible.”
  • Molecule : molelcule est un framework pour Ansible permettant de tester les rôles/playbooks au travers de linter (syntaxe yaml, python, etc), mais aussi de réaliser des tests unitaires, de valider l’omnipotence d’une tâche, etc. A tester, mais vous ne devriez plus avoir de mauvaises surprises à l’exécution d’un playbook et ainsi mettre fin au cycle “run, break, fix” que l’on a trop souvent avec Ansible.
  • Ansible to adopt molecule and ansible-lint projects : les projets molecule et ansible-lint vont passer sous l’organisation Ansible sur Github et ont pour objectif d’accroitre la qualité des playbooks ansible. Cela fait apparamment partie aussi d’un objectif RedHat de péréniser les ressources liées au projet tout en étendant l’écosystème.
  • The release of Red Hat Ansible Engine 2.7 : Pas de révolution dans cette version, essentiellement des améliorations de perfomances/stabilité/connectivité. Il faudra une version python 2.7+ ou 3.5+ pour qu’Ansible fonctionne correctement.
  • Reboot Plugin for Linux in Ansible 2.7 : Avec l’arrivée de cette version 2.7 arrive également officiellement le module reboot. Il permet ainsi de piloter des playbooks pour lesquels un reboot est nécessaire (mise à jour de noyau, etc).
  • 12 Factor CLI Apps : le principe des 12 factors apps appliqué aux outils en ligne de commande. Il y a pas mal de bonnes idées (et donc de travail à faire) pour améliorer ses scripts.

(No)SQL

  • [RELEASE] Redis 5 is out! : l’annonce de la version 5.0 de la base Redis vient de sortir avec pas moins de 19 nouveautés listées. Si les Streams sont la principale nouveauté de cette version, de nombreuses améliorations ont été apportées à la base. La montée de version se veut compatilbe à 99%, il y a néanmoins quelques incompatibilités.
  • PostgreSQL 11 Released! : la version 11 de la base Postgres vient de sortir - ce que j’ai retenu de cette version majeure, c’est le support du catch-all dans le partitionning (si une donnée ne correspond à aucune clé de partitionnement, alors le catch-all récupère cette donnée) et la capacité à mettre à jour ces clés de partitionnement. D’autres nouveautés sont également intéressantes, je vous laisse le soin de les lire. Une traduction française de l’annonce est disponible sur le blog de Loxodata.

Sécurité

  • Around 62% of all Internet sites will run an unsupported PHP version in 10 weeks : Pour les sites développés en PHP, à compter de janvier 2019, il faudra être minimum en version de PHP 7.1 pour avoir les mises à jour de sécurité - le support de PHP 5.6 et 7.0 se finit à la fin de l’année.
  • Extended Validation Certificates are Dead : le bandeau avec l’intitulé de l’organisme propriétaire du certificat est en train de disaparaitre des navigateurs. Il ne sert donc plus à rien d’en acheter un.
  • Removing Old Versions of TLS : TLS 1.0 et 1.1 ne seront plus supportés en mars 2020 dans les navigateurs. Dès aujourd’hui, ces deux versions ne représentant que ~1% du traffic observé par les navigateurs, il peut être judicieux de n’utiliser que du TLS 1.2+ et voir s’il n’y a pas quelques vieux programmes à mettre à jour d’ici là…
  • Announcing the HashiCorp Learn Platform for HashiCorp Vault : pour ceux qui veulent se faire la main sur Vault et mieux gérer leurs secrets applicatifs, Hashicorp vient de lancer une plateforme gratuite et avec des contenus sous licence libre (un dépot sera prochainement mis à disposition) pour se former à leur outil Vault.
  • Firefox 63 Lets Users Block Tracking Cookies - Firefox va incorporer un mécanisme expérimental de gestion des cookies pour limiter le pistage inter sites. A activer selon vos préférences.

Container & Orchestration

  • Core Workloads API GA : la version 1.9 de Kubernetes sortie tout début janvier marque un tourant intéressant avec le passage en stable des “Core Workload API” (Pod, ReplicationController, ReplicaSet, Deployment, DaemonSet, and StatefulSet). Avec cette stabilisation des termes, des concepts et des API, c’est le socle de Kubernetes qui se stabilise sérieusement. Une bonne raison de plus de creuser cette solution au fur et à mesure que l’écosystème va se stabiliser et se simplifier.
  • The Twelve-Factors Kubernetes : Revue de la terminilogie et des concepts de Kubernetes au travers de 12 points et énonciation de quelques bonnes pratiques générales associées.
  • Traefik 1.5 - Cancoilote Is Here : cette version corrige notamment le problème de méthode de génération de certificat de Let’s Encrypt (voir plus bas). En plus de celà, cette version apporte notamment une gestion dynamique des certificats par frontend/backend et de la qualité de service avec la possibilité de définir des limites de consommation de ressources.
  • Container Structure Tests: Unit Tests for Docker Images : Google vient de sortir son framework de tests unitaires pour les containers Docker. A creuser pour voir s’il n’est possible de faire que de tests de “surface” ou bien si on peut aller plus en profondeur (mais est-ce souhaitable ?)
  • CoreOS to join Red Hat to deliver automated operations to all : CoreOS rejoint la galaxie RedHat qui fait son retour dans le monde des conteneurs… après Openshift (qui s’appuie sur Docker + Kubernetes), voilà qu’ils mettent la main sur CoreOS + Tectonic (la version de Kubernetes packagée par CoreOS), ainsi que les autres projets CoreOS (etcd, etc). Ils vont pouvoir proposer un sacré vertical et revenir dans la cour des acteurs majeurs du conteneur ; sans parler du fait qu’ils ont aussi Ansible pour la partie automatisation…

Infrastructure

  • Le Bastion SSH : Petite revue théorique et pratique d’un bastion SSH, la passerelle SSH qui vous permet d’accéder depuis un réseau X à des machines d’un réseau Y en SSH dans exposer tout le réseau Y en libre accès ou parce que le réseau Y n’a pas d’IP publique ou … Si vous prévoyer de déployer un bastion, prévoyez d’en avoir deux pour éviter le SPOF (ou qu’il soit redéployable très rapidement).
  • PHP et les résolveurs DNS : à l’heure des micro-services et des API, une mauvaise couche réseau et votre application peut très mal se comporter. L’article porte ici sur la résolution DNS et les solutions de cache possible pour que votre application soit plus résiliente.

(No)SQL

  • Moving from MySQL to MariaDB in Debian 9 : je me demandais pourquoi je perdais mon accès au compte root d’une instance MariaDB suite à un mysql_secure_installation, voici enfin la réponse. Sur les nouvelles installations, l’accès au compte root de mariadb est protégé. Il faut passer par sudo mysql -u root -p ... par ex pour pouvoir se connecter en root.
  • How to Install MariaDB on Debian 9 Stretch : l’article qui m’a mis sur la piste et qui donne éventuellement une solution de contournement pour reproduire l’ancien mécanisme (à vos risques et périls).
  • An update on Redis Streams development : les Streams dans Redis, ce sera pour la version 5.0 prévue pour dans 2 mois. Pour rappel, les Streams, ce sont des listes Redis + PubSub + historique. C’est une réponse de Redis sur la partie Topic/Message de Kafka.

Certificats

  • Let’s Encrypt a annoncé le 10 janvier avoir identifié une “faille” lors de la génération du certificat lié à l’utilisation de Let’s Encrypt dans un environnement mutualisé via la méthode TLS-SNI. Avec le partage d’une même IP, il serait possible pour une personne malveillante de récupérer un certificat pour votre domaine à votre insu. Let’s Encrypt a finalement décidé de désactiver complètement les méthodes TLS-SNI-001 et TLS-SNI-002 et de travailler sur une nouvelle méthode TLS-SNI-003 qui corrigerait ce problème. En attendant, il faut utiliser les méthodes HTTP-01 ou DNS-01.

Astuce(s) du mois

La commande docker history (ou docker image history) permet de voir le nombre de layers d’une image, la taille de ces layers et leur âge. Exemple avec l’image nginx:stable :

docker image history nginx:stable
IMAGE               CREATED             CREATED BY                                      SIZE                COMMENT
dfe062ee1dc8        6 weeks ago         /bin/sh -c #(nop)  CMD ["nginx" "-g" "daemon…   0B
<missing>           6 weeks ago         /bin/sh -c #(nop)  STOPSIGNAL [SIGTERM]         0B
<missing>           6 weeks ago         /bin/sh -c #(nop)  EXPOSE 80/tcp                0B
<missing>           6 weeks ago         /bin/sh -c ln -sf /dev/stdout /var/log/nginx…   22B
<missing>           6 weeks ago         /bin/sh -c set -x  && apt-get update  && apt…   53.1MB
<missing>           6 weeks ago         /bin/sh -c #(nop)  ENV NJS_VERSION=1.12.2.0.…   0B
<missing>           6 weeks ago         /bin/sh -c #(nop)  ENV NGINX_VERSION=1.12.2-…   0B
<missing>           6 weeks ago         /bin/sh -c #(nop)  LABEL maintainer=NGINX Do…   0B
<missing>           6 weeks ago         /bin/sh -c #(nop)  CMD ["bash"]                 0B
<missing>           6 weeks ago         /bin/sh -c #(nop) ADD file:f30a8b5b7cdc9ba33…   55.3MB

Pour avoir l’intégralité du contenu de la ligne “CREATED BY”, il suffit de rajouter un --no-trunc.

Source : Docker - history

C’est assez pratique lorsque l’on cherche notamment à comprendre et optimiser la taille de ses images Docker.

Agile

  • Feature Branching is evil ! : si la branche isole le nouveau code, il isole aussi le développeur des autres avancées et repousse à plus tard les problématiques de réintégration de code, refactoring, etc. L’auteur avance le feature flipping et le “trunk based development” pour avoir une intégration continue perpétuelle et des écarts les plus petits possibles.

DevOps

  • Terraform Layering : Pourquoi et comment ? : Un fichier Terraform peut vite devenir illisible dans le cas d’une architecture complexe et consommateur de temps lors de son exécution. Le billet présente une méthode pour traiter ces problèmes. Il s’agit de créer des “couches” (layers) permettant d’avoir plus de modularité et permettant qu’un fichier terraform s’appuie en entrée sur les données de sorties du fichier précédent et ainsi de suite.

Elastic

  • Welcome Opbeat to the Elastic family : Elastic se lance sur le marché de la performance applicative (APM) en acquérant la société Opbeat. Suite assez logique pour Elastic après l’ingestion de données plus orientée monitoring système avec Logstash/Beat ou des intégrations spécifiques pour faire de l’APM en s’appuyant sur Elastic.
  • Designing the Perfect Elasticsearch Cluster: the (almost) Definitive Guide : le billet traite le design d’un cluster Elasticsearch et les points d’attention à avoir. Ce n’est pas la recette magique (elle n’existe pas) mais donne tous les points d’attention à avoir dans le cadre du déploiement d’un cluster Elasticsearch.
  • Top 15 Solr vs. Elasticsearch Differences : pour ceux qui hésitent encore entre les 2 solutions, une petite revue en 15 poins pouvant vous aider à choisir la solution correspondant à votre besoin.

Infrastructure

  • Serverless vs Micro-Service avec infrastructure “maison” : comparaison de la mise en place d’une infrastructure à base de micro-services vs une infrastructure “serverless” avec prise en compte des effets de vendor lock-in, impacts entre infrastructure et architecture logicielle, facilité de dépoiement, flexibilité, etc.

MySQL

Sécurité

Tests

  • k6 : un outil en Go et Javascript permettant de faire des tests de performance. Sa prise en main a l’air aisé et il semble avoir des fonctionnalités assez intéressantes pour faire des tests variés que ce soit sur la profondeur du scénario (1 ou plusieurs urls) ou les niveau de tests (checks, ratio, etc)

TICK (Telegraf, InfluxDB, Chronograf, Kapacitor)

Bonus : Lecture de l’été

  • #hyperlean – Ce que signifie l’avènement du numérique : je n’ai pas encore lu le livre mais je suis le blog de Cecil depuis des années et ses aventures dans le monde de l’agile, du lean, de l’entreprise collaborative et de la transformation digitale. Son livre se veut un guide pratique de la transformation digitale en abordant le pourquoi, le quoi et le comment. Dans le comment, on va retrouver forcément la méthode lean.

Container & Orchestration

  • Kubernetes 1.6: Multi-user, Multi-workloads at Scale : à l’occasion de KubeCon à Berlin, sortie d’une nouvelle version de Kubernetes avec son lot de nouveautés, de nouvelles fonctionnalités et de fonctionnalités qui évolue de alpha > beta > stable en fonction de leurs maturités respectives. 4 grands axes d’amélioration : scaling avec le support jusqu’à 5.000 noeuds / 150.000 pods est supporté via la fédération de clusters, sécurité avec la mise en place de RBAC (Role Based Access Control) et amélioration de kubeadm pour initialiser votre cluster, scheduling amélioré pour mieux gérer la distribution des workloads sur votre cluster et enfin le provisionning dynamique du stockage pour simplifier la vie et la gestion du stockage par une allocation à la demande.

DevOps

HTML5

  • Practical CSS Grid: Adding Grid to an Existing Design : la dernière nouveauté CSS, c’est la grille. Une fois cette grille définie, on peut y positionner les éléments de son choix. L’article permet de voir un cas pratique de mise en place de cette grille dans le cadre de la refonte d’un blog. On y voit aussi les quelques limitations et soucis que l’on peut actuellement rencontrer avec ce nouveau système disponible dans tous les navigateurs ou presque depuis Mars 2017.

Javascript

Kafka

  • Kafka Streams 101 : un article simple et pédagogique sur Kafka Streams, la librairie Java qui permet de consommer ou de produire des messages dans un topic kafka.

MySQL

Postgres

Python

Le Blog

Nous partageons ici notre veille et nos réflexions

Nuage de tags

docker kubernetes elasticsearch kafka postgres traefik ansible grafana python aws influxdb tick mysql sécurité cloud ovh redis timeseries chronograf swarm test cassandra hashicorp log microservice serverless spark terraform angularjs cncf confluent container graphql javascript ksql opensource rancher service-mesh stream timescaledb windows api architecture arm csp devops dns docker-compose documentation elastic git helm hpkp iac ingress java kapacitor kibana lambda lean licence machine-learning microsoft monitoring nginx npm orientdb prometheus rest rethinkdb reverse-proxy rook sql ssh telegraf agile apm azure bash big-data bilan cert-manager certificat cli cluster continous-delivery continous-integration cookie cérénit fluxlang gcp gdpr grav hsts https hypriot istio json kafka-streams kubedb lets-encrypt linux load-balancer mobile mongodb perspective php pip ptsm redhat replication rpi rsyslog s3 scale scaleway schema secrets solr sre systemd vault virtualenv vue.js wagtail warp10 yarn accessibilité akka alerte alibaba amazon-emr anonymisation anthos ara automatisation bastion beam beat bounded-context branche brigade browser buildkit cd cdc ceph certificats checklist chrome ci cloud-init cloud-native cloud-storage clusterip cockroachdb code codeurs-en-seine confluence consul containerd continous-deployment coreos cors cqrs crash cron crontab csrf css curl d3.js daemonset dashboard data-pipelining data.gouv.fr datacenter dataviz date ddd debezium debian deployment desktop devoxx diff distributed-systems dive docker-app docker-registry documentdb dokcer draft drop-in déploiement ebs ec2 edge elassandra electron elk engineering etcd event-sourcing facebook falcor feature-policy feed filebeat firebase firefox fish flash flask fleet flink fluentd flux foundation framework frontend fsync fullstack github gitlab gke glacier glowroot google google-cloud-next gpu grid géospatial hacker hadoop haproxy hdfs header html html5 http http/3 hue ia iaac ibm immutable incident index influxace influxcloud influxdata influxdays infrastructure-as-code ingénierie inspec jq jquery jwt k3d k3s k8s k9s kubeadm kubecon kubectl laravel liste-de-diffusion loadbalancer logstash logstatsh loi maesh mailing-list management mariadb meetup message metallb micro-service molecule mot-de-passe multi-cloud médecine newsletter nodeport nomad nosql null opendata openebs openmetrics openshit openssh openweb operator over-engineering packaging pandas partiql password percona performance persistent-volume-claim pipenv portainer prescience publicité push pyenv quasardb queue quic ram rambleed raml react reaper recaptcha recherche reindex reinvent reliability responsive revocation revue-de-code rkt rolespec root rpo rto runc rwd résilience search select serverless-architecture service-worker sha1 sharding shell shipyard société souveraineté-numérique spinnaker sri ssh-agent ssl statistique superset sympa syslog-ng test-unitaire tidb tiers timer timezone tls training travail ubuntu unikernel unit ux vendredi vie-privée virtualbox virtualisation vitess vm vnc volume voxxeddays vpc vscode yubikey

Syndication

Atom