Solution de stockage Kubernetes avec Portworx

Introduction au stockage Kubernetes


Comme vous le savez certainement Kubernetes est une plateforme d'orchestration de conteneurs gratuite et open source. Elle vous permet de gérer les environnements conteneurisés et fournit des fonctionnalités telles que l'auto-réparation, le déploiement, les rollbacks, le scaling et le packaging!


Le stockage n'est peut-être pas votre principale préoccupation si vous exécutez des charges de travail stateless ou si vous débutez avec Kubernetes, mais ce sera l'un des défis que vous devrez relever le jour où vous exécuterez des applications statefulls.


En outre, si vous envisagez de configurer des clusters sur plusieurs datacenters, d’effectuer des sauvegardes, de la haute disponibilité, d'utiliser différents types de stockage, ou de chiffrer vos données… Vous devrez rechercher une solution adaptée à vos besoins…


Types de stockage


Avant de présenter Portworx, il est important de passer rapidement en revue les différents types de stockage sur lesquels nous pouvons nous reposer. En effet, la première étape consiste à définir celui que vous utiliserez pour vos conteneur :


  • Stockage en mode fichier : l'équivalent d'un serveur NFS. Les performances sont inférieures aux deux autres mode de stockage. Cependant, il est le seul à prendre en charge le mode d'accès ReadWriteMany (expliqué dans la prochaine partie de cet article de blog.)


  • Stockage en mode bloc : l'équivalent à un système de fichiers sur une partition disque. Le plus efficace, mais RWO uniquement.


  • Stockage en mode objet : Stockage d'objets compatibles S3. C'est à l'application déployée dans le pod à communiquer avec le protocole S3. Notez qu'il existe une norme émergente pour Kubernetes : la Container Object Storage Interface (COSI). qui prend en charge S3, Google Cloud Storage, Azure Blob,...


Voici un résumé :



Comme vous pouvez le constater, ils ont tous des avantages et des inconvénients. Comme le stockage en mode fichier organise les données avec une hiérarchie de fichiers et de dossiers et le “block storage” en plusieurs petits blocs de données, le stockage en mode bloc peut être plus souple dans son utilisation que le stockage en mode fichier. Ainsi, il est plus facile d’adapter le stockage en mode bloc aux environnements utilisant des conteneurs. Enfin, le stockage en mode objet pourrait être une excellente alternative si une forte scalabilité est votre priorité.


Portworx est une solution de stockage en mode bloc qui fournit une couche Cloud-Native à partir de laquelle les applications conteneurisées stateful consomment par programmation des services de stockage en mode bloc, fichiers et objets directement via le scheduler Kubernetes.


Accès au stockage Kubernetes


Avec Kubernetes, un PersistentVolume (PV) peut être monté sur un hôte de n'importe quelle manière prise en charge par le provider. Le mode d'accès de chaque PersistentVolume est défini par un mode d’accès spécifique :


  • ReadWriteOnce (RWO) -- le volume peut être monté en lecture-écriture par un seul nœud Kubernetes.

  • ReadOnlyMany (ROX) -- le volume peut être monté en lecture seule par plusieurs nœuds Kubernetes.

  • ReadWriteMany (RWX) -- le volume peut être monté en lecture-écriture par plusieurs nœuds Kubernetes.

  • ReadWriteOncePod (RWOP) -- le volume peut être monté en lecture-écriture par un seul pod. Ceci n'est pris en charge que pour les volumes CSI et Kubernetes version 1.22+.


Par exemple, le mode d'accès ReadWriteMany peut être utilisé par des applications telles que des serveurs Webs (Nginx, Wordpress, etc.) capables de gérer plusieurs instances écrivant sur le même volume. Cependant, il ne sera pas recommandé de l'utiliser pour les bases de données.


Comme nous le verrons ensemble, Portworx est livré avec de nombreuses fonctionnalités et prend en charge les modes d'accès ReadWriteOnce et ReadWriteMany.


Portworx


Qu'est-ce que Portworx ?


De nos jours, la plupart des organisations hébergent une part croissante de leur charge de travail applicative sous forme de conteneurs. Les outils d'orchestration tels que Kubernetes peuvent héberger des centaines et des milliers de ces applications sur de gros clusters.


Ces conteneurs ont besoin d'accéder à un stockage qui peut être provisionné de manière dynamique, à la demande et le plus rapidement possible. Vous pouvez également avoir besoin de quotas, de RBAC (Role Based Access Control) et de cryptage pour sécuriser les données.


Dans une configuration HA, les charges de travail applicatives doivent parfois être déployées dans différentes régions. Le problème avec la plupart des solutions de stockage (par exemple les volumes EBS sur AWS) est que vous ne pouvez l'attacher qu'à un seul nœud.


Tous ces défis peuvent être pris en charge par Portworx. A titre d’information, cette solution de stockage et de gestion de données de bout en bout pour tous vos projets Kubernetes a récemment été acquise par PureStorage pour un montant de 370 millions de dollars.



Architecture et installation de Portworx


Portworx peut être installé sur site ou sur des clouds publics tels que GCP, AWS, Azure, etc.


Il est installé à l'aide de conteneurs et il est facile d'installer et de gérer les composants Portworx via de simples fichiers YAML. Vous pouvez installer Portworx dans un modèle "hyperconvergé" (stockage PX et calcul sur les mêmes nœuds) ou "désagrégé" (stockage PX et calcul sur différents nœuds).


Comme la plupart des plates-formes distribuées, Portworx implémente une interface de contrôle et une interface de gestion de données.


L’interface de contrôle (control plane) agit en tant que centre de commande et de contrôle pour tous les nœuds de stockage participant au cluster (le provisionnement et la gestion des volumes).


Chaque nœud de stockage exécute une interface de données (data plane) responsable de la gestion des E/S et des périphériques de stockage connectés (quel volume est monté sur quel nœud).


L’interface de contrôle et de données s'exécutent tous deux en mode distribué. Cela garantit la haute disponibilité du service de stockage. Pour obtenir la meilleure disponibilité, Portworx recommande de configurer au moins trois nœuds de stockage dans un cluster. Selon la taille du cluster, chaque nœud peut faire tourner le control plane ainsi que les composants du data plane. Dans les grands clusters, il est possible d'avoir des nœuds qui ne participent pas au data plane, ce qui signifie qu'ils ne sont pas désignés comme nœuds de stockage.


Portworx fonctionne généralement avec moins de 3% d’overhead !


Enfin, Portworx collecte des métriques à partir des systèmes physiques, des services virtuels, du réseau, des demandes d'E/S, qui peuvent être collectées à l'aide d'outils comme Prometheus et affichées dans des tableaux de bord à l'aide de Grafana.


Cluster Quorum


Comme indiqué précédemment, Portworx recommande de faire tourner au moins trois nœuds de stockage dans un cluster. Dans un cluster Portworx, tous les nœuds sont actifs en permanence. Cependant, un leader doit être sélectionné et élu par les membres du cluster. En utilisant le protocole RAFT, à un moment aléatoire et en utilisant des algorithmes, un nœud demandera à d'autres nœuds d'être le leader. Une fois que tous les noeuds seront d’accord sur le noeud “leader”, chaque nœud supposera que ce nœud est le leader. Dans le cas où les nœuds ne reçoivent pas de notifications de sa part pendant un certain temps (problème de réseau, leader en panne), les nœuds initieront un nouveau processus d'élection.


Toutes les informations concernant le cluster sont stockées dans une base de données RAFT stockée en interne sur chaque nœud.


Enfin, a titre de rappel, pour calculer le Quorum, vous pouvez utiliser la formule suivante :


quorum = abs (((number of nodes) / 2) + 1)

Comment fonctionne Portworx ?


Portworx regroupe le stockage de tous les nœuds de travail (work nodes) Kubernetes du cluster dans un seul grand pool de stockage virtuel. Il est capable d'organiser le stockage par pool en fonction de leur utilisation et de leur priorité d'E/S via les StorageClasses, comme décrit ci-dessous :



Il existe désormais un pool global de stockage qui peut être utilisé pour créer des volumes utilisés par nos conteneurs. Un grand avantage de Portworx est que même si le stockage est situé sur un nœud spécifique, il vous permet de l'utiliser sur n'importe quel nœud du cluster. Même si les nœuds n'ont aucun stockage sur eux !


Le cluster Portworx peut également être étendu sur des datacenters se situant dans des zones de disponibilité différentes pour assurer la haute disponibilité en cas de panne :



Réplication Sets et Agrégations de disque


1 - Agrégation de disque (aggregation sets) : lorsque vous créez un volume, il est attaché par défaut à un hôte unique. Via l’agrégation de disque, vous pouvez éventuellement avoir le volume “éclaté” sur différents disques et différents hôtes. Le stockage est ainsi vu comme un seul volume . Cela peut être utile en termes de capacité et de performance. Comme vous pouvez le voir ci-dessous, ce cluster Kubernetes s'appuie sur 3 solutions de stockage différentes (AWS, Azure et un SAN)



2 - Replication Sets : vous pouvez créer des volumes avec des “Replication Sets”, cela vous permettra d'avoir une copie de votre volume. Vous pouvez créer 3 copies par volume.



Sauvegarde


Vous pouvez sauvegarder vos volumes Portworx via AWS, GCP ou Azure. Si vous êtes confronté à une panne, les données sauvegardées peuvent être restaurées dans des volumes avant de migrer les applications. Portworx Backup gère le cycle de vie des données du conteneur, catalogue les métadonnées pertinentes, améliore la visibilité de l'accès aux données et permet la restauration d'applications Kubernetes complètes, y compris les données, la configuration des applications et les ressources Kubernetes en un seul clic.



Lighthouse


Lighthouse est un moyen simple, intuitif et graphique de gérer et de surveiller les clusters Portworx. Lighthouse fonctionne comme un conteneur Docker, ce qui permet de l'exécuter sur un ordinateur portable.



L'ajout ou la suppression de clusters dans cette interface est simple. Cliquez simplement sur les icônes Ajouter/Gérer en haut de l'écran. La vue peut être configurée pour filtrer les clusters en fonction de l'état « actif » ou « inactif », ou par région. Vous pouvez ensuite cliquer sur n'importe quel cluster pour explorer les nœuds, les volumes, les snapshots ou les conteneurs exécutés.



Toutes les données de la page du cluster ci-dessus sont consultables, ce qui facilite la navigation vers des volumes ou des nœuds spécifiques.


Enfin, Portworx est intégré à Prometheus et Grafana depuis un certain temps déjà et dans les dernières versions de Lighthouse, il est possible d'avoir des raccourcis directs vers ces services directement depuis le tableau de bord. Lighthouse offre un moyen rapide de résoudre les problèmes de manière plus approfondie en filtrant en fonction du temps :


  • Surveillance de plusieurs clusters à partir d'un seul menu

  • Visibilité sur les ressources de n'importe quel cluster (nœuds/disques/volumes) ainsi que sur les opérations (statistiques/alertes uniques)

  • Gestion des données avec des volumes et des snapshots, y compris un snapshot vers le cloud

  • Raccourcis rapides vers la surveillance proactive (Prometheus -> Grafana) et l'analyse des logs (Fluentd -> Elasticsearch -> Kibana)


Premiers pas avec Portworx


Comment utiliser les volumes Portworx avec Docker


Une fois vos volumes créés (voir aide-mémoire), vous devrez attacher votre stockage aux conteneurs.


Pour ce faire, vous pouvez utiliser les commandes suivantes :

# Créer du stockage un volume Docker
$ docker volume create --driver pxd --name px_vol --opt nodes="node1" --opt size=10

# Attacher le stockage à un conteneur Docker
$ docker run -v pwx_vol:/data nginx

# Les deux commandes précédentes en une seule
$ docker run --volume-driver=pxd -v name=pwx_vol,nodes=node01,size=10:/data nginx

Comment installer Portworx sur un cluster Kubernetes sur site


Consultez la documentation officielle ici.