Le stockage local permet de monter des fichiers ou des répertoires du système de fichiers d’un nœud hôte dans les pods exécutés au sein d’un cluster Kubernetes Enterprise Distributed Application Service (EDAS). Cette fonctionnalité offre aux conteneurs un accès direct au système de fichiers de l’hôte pour des opérations d’E/S à haute vitesse, sans surcharge réseau. Elle s’avère utile pour lire des journaux au niveau de l’hôte, partager des données temporaires entre conteneurs ou accéder à des fichiers de configuration spécifiques au nœud.
Fonctionnement du stockage local
Dans un cluster Container Service for Kubernetes (ACK) géré par EDAS, le stockage local utilise des volumes Kubernetes hostPath pour monter les chemins du système de fichiers de l’hôte dans les conteneurs.
EDAS prend en charge deux types de stockage local :
| Type | Volume Kubernetes | Cas d’utilisation | Cycle de vie des données |
|---|---|---|---|
| Local File of Host | hostPath |
Accéder à des fichiers ou répertoires spécifiques sur le nœud hôte, tels que les journaux système ou la configuration au niveau du nœud | Les données persistent sur l’hôte indépendamment du cycle de vie du pod |
| emptyDir | emptyDir |
Partager des données temporaires entre les conteneurs d’un même pod, par exemple un espace de travail temporaire, des caches ou des échanges de données inter-conteneurs | Créé au démarrage du pod sur un nœud. Supprimé définitivement lors du retrait du pod du nœud |
Les volumes hostPath exposent le système de fichiers de l’hôte aux conteneurs, ce qui présente des risques de sécurité. Un conteneur disposant d’un accès au système de fichiers de l’hôte pourrait lire des identifiants privilégiés (tels que les identifiants kubelet) ou exploiter le socket du runtime de conteneur pour s’échapper du conteneur. Si vous avez besoin d’un stockage persistant, utilisez plutôt un PersistentVolume local. Lorsque vous devez utiliser hostPath, restreignez le montage en lecture seule chaque fois que possible.
Prérequis
Avant de commencer, assurez-vous de disposer des éléments suivants :
Un compte EDAS avec accès à la console EDAS
Un cluster Kubernetes (ACK) enregistré dans EDAS
Un namespace et une région disponibles pour votre application
Ajouter un stockage local à une nouvelle application
Connectez-vous à la console EDAS. Dans le volet de navigation de gauche, choisissez Application Management > Applications.
Dans la barre de navigation supérieure, sélectionnez une région. Dans la partie supérieure de la page, sélectionnez un namespace. Dans le coin supérieur gauche, cliquez sur Create Application.
-
À l’étape Basic Information, définissez les paramètres suivants et cliquez sur Next.
Paramètre Description Cluster Type Sélectionnez Kubernetes Clusters Application Runtime Environment Sélectionnez le runtime correspondant à votre application. Consultez les options de runtime d’application À l’étape Configurations, configurez les informations d’environnement, les informations de base, la méthode de déploiement et les paramètres de ressources. Cliquez sur Next.
-
À l’étape Advanced Settings, développez Local Storage et configurez le type de volume :
Pour monter un chemin hôte, consultez les paramètres Local File of Host.
Pour créer un volume partagé éphémère, consultez les paramètres emptyDir.
Cliquez sur Create Application.
Sur la page Creation Completed, vérifiez les paramètres dans les sections Basic Information, Configurations et Advanced Settings. Cliquez sur Create Application pour confirmer.
Sur la page Application Overview, cliquez sur View Details. Sur la page Change List, surveillez la progression du déploiement. Une fois le changement terminé, vérifiez la section Basic Information sur la page Application Overview. Un pod en cours d’exécution indique un déploiement réussi.
Mettre à jour le stockage local d’une application existante
L’application redémarre après l’enregistrement de ces modifications. Effectuez cette opération pendant les heures creuses.
Connectez-vous à la console EDAS. Dans le volet de navigation de gauche, choisissez Application Management > Applications.
Dans la barre de navigation supérieure, sélectionnez une région. Dans la partie supérieure de la page, sélectionnez un namespace. Dans la liste déroulante Cluster Type, sélectionnez Container Service or Serverless Kubernetes Cluster.
Repérez l’application cible et cliquez sur son nom.
Sur la page Overview ou Basic information, choisissez Deploy > Deploy dans le coin supérieur droit.
Sur la page Select Deployment Mode, sélectionnez un mode de déploiement et cliquez sur Start Deployment.
-
Configurez l’environnement et le package de déploiement, puis développez Local Storage et définissez les paramètres du volume :
Pour monter un chemin hôte, consultez les paramètres Local File of Host.
Pour créer un volume partagé éphémère, consultez les paramètres emptyDir.
Cliquez sur OK.
Paramètres du stockage local
Paramètres Local File of Host
L’option Local File of Host correspond à un volume Kubernetes hostPath. Elle monte un fichier ou un répertoire du nœud hôte dans le conteneur.
Le champ type contrôle si Kubernetes valide ou crée le chemin sur l’hôte avant le montage :
| Type de fichier | Valeur | Comportement |
|---|---|---|
| Par défaut | Chaîne vide | Monte le chemin sans validation. Aucune vérification n’est effectuée avant le montage |
| (Créer) Répertoire de fichiers | DirectoryOrCreate |
Si le chemin n’existe pas, crée un répertoire vide avec les permissions 0755. Le répertoire hérite du groupe et de la propriété du kubelet |
| Répertoire de fichiers | Directory |
Un répertoire doit déjà exister à l’emplacement spécifié. Le conteneur ne démarre pas si le répertoire n’existe pas |
| (Créer) Fichier | FileOrCreate |
Si le chemin n’existe pas, crée un fichier vide avec les permissions 0644. Le fichier hérite du groupe et de la propriété du kubelet |
| Fichier | File |
Un fichier doit déjà exister à l’emplacement spécifié. Le conteneur ne démarre pas si le fichier n’existe pas |
| Socket | Socket |
Un socket UNIX doit déjà exister à l’emplacement spécifié. Le conteneur ne démarre pas si le socket n’existe pas |
| CharDevice | CharDevice |
Un périphérique caractère doit déjà exister à l’emplacement spécifié (nœuds Linux uniquement). Le conteneur ne démarre pas si le périphérique n’existe pas |
| BlockDevice | BlockDevice |
Un périphérique bloc doit déjà exister à l’emplacement spécifié (nœuds Linux uniquement). Le conteneur ne démarre pas si le périphérique n’existe pas |
FileOrCreate ne crée pas le répertoire parent. Si le répertoire parent du fichier cible n’existe pas, le pod ne démarre pas. Pour éviter ce problème, montez d’abord le répertoire parent en utilisant DirectoryOrCreate, puis montez le fichier.
Paramètres supplémentaires pour Local File of Host :
| Paramètre | Description |
|---|---|
| Mount Path | Chemin à l’intérieur du conteneur où le fichier ou le répertoire de l’hôte est monté |
| Host Path | Chemin sur le nœud hôte à monter dans le conteneur |
| Mount Mode | Mode d’accès au volume. Valeurs valides : Read/Write et Read-only. Utilisez Read-only chaque fois que possible pour réduire les risques de sécurité |
| subPathExpr | Expression de référence de champ utilisée pour construire un nom de sous-répertoire au sein du volume. Utile pour attribuer à chaque conteneur ou instance de pod son propre répertoire |
Paramètres emptyDir
Un volume emptyDir est créé lorsqu’un pod est assigné à un nœud. Tous les conteneurs du pod peuvent lire et écrire dans le même volume emptyDir, ce qui le rend adapté à un espace de travail temporaire, à des caches ou à des échanges de données inter-conteneurs. Lorsque le pod est retiré du nœud pour quelque raison que ce soit (y compris un crash, une réduction d’échelle ou un redéploiement), les données du volume emptyDir sont supprimées définitivement.
| Paramètre | Description |
|---|---|
| Mount Mode | Mode d’accès au volume. Valeurs valides : Read/Write et Read-only |
| Mount Path | Chemin à l’intérieur du conteneur où le volume emptyDir est monté |
| subPathExpr | Expression de référence de champ utilisée pour construire un nom de sous-répertoire au sein du volume. Utile pour attribuer à chaque conteneur ou instance de pod son propre répertoire |
Vérifier la configuration
Une fois le déploiement terminé, vérifiez que le stockage local est correctement configuré à l’aide de l’une des méthodes suivantes :
Check change records
Dans le volet de navigation de gauche de la page des détails de l’application, cliquez sur Change Records. Si la colonne Change Status affiche Success, la configuration du stockage est active.
Vérifier l’état du pod
Sur la page Application Overview, cliquez sur Running Pods (Click View) à côté de Running Status. Dans la section Pod, vérifiez la colonne Status. Un point vert indique que le pod est en cours d’exécution et que la configuration est effective.
Considérations pour la production
Gardez les points suivants à l’esprit lors de l’utilisation du stockage local en production :
Sécurité : Les volumes
hostPathcontournent les limites d’isolation des conteneurs. Restreignez les chemins de montage à la portée minimale requise et utilisez le mode de montage Read-only chaque fois que possible. Évitez de monter des chemins sensibles tels que/,/etcou/var/run.Planification des pods : Les données
hostPathsont liées à un nœud spécifique. Si un pod est replanifié sur un autre nœud, il ne peut pas accéder aux données de l’hôte précédent. Pour les données qui doivent persister lors des changements de nœud, utilisez un PersistentVolumelocalou un stockage connecté au réseau.Pression sur le disque : L’utilisation des volumes
hostPathn’est pas suivie par la gestion du stockage éphémère de Kubernetes. Surveillez l’utilisation du disque sur les nœuds hôtes pour éviter la pression disque causée par les écritures des conteneurs dans les montageshostPath.Taille emptyDir : Les volumes
emptyDirconsomment de l’espace disque du nœud (ou de la mémoire s’ils sont sauvegardés partmpfs). Un seul pod écrivant de grandes quantités de données dansemptyDirpeut provoquer une pression disque sur le nœud.Perte de données : Les données
emptyDirsont supprimées lorsque le pod est retiré. Ne stockez pas dans les volumesemptyDirdes données qui doivent survivre aux redémarrages de pods.
Options de runtime d’application
Sélectionnez l’environnement de runtime en fonction du type de votre application et du format de packaging.
| Runtime | Option | Utiliser lorsque |
|---|---|---|
| Java | Custom | Déploiement avec une image de conteneur personnalisée |
| Java | Java | Déploiement d’une application Dubbo ou Spring Boot avec un package JAR. Définissez Java Environment après la sélection |
| Java | Tomcat | Déploiement d’une application Dubbo ou Spring avec un package WAR. Définissez Java Environment et Container Version après la sélection |
| Java | EDAS-Container (HSF) | Déploiement d’une application High-speed Service Framework (HSF) avec un package WAR ou FatJar. Définissez Java Environment, Pandora Version et Ali-Tomcat Version après la sélection |
| PHP | PHP | Exécution d’une application PHP sur Apache HTTP Server |
| Multilingue | Node.js, C++, Go, and Other Languages | Déploiement avec une image de conteneur personnalisée |