29 juillet 2019

Kubernetes, aussi puissant que difficile.

Qu'est-ce que Kubernetes ? Une brève introduction.

Bannière Kubernetes

Kubernetes a vraisemblablement gagné la guerre des conteneurs. Cependant, Kubernetes est toujours difficile et cause beaucoup de douleur.

Je pense que je devrais donner une petite préface à cet article. Kubernetes est le nouveau runtime pour de nombreuses applications, et lorsqu'il est utilisé correctement, il peut être un outil puissant pour éliminer la complexité de votre cycle de vie de développement. Cependant, ces dernières années, j'ai vu de nombreuses personnes et entreprises trébucher sur le désir de gérer leur propre installation. Il reste souvent en phase expérimentale et n'entre jamais en production.

Comment fonctionne Kubernetes ?

En grande partie, Kubernetes ou K8 semblent être très simples. Les nœuds (machines) sur lesquels Kubernetes s'exécute sont divisés en (au moins) deux types : le maître et les travailleurs. Le ou les maîtres, par défaut, n'effectuent aucune charge de travail réelle, c'est le travail des ouvriers. Le maître Kubernetes comprend un composant appelé serveur d'API qui fournit une API à laquelle vous pouvez parler à l'aide de kubectl. Il comprend également un planificateur, qui décide quel conteneur doit s'exécuter où (conteneurs de planification). Le dernier composant est le contrôleur-gestionnaire, qui est en fait un ensemble de plusieurs contrôleurs chargés de gérer les pannes de nœuds, de gérer les réplicas, de fusionner les services et les pods (ensembles de conteneurs), et enfin de gérer les comptes de service et les jetons d'accès aux API. Toutes les données sont stockées dans etcd, qui est une base de données de valeurs clés très cohérente (avec des fonctionnalités vraiment intéressantes). Donc, pour résumer, le maître est responsable de la gestion du cluster. Pas étonnant. Le travailleur, quant à lui, gère les charges de travail réelles. A cet effet, il comprend, encore une fois, un certain nombre de composants. Tout d'abord, il exécute le kubelet, qui est à nouveau une API qui fonctionne avec des conteneurs sur ce nœud. Il existe également le kube-proxy, qui transfère les connexions réseau, containerd pour exécuter le conteneur, et selon la configuration, il peut y avoir d'autres choses comme kube-dns ou gVisor. Vous aurez également besoin d'une sorte de réseau de superposition ou d'intégration avec votre configuration réseau sous-jacente afin que Kubernetes puisse gérer le réseau entre vos pods.

Kubernetes prêt pour la production

Cela, jusqu'à présent, ne sonne pas trop mal. Installez quelques programmes, configurations, certificats, etc. Ne vous méprenez pas, c'est toujours une courbe d'apprentissage, mais ce n'est rien qu'un administrateur système moyen n'ait pas traité dans le passé. Cependant, la simple installation manuelle de Kubernetes n'est pas exactement prête pour la production, alors parlons des étapes nécessaires à la mise en place de cette chose. Tout d'abord, l'installation.

Vous voulez vraiment avoir une sorte d'installation automatisée. Peu importe qu'il s'agisse d'Ansible, Terraform ou d'autres outils, vous voulez qu'il soit automatisé. kops, par exemple, aide à cela, mais l'utilisation de kops signifie que vous ne savez pas exactement comment il est configuré et peut causer des problèmes lorsque vous souhaitez déboguer quelque chose plus tard. Cette automatisation doit être testée et testée régulièrement. Ensuite, vous devez surveiller l'installation de Kubernetes. Donc tout de suite, vous avez besoin de quelque chose comme Prometheus, Grafana, etc. L'exécutez-vous dans votre Kubernetes ? Si votre Kubernetes a un problème, votre surveillance est-elle interrompue ? Ou le gérez-vous séparément ? Si oui, alors où le gérez-vous ?

A noter également les sauvegardes.

Que ferez-vous si votre maître plante, si les données sont irrécupérables et si vous devez restaurer tous les pods du système ? Avez-vous testé combien de temps il faut pour exécuter à nouveau toutes les tâches de votre système ? Avez-vous un plan de reprise après sinistre ? Maintenant, puisque nous parlons du système CI, nous devons exécuter un registre Docker pour les images. Ceci, bien sûr, peut être refait dans Kubernetes, mais si Kubernetes plante. Le système CI est évidemment aussi un problème, tout comme le système de contrôle de version. Idéalement, isolé de votre environnement de production afin que si ce système a un problème, vous puissiez au moins accéder à votre git, le redéployer, etc.

Stockage de données

Parlons de l'éléphant dans la salle : la mémorisation. Kubernetes en soi ne fournit pas de solution de stockage. Bien sûr, il est possible de monter un dossier depuis la machine hôte, mais ce n'est ni recommandé ni simple. Rok, par exemple, rend relativement facile l'utilisation de Ceph comme mémoire de bloc sous-jacente pour vos besoins de stockage de données, mais mon expérience avec Ceph est qu'il a beaucoup de valeurs et de configurations qui doivent être ajustées, donc vous n'êtes pas absent de la question du tout, de la difficulté à simplement passer à l'étape suivante.

Débogage

Lorsque l'on parlait de Kubernetes avec les développeurs, un schéma courant s'est présenté assez régulièrement : lorsqu'ils utilisaient un Kubernetes géré, les gens avaient du mal à déboguer leurs applications. Même des problèmes simples, tels qu'un conteneur qui ne démarre pas, ont causé de la confusion. Ceci, bien sûr, est un problème d'éducation. Au cours des dernières décennies, les développeurs ont appris à déboguer des configurations « classiques » : lecture des fichiers journaux dans /var/log, etc. mais avec les conteneurs, nous ne savons même pas sur quel serveur le conteneur s'exécute, ce qui représente un changement de paradigme.

Le problème de la complexité

Vous avez peut-être remarqué que j'ignore ce que les fournisseurs de cloud vous offrent, même s'il ne s'agit pas d'un Kubernetes entièrement géré. Bien sûr, si vous utilisez une solution gérée par Kubernetes, c'est très bien et vous n'avez pas à vous soucier de tout cela, à l'exception du débogage. Kubernetes a beaucoup de pièces mobiles, et Kubernetes à lui seul ne fournit pas une pile complète de solutions. RedHat OpenShift, par exemple, fait cela, mais cela coûte et vous devez toujours ajouter des choses vous-même. À l'heure actuelle, Kubernetes est sur la colline du cycle de battage médiatique de Gartner, tout le monde le veut, mais peu le comprennent vraiment. Dans les prochaines années, plusieurs entreprises devront se rendre compte que Kubernetes n'est pas la solution à tous les maux et comprendre comment l'utiliser correctement et efficacement.

Je pense que faire fonctionner votre Kubernetes ne vaut la peine que si vous pouvez vous permettre de dédier une équipe d'exploitation à la question de la maintenance de la plate-forme sous-jacente pour vos développeurs.

Vous avez des doutes ? Vous ne savez pas par où commencer ? Contactez-nous !

Nous avons toutes les réponses à vos questions pour vous aider à faire le bon choix.

Discute avec nous

Discutez directement avec notre support avant-vente.

0256569681

Contactez-nous par téléphone pendant les heures de bureau 9h30 - 19h30

Contactez-nous en ligne

Ouvrez une demande directement dans l'espace contact.

INFORMATIONS

Managed Server Srl est un acteur italien leader dans la fourniture de solutions système GNU/Linux avancées orientées vers la haute performance. Avec un modèle d'abonnement peu coûteux et prévisible, nous garantissons que nos clients ont accès à des technologies avancées en matière d'hébergement, de serveurs dédiés et de services cloud. En plus de cela, nous proposons des conseils système sur les systèmes Linux et une maintenance spécialisée en SGBD, sécurité informatique, Cloud et bien plus encore. Nous nous distinguons par notre expertise dans l'hébergement de CMS Open Source de premier plan tels que WordPress, WooCommerce, Drupal, Prestashop, Joomla, OpenCart et Magento, soutenus par un service d'assistance et de conseil de haut niveau adapté aux administrations publiques, aux PME et à toutes tailles.

Red Hat, Inc. détient les droits de Red Hat®, RHEL®, RedHat Linux® et CentOS® ; AlmaLinux™ est une marque commerciale d'AlmaLinux OS Foundation ; Rocky Linux® est une marque déposée de la Rocky Linux Foundation ; SUSE® est une marque déposée de SUSE LLC ; Canonical Ltd. détient les droits sur Ubuntu® ; Software in the Public Interest, Inc. détient les droits sur Debian® ; Linus Torvalds détient les droits sur Linux® ; FreeBSD® est une marque déposée de la FreeBSD Foundation ; NetBSD® est une marque déposée de la Fondation NetBSD ; OpenBSD® est une marque déposée de Theo de Raadt. Oracle Corporation détient les droits sur Oracle®, MySQL® et MyRocks® ; Percona® est une marque déposée de Percona LLC ; MariaDB® est une marque déposée de MariaDB Corporation Ab ; REDIS® est une marque déposée de Redis Labs Ltd. F5 Networks, Inc. détient les droits sur NGINX® et NGINX Plus® ; Varnish® est une marque déposée de Varnish Software AB. Adobe Inc. détient les droits sur Magento® ; PrestaShop® est une marque déposée de PrestaShop SA ; OpenCart® est une marque déposée d'OpenCart Limited. Automattic Inc. détient les droits sur WordPress®, WooCommerce® et JetPack® ; Open Source Matters, Inc. détient les droits sur Joomla® ; Dries Buytaert détient les droits sur Drupal®. Amazon Web Services, Inc. détient les droits sur AWS® ; Google LLC détient les droits sur Google Cloud™ et Chrome™ ; Facebook, Inc. détient les droits sur Facebook® ; Microsoft Corporation détient les droits sur Microsoft®, Azure® et Internet Explorer® ; La Fondation Mozilla détient les droits sur Firefox®. Apache® est une marque déposée de The Apache Software Foundation ; PHP® est une marque déposée du groupe PHP. CloudFlare® est une marque déposée de Cloudflare, Inc. ; NETSCOUT® est une marque déposée de NETSCOUT Systems Inc. ; ElasticSearch®, LogStash® et Kibana® sont des marques déposées d'Elastic NV. Ce site n'est affilié, sponsorisé ou autrement associé à aucune des entités mentionnées ci-dessus et ne représente aucune de ces entités de quelque manière que ce soit. Tous les droits sur les marques et noms de produits mentionnés sont la propriété de leurs titulaires respectifs des droits d'auteur. Toutes les autres marques mentionnées appartiennent à leurs titulaires. MANAGED SERVER® est une marque déposée au niveau européen par MANAGED SERVER SRL Via Enzo Ferrari, 9 62012 Civitanova Marche (MC) Italie.

Retour en haut de page