Guide critique de Kubernetes
- Kubernetes a acquis, chez certains techniciens, la réputation d’être inutilement complexe et une perte de temps, et son utilisation par de petites équipes est considérée comme une forme de sur-ingénierie.
- Chez Jamsocket, après plusieurs années d’exploitation de Kubernetes en production, une manière efficace de l’utiliser a été trouvée : n’employer que les fonctionnalités nécessaires et ignorer le reste.
Pourquoi utiliser Kubernetes
- Kubernetes est la voie la plus éprouvée lorsque l’on veut simultanément les trois choses suivantes :
- exécuter plusieurs processus/serveurs/tâches planifiées ;
- les exécuter avec redondance et répartir la charge ;
- configurer leur paramétrage et leurs relations mutuelles sous forme de code.
- Kubernetes est une couche d’abstraction qui permet de traiter un pool d’ordinateurs comme un seul ordinateur sans tête (
headless).
- Jamsocket déploie plusieurs fois par jour, et comme un problème sur son produit affecte aussi celui de ses clients, les déploiements progressifs lui donnent la confiance nécessaire pour déployer souvent.
Comment Jamsocket utilise Kubernetes
- Jamsocket est un service qui crée des processus dynamiques capables de communiquer avec une application web, similaire à AWS Lambda, mais dont la durée de vie dépend d’une connexion WebSocket plutôt que d’un simple cycle requête/réponse.
- Kubernetes est utilisé pour faire tourner des processus de longue durée comme le serveur d’API, le registre de conteneurs, les contrôleurs, les collecteurs de logs, certains services DNS et la collecte de métriques.
- Ce qui n’utilise pas Kubernetes : les processus éphémères, les sites statiques/marketing, et les éléments qui stockent directement des données.
- Google Kubernetes Engine est utilisé pour déléguer la gestion de Kubernetes à un service externe, et une migration vers Amazon EKS reste relativement simple si nécessaire.
Ressources Kubernetes utilisées activement
- Deployments : la plupart des pods sont créés via des déploiements.
- Services : utilisation de
ClusterIP pour les services internes et de LoadBalancer pour les services externes.
- CronJobs : utilisés pour les scripts de nettoyage, entre autres.
- ConfigMaps et Secrets : utilisés pour transmettre des données aux ressources ci-dessus.
Éléments utilisés avec prudence
StatefulSet et PersistentVolumeClaim sont utilisés, mais les données importantes sont de préférence stockées dans des services managés en dehors de Kubernetes.
- Le RBAC est évité autant que possible car il ajoute de la complexité.
Éléments activement évités
- Écrire du YAML à la main : les définitions de ressources Kubernetes sont générées avec TypeScript et Pulumi.
- Ressources non standard et operators : ils permettent à des logiciels tiers d’utiliser l’infrastructure de Kubernetes, mais sont en pratique difficiles à utiliser.
- Helm : non utilisé à cause des operators et des conventions YAML.
- Tout ce qui contient "mesh" dans son nom : jugé inutile.
- Ressources Ingress : évitées pour ne pas ajouter une couche d’indirection inutile.
- Reproduire toute la stack k8s en local : seules les parties nécessaires du système sont lancées avec Docker Compose ou des scripts maison.
Les humains ne devraient pas attendre un Pod
- Kubernetes a été conçu en privilégiant la robustesse et la modularité plutôt que le temps de démarrage des conteneurs, et il n’est donc pas adapté aux cas où un humain attend le démarrage d’un Pod.
- Jamsocket utilise Plane, un orchestrateur Rust sous licence MIT, pour planifier et exécuter rapidement des processus destinés à des charges de travail interactives.
Abstractions de plus haut niveau
- Certaines alternatives à Kubernetes sont excellentes, en particulier lorsqu’il n’est pas nécessaire de décrire l’infrastructure sous forme de code.
- Il est aussi possible d’opter pour d’autres solutions à la place de Kubernetes, comme Railway, Render ou Flight Control.
- Si l’approche de Kubernetes est gérée de manière méthodique, personne ne pourra dire qu’il est adopté trop tôt.
Avis de GN⁺
- Kubernetes est un outil puissant pour la gestion de la complexité et l’automatisation, en particulier dans les systèmes à grande échelle, mais cette complexité peut représenter un fardeau pour les petits projets ou les startups.
- Cet article montre comment éviter une complexité excessive lors de l’usage de Kubernetes, afin d’aider les débutants ou les petites équipes à en tirer parti.
- Avant d’utiliser Kubernetes, il faut évaluer avec soin les fonctionnalités réellement nécessaires, les capacités techniques de l’équipe, ainsi que le rapport entre les bénéfices obtenus, la complexité de gestion et les coûts.
- À la place de Kubernetes, il peut être préférable d’utiliser des services plus simples et plus faciles à administrer. Par exemple : Docker Swarm, Apache Mesos ou Nomad, chacun avec ses avantages et ses inconvénients.
- Lors de l’adoption de Kubernetes, il faut prendre en compte l’intégration avec l’infrastructure existante, la sécurité, les coûts d’administration et la courbe d’apprentissage.
- Les bénéfices apportés par Kubernetes incluent la scalabilité, la haute disponibilité et une expérience de déploiement cohérente dans divers environnements cloud. Mais cela suppose de bien comprendre la gestion des ressources et l’orchestration nécessaires.
1 commentaires
Avis Hacker News
Résumé du premier commentaire :
Résumé du deuxième commentaire :
kubectl explain Xest jugé bien meilleur que la documentation AWS.Résumé du troisième commentaire :
Résumé du quatrième commentaire :
Résumé du cinquième commentaire :
Résumé du sixième commentaire :
Résumé du septième commentaire :
Résumé du huitième commentaire :
Résumé du neuvième commentaire :
Résumé du dixième commentaire :