## Introduction

Les StorageClasses Kubernetes sont la pierre angulaire du provisionnement dynamique de stockage persistant. Une StorageClass mal configurée peut entraîner des échecs de provisionnement de volumes, des pertes de données ou des coûts imprévus. Dans ce guide, nous explorerons les erreurs de configuration courantes, telles que les noms de provisionneurs incorrects, les paramètres manquants et les politiques de récupération inappropriées. Vous apprendrez à valider votre configuration en toute sécurité, à mettre en œuvre des stratégies de retour en arrière et à résoudre les problèmes à l'aide d'exemples pratiques. À la fin, vous disposerez d'une liste de contrôle claire pour garantir la robustesse et la fiabilité de vos StorageClasses.

## Inventaire de la version et de l'environnement

Avant de modifier une StorageClass, documentez votre environnement. Déterminez votre version de Kubernetes, le backend de stockage (par exemple, AWS EBS, GCE PD, NFS, Ceph) et les versions des pilotes CSI le cas échéant. Cet inventaire vous aide à comprendre la compatibilité et les fonctionnalités disponibles.

Par exemple, vérifiez la version de votre cluster avec :

kubectl version --short 
 Sortie attendue (exemple pour Kubernetes 1.25) :

Client Version: v1.25.3
Server Version: v1.25.3 
 Listez les StorageClasses existantes :

kubectl get storageclass 
 Exemple de sortie :

NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE
standard (default) kubernetes.io/aws-ebs Delete Immediate false 30d
fast ebs.csi.aws.com Delete WaitForFirstConsumer true 15d 
 Identifiez la StorageClass par défaut (marquée avec (default) dans la sortie). Notez les noms des provisionneurs et les paramètres. Si vous utilisez un pilote CSI, assurez-vous qu'il est installé et en cours d'exécution :

kubectl get pods -n kube-system | grep csi 
 Vérifiez également si des PersistentVolumeClaims (PVC) utilisent ces StorageClasses :

kubectl get pvc --all-namespaces 
 Cet inventaire guidera vos décisions de configuration et vous aidera à anticiper l'impact des modifications. Par exemple, si vous constatez que de nombreux PVC utilisent la StorageClass standard avec un provisionneur intégré, vous pouvez planifier une migration vers un pilote CSI.

<style>
.eno-quiz-widget{margin:2rem 0;padding:1.5rem;border-radius:12px;background:var(--eno-surface-lowest,#f7f7f8);border:1px solid var(--eno-border-soft,#e2e2e6);font-family:var(--eno-font-body,Inter,sans-serif)}
.eno-quiz-widget .eno-quiz-kicker{font-family:var(--eno-font-label,"JetBrains Mono",monospace);font-size:.75rem;letter-spacing:.05em;text-transform:uppercase;color:var(--eno-text-muted,#5f5f68);margin:0 0 .5rem}
.eno-quiz-widget .eno-quiz-question{font-family:var(--eno-font-heading,"Hanken Grotesk",sans-serif);font-size:1.0625rem;font-weight:600;margin:0 0 1rem;color:var(--eno-text-strong,#1a1a1f)}
.eno-quiz-widget .eno-quiz-options{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:.5rem}
.eno-quiz-widget .eno-quiz-option{display:block;width:100%;min-height:44px;text-align:left;padding:.625rem .875rem;border-radius:8px;border:1.5px solid var(--eno-border-soft,#e2e2e6);background:#fff;font-size:.9375rem;cursor:pointer;transition:border-color var(--eno-motion-base,180ms ease-out),background var(--eno-motion-base,180ms ease-out)}
.eno-quiz-widget .eno-quiz-option:hover{border-color:var(--eno-primary,#0059bb)}
.eno-quiz-widget .eno-quiz-option:focus-visible{outline:none;box-shadow:0 0 0 3px rgb(0 89 187 / 0.15)}
.eno-quiz-widget .eno-quiz-option[aria-pressed="true"]{border-color:var(--eno-primary,#0059bb);background:rgb(0 89 187 / 0.06)}
.eno-quiz-widget .eno-quiz-option[data-correct="true"].eno-quiz-revealed{border-color:var(--eno-success,#17803a);background:rgb(23 128 58 / 0.08)}
.eno-quiz-widget .eno-quiz-option[data-correct="false"].eno-quiz-revealed.eno-quiz-was-selected{border-color:var(--eno-error,#ba1a1a);background:var(--eno-error-soft,#ffdad6)}
.eno-quiz-widget .eno-quiz-option-icon{display:inline-block;width:1.1em;margin-right:.4em;font-weight:700}
.eno-quiz-widget .eno-quiz-submit{margin-top:1rem;min-height:44px;padding:.5rem 1.25rem;border-radius:8px;border:none;background:var(--eno-primary,#0059bb);color:#fff;font-weight:600;font-size:.9375rem;cursor:pointer;transition:opacity var(--eno-motion-base,180ms ease-out)}
.eno-quiz-widget .eno-quiz-submit:disabled{opacity:.5;cursor:not-allowed}
.eno-quiz-widget .eno-quiz-submit:focus-visible{outline:none;box-shadow:0 0 0 3px rgb(0 89 187 / 0.15)}
.eno-quiz-widget .eno-quiz-explanation{margin-top:1rem;padding:.875rem 1rem;border-radius:8px;font-size:.9375rem;line-height:1.5;display:none}
.eno-quiz-widget .eno-quiz-explanation.eno-quiz-visible{display:block}
.eno-quiz-widget .eno-quiz-explanation.eno-quiz-correct{background:rgb(23 128 58 / 0.08);color:var(--eno-success,#17803a)}
.eno-quiz-widget .eno-quiz-explanation.eno-quiz-incorrect{background:var(--eno-error-soft,#ffdad6);color:var(--eno-error,#ba1a1a)}
@media (prefers-reduced-motion: reduce){.eno-quiz-widget *{transition:none!important}}
</style><div class="eno-quiz-widget" role="group" aria-label="Question rapide">
Question rapide 1 sur 2

Que devez-vous faire avant de modifier un StorageClass selon l'article ?

- Supprimer le StorageClass par défaut
- Documenter votre environnement, notamment la version de Kubernetes, le backend de stockage et les versions des pilotes CSI
- Modifier immédiatement le StorageClass existant
- Créer un nouveau StorageClass sans le tester

<button type="button" class="eno-quiz-submit" disabled>Valider</button>
<div class="eno-quiz-explanation">L&#39;article recommande de documenter votre environnement avant de modifier un StorageClass, notamment la version de Kubernetes, le backend de stockage et les versions des pilotes CSI.</div>
</div>
<script>
document.addEventListener('DOMContentLoaded', function () {
  document.querySelectorAll('.eno-quiz-widget:not([data-eno-quiz-bound])').forEach(function (widget) {
    widget.setAttribute('data-eno-quiz-bound', '1');
    var options = Array.prototype.slice.call(widget.querySelectorAll('.eno-quiz-option'));
    var submitBtn = widget.querySelector('.eno-quiz-submit');
    var explanation = widget.querySelector('.eno-quiz-explanation');
    var selected = null;
    options.forEach(function (opt) {
      opt.addEventListener('click', function () {
        if (widget.hasAttribute('data-eno-quiz-answered')) return;
        options.forEach(function (o) { o.setAttribute('aria-pressed', 'false'); });
        opt.setAttribute('aria-pressed', 'true');
        selected = opt;
        submitBtn.disabled = false;
      });
    });
    submitBtn.addEventListener('click', function () {
      if (!selected || widget.hasAttribute('data-eno-quiz-answered')) return;
      widget.setAttribute('data-eno-quiz-answered', '1');
      submitBtn.disabled = true;
      var correct = selected.getAttribute('data-correct') === 'true';
      options.forEach(function (o) {
        o.classList.add('eno-quiz-revealed');
        if (o === selected) o.classList.add('eno-quiz-was-selected');
        var icon = o.querySelector('.eno-quiz-option-icon');
        if (o.getAttribute('data-correct') === 'true') icon.textContent = '\u2713';
        else if (o === selected) icon.textContent = '\u2717';
      });
      explanation.classList.add('eno-quiz-visible', correct ? 'eno-quiz-correct' : 'eno-quiz-incorrect');
    });
  });
});
</script>

## Chemin de configuration sûr

Lors de la modification des StorageClasses, évitez de changer celles qui sont déjà utilisées, car de nombreux champs sont immuables. Créez plutôt une nouvelle StorageClass avec un nom différent et testez-la soigneusement avant de migrer les charges de travail. Cette approche limitée minimise les risques.

Par exemple, supposons que vous souhaitiez mettre à jour le provisionneur d'un plugin intégré vers un pilote CSI. Créez une nouvelle StorageClass :

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
 name: fast-csi
provisioner: ebs.csi.aws.com
parameters:
 type: gp3
 encrypted: "true"
reclaimPolicy: Delete
volumeBindingMode: WaitForFirstConsumer
allowVolumeExpansion: true 
 Appliquez-la :

kubectl apply -f fast-csi.yaml 
 Ensuite, créez un PVC de test référençant la nouvelle StorageClass :

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
 name: test-pvc
spec:
 accessModes:
 - ReadWriteOnce
 storageClassName: fast-csi
 resources:
 requests:
 storage: 1Gi 
 Si le PVC se lie avec succès et que le pod qui l'utilise peut démarrer, la nouvelle StorageClass fonctionne. Ensuite seulement, envisagez de migrer les charges de travail de production. N'oubliez jamais de ne pas supprimer ou modifier une StorageClass activement utilisée par des PVC, car cela peut entraîner des échecs de provisionnement ou des problèmes d'accès aux données. Par exemple, la suppression d'une StorageClass référencée par des PVC ne supprimera pas les volumes existants, mais les nouveaux PVC qui la spécifient échoueront à se provisionner.

## Vérification et diagnostics

Après avoir appliqué une StorageClass, vérifiez qu'elle est correctement configurée à l'aide de kubectl describe . Vérifiez les erreurs dans les événements et assurez-vous que les paramètres sont conformes aux attentes.

Décrivez la StorageClass :

kubectl describe storageclass fast-csi 
 La sortie attendue inclut :

Name: fast-csi
IsDefaultClass: No
Annotations: <none>
Provisioner: ebs.csi.aws.com
Parameters: encrypted=true,type=gp3
AllowVolumeExpansion: true
MountOptions: <none>
ReclaimPolicy: Delete
VolumeBindingMode: WaitForFirstConsumer
Events: <none> 
 Testez le provisionnement dynamique en créant un PVC et en surveillant sa liaison :

kubectl apply -f test-pvc.yaml
kubectl get pvc test-pvc 
 Le statut attendu doit être Bound après quelques secondes. Si vous utilisez WaitForFirstConsumer , le PVC peut rester Pending jusqu'à ce qu'un pod le consomme. S'il reste Pending , vérifiez les événements :

kubectl describe pvc test-pvc 
 Recherchez des messages tels que provisioning failed ou no volume plugin matched . Ceux-ci indiquent des problèmes avec le provisionneur ou les paramètres. Par exemple, l'événement peut indiquer :

Warning ProvisioningFailed 2s (x2 over 5s) ebs.csi.aws.com_aws-ebs-csi-driver-node-xxxx failed to provision volume with StorageClass "fast-csi": rpc error: code = InvalidArgument desc = Volume type "gp4" is not supported 
 Pour confirmer que le volume sous-jacent a été créé, listez les PersistentVolumes :

kubectl get pv | grep test-pvc 
 Vous devriez voir un PV avec le même nom que le PVC et le statut Bound . Par exemple :

pvc-1234abcd-56ef-7890-ghij-klmnopqrstuv 1Gi RWO Delete Bound default/test-pvc fast-csi 2m 
 Si votre StorageClass prend en charge l'expansion de volume, testez-la en augmentant la taille du PVC (si autorisé) et en vérifiant que le PVC affiche la nouvelle capacité après un redimensionnement. Par exemple :

kubectl patch pvc test-pvc -p '{"spec":{"resources":{"requests":{"storage":"2Gi"}}}}' 
 Surveillez ensuite le statut du PVC ; il devrait éventuellement afficher 2Gi en capacité.

<style>
.eno-quiz-widget{margin:2rem 0;padding:1.5rem;border-radius:12px;background:var(--eno-surface-lowest,#f7f7f8);border:1px solid var(--eno-border-soft,#e2e2e6);font-family:var(--eno-font-body,Inter,sans-serif)}
.eno-quiz-widget .eno-quiz-kicker{font-family:var(--eno-font-label,"JetBrains Mono",monospace);font-size:.75rem;letter-spacing:.05em;text-transform:uppercase;color:var(--eno-text-muted,#5f5f68);margin:0 0 .5rem}
.eno-quiz-widget .eno-quiz-question{font-family:var(--eno-font-heading,"Hanken Grotesk",sans-serif);font-size:1.0625rem;font-weight:600;margin:0 0 1rem;color:var(--eno-text-strong,#1a1a1f)}
.eno-quiz-widget .eno-quiz-options{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:.5rem}
.eno-quiz-widget .eno-quiz-option{display:block;width:100%;min-height:44px;text-align:left;padding:.625rem .875rem;border-radius:8px;border:1.5px solid var(--eno-border-soft,#e2e2e6);background:#fff;font-size:.9375rem;cursor:pointer;transition:border-color var(--eno-motion-base,180ms ease-out),background var(--eno-motion-base,180ms ease-out)}
.eno-quiz-widget .eno-quiz-option:hover{border-color:var(--eno-primary,#0059bb)}
.eno-quiz-widget .eno-quiz-option:focus-visible{outline:none;box-shadow:0 0 0 3px rgb(0 89 187 / 0.15)}
.eno-quiz-widget .eno-quiz-option[aria-pressed="true"]{border-color:var(--eno-primary,#0059bb);background:rgb(0 89 187 / 0.06)}
.eno-quiz-widget .eno-quiz-option[data-correct="true"].eno-quiz-revealed{border-color:var(--eno-success,#17803a);background:rgb(23 128 58 / 0.08)}
.eno-quiz-widget .eno-quiz-option[data-correct="false"].eno-quiz-revealed.eno-quiz-was-selected{border-color:var(--eno-error,#ba1a1a);background:var(--eno-error-soft,#ffdad6)}
.eno-quiz-widget .eno-quiz-option-icon{display:inline-block;width:1.1em;margin-right:.4em;font-weight:700}
.eno-quiz-widget .eno-quiz-submit{margin-top:1rem;min-height:44px;padding:.5rem 1.25rem;border-radius:8px;border:none;background:var(--eno-primary,#0059bb);color:#fff;font-weight:600;font-size:.9375rem;cursor:pointer;transition:opacity var(--eno-motion-base,180ms ease-out)}
.eno-quiz-widget .eno-quiz-submit:disabled{opacity:.5;cursor:not-allowed}
.eno-quiz-widget .eno-quiz-submit:focus-visible{outline:none;box-shadow:0 0 0 3px rgb(0 89 187 / 0.15)}
.eno-quiz-widget .eno-quiz-explanation{margin-top:1rem;padding:.875rem 1rem;border-radius:8px;font-size:.9375rem;line-height:1.5;display:none}
.eno-quiz-widget .eno-quiz-explanation.eno-quiz-visible{display:block}
.eno-quiz-widget .eno-quiz-explanation.eno-quiz-correct{background:rgb(23 128 58 / 0.08);color:var(--eno-success,#17803a)}
.eno-quiz-widget .eno-quiz-explanation.eno-quiz-incorrect{background:var(--eno-error-soft,#ffdad6);color:var(--eno-error,#ba1a1a)}
@media (prefers-reduced-motion: reduce){.eno-quiz-widget *{transition:none!important}}
</style><div class="eno-quiz-widget" role="group" aria-label="Question rapide">
Question rapide 2 sur 2

Lors de la création d'un nouveau StorageClass, que devez-vous définir comme provisioner pour AWS EBS avec le pilote CSI ?

- kubernetes.io/aws-ebs
- ebs.csi.aws.com
- aws-ebs
- ebs

<button type="button" class="eno-quiz-submit" disabled>Valider</button>
<div class="eno-quiz-explanation">L&#39;exemple de l&#39;article utilise provisioner: ebs.csi.aws.com pour un StorageClass avec pilote CSI.</div>
</div>
<script>
document.addEventListener('DOMContentLoaded', function () {
  document.querySelectorAll('.eno-quiz-widget:not([data-eno-quiz-bound])').forEach(function (widget) {
    widget.setAttribute('data-eno-quiz-bound', '1');
    var options = Array.prototype.slice.call(widget.querySelectorAll('.eno-quiz-option'));
    var submitBtn = widget.querySelector('.eno-quiz-submit');
    var explanation = widget.querySelector('.eno-quiz-explanation');
    var selected = null;
    options.forEach(function (opt) {
      opt.addEventListener('click', function () {
        if (widget.hasAttribute('data-eno-quiz-answered')) return;
        options.forEach(function (o) { o.setAttribute('aria-pressed', 'false'); });
        opt.setAttribute('aria-pressed', 'true');
        selected = opt;
        submitBtn.disabled = false;
      });
    });
    submitBtn.addEventListener('click', function () {
      if (!selected || widget.hasAttribute('data-eno-quiz-answered')) return;
      widget.setAttribute('data-eno-quiz-answered', '1');
      submitBtn.disabled = true;
      var correct = selected.getAttribute('data-correct') === 'true';
      options.forEach(function (o) {
        o.classList.add('eno-quiz-revealed');
        if (o === selected) o.classList.add('eno-quiz-was-selected');
        var icon = o.querySelector('.eno-quiz-option-icon');
        if (o.getAttribute('data-correct') === 'true') icon.textContent = '\u2713';
        else if (o === selected) icon.textContent = '\u2717';
      });
      explanation.classList.add('eno-quiz-visible', correct ? 'eno-quiz-correct' : 'eno-quiz-incorrect');
    });
  });
});
</script>

## Modes de défaillance et récupération

Les modes de défaillance courants incluent des provisionneurs mal configurés, des paramètres incorrects (par exemple, un mauvais type de volume), un pilote CSI manquant ou des autorisations insuffisantes. Lorsqu'un PVC ne parvient pas à se provisionner, la première étape consiste à vérifier les événements. Ensuite, examinez les journaux du contrôleur CSI le cas échéant.

Par exemple, si vous voyez :

failed to provision volume with StorageClass "fast-csi": rpc error: code = InvalidArgument desc = Volume type "gp4" is not supported 
 alors vous avez une faute de frappe dans le paramètre. Pour récupérer, créez une StorageClass corrigée et mettez à jour votre PVC pour l'utiliser. Notez que les paramètres d'une StorageClass sont immuables, vous ne pouvez donc pas modifier une existante ; vous devez en créer une nouvelle.

Si vous supprimez accidentellement une StorageClass en cours d'utilisation, les PVC existants continueront de fonctionner, mais les nouveaux PVC qui la référencent échoueront. Pour récupérer, recréez la StorageClass avec le même nom et les mêmes paramètres. Cependant, si les PVC ont le nom de la StorageClass dans leur spécification et que la StorageClass est supprimée, le PVC peut rester bloqué. Vous pouvez patcher le PVC pour supprimer le champ storageClassName ou le pointer vers une nouvelle StorageClass valide si le volume existe déjà.

Par exemple, pour supprimer le storageClassName d'un PVC :

kubectl patch pvc test-pvc -p '{"spec":{"storageClassName":null}}' 
 Stratégie de retour en arrière : Conservez toujours la définition de la StorageClass précédente dans le contrôle de version. Si une nouvelle StorageClass cause des problèmes, vous pouvez la supprimer et recréer l'ancienne. Pour les PVC déjà liés à des PV provisionnés par la nouvelle StorageClass, vous devrez peut-être migrer manuellement les données ou effectuer des sauvegardes.

Exemple de retour en arrière : Supprimez le PVC problématique (après avoir sauvegardé les données) et recréez-le avec l'ancienne StorageClass.

kubectl delete pvc test-pvc
kubectl apply -f old-test-pvc.yaml 
 Testez toujours les procédures de retour en arrière dans un espace de noms non productif d'abord.

## Liste de contrôle opérationnelle

Utilisez cette liste de contrôle avant et après avoir apporté des modifications aux StorageClasses pour garantir la cohérence et la sécurité.

<div class="my-stack-md overflow-x-auto">
<table class="min-w-[42rem] border-collapse text-left">
<thead><tr><th scope="col" class="border border-outline-variant bg-surface-container-low px-4 py-3 text-left font-label-md font-semibold text-on-surface">Étape</th><th scope="col" class="border border-outline-variant bg-surface-container-low px-4 py-3 text-left font-label-md font-semibold text-on-surface">Description</th><th scope="col" class="border border-outline-variant bg-surface-container-low px-4 py-3 text-left font-label-md font-semibold text-on-surface">Commande/Vérification</th></tr></thead>
<tbody><tr><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">1</td><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">Documenter l&#39;environnement actuel</td><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant"><code class="font-mono text-[0.9em] bg-surface-container px-1 py-0.5 rounded">kubectl version --short</code>, <code class="font-mono text-[0.9em] bg-surface-container px-1 py-0.5 rounded">kubectl get storageclass</code></td></tr>
<tr><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">2</td><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">Identifier les StorageClasses en cours d&#39;utilisation</td><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant"><code class="font-mono text-[0.9em] bg-surface-container px-1 py-0.5 rounded">kubectl get pvc --all-namespaces -o jsonpath=&#39;{.items[*].spec.storageClassName}&#39;</code></td></tr>
<tr><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">3</td><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">Créer une nouvelle StorageClass pour les modifications</td><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant"><code class="font-mono text-[0.9em] bg-surface-container px-1 py-0.5 rounded">kubectl apply -f new-sc.yaml</code></td></tr>
<tr><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">4</td><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">Tester avec un PVC temporaire</td><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant"><code class="font-mono text-[0.9em] bg-surface-container px-1 py-0.5 rounded">kubectl apply -f test-pvc.yaml</code> et vérifier la liaison</td></tr>
<tr><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">5</td><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">Vérifier les paramètres et les événements</td><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant"><code class="font-mono text-[0.9em] bg-surface-container px-1 py-0.5 rounded">kubectl describe storageclass &lt;name&gt;</code>, <code class="font-mono text-[0.9em] bg-surface-container px-1 py-0.5 rounded">kubectl describe pvc &lt;name&gt;</code></td></tr>
<tr><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">6</td><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">Tester l&#39;expansion de volume si activée</td><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">Augmenter la taille du PVC et vérifier le statut</td></tr>
<tr><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">7</td><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">Tester le montage du pod et l&#39;écriture/lecture</td><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">Déployer un pod utilisant le PVC et écrire un fichier de test</td></tr>
<tr><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">8</td><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">Planifier le retour en arrière</td><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">Garder l&#39;ancien YAML de StorageClass prêt</td></tr>
<tr><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">9</td><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">Surveiller après le déploiement</td><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">Observer les événements des PVC et les métriques de stockage</td></tr>
<tr><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">10</td><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">Mettre à jour la documentation</td><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">Enregistrer les modifications et les leçons apprises</td></tr></tbody>
</table>
</div>
Examinez régulièrement les StorageClasses pour supprimer celles qui sont inutilisées et assurez-vous que les politiques de récupération répondent à vos exigences de conservation des données. Par exemple, si vous avez une StorageClass avec reclaimPolicy: Retain pour une base de données de production, assurez-vous que les volumes orphelins sont nettoyés périodiquement pour éviter les dépassements de coûts.

## Conclusion

Les erreurs de configuration des StorageClasses Kubernetes peuvent perturber vos applications et vos données. En suivant les pratiques décrites dans ce guide, vous pouvez éviter les pièges courants tels que les modifications de champs immuables, les provisionneurs incorrects et le manque de validation. Créez toujours de nouvelles StorageClasses pour les modifications, testez soigneusement et ayez un plan de retour en arrière. Utilisez les commandes et la liste de contrôle fournies pour vérifier et maintenir votre configuration de stockage. Avec une gestion prudente, vous pouvez garantir un stockage persistant fiable et efficace dans vos clusters Kubernetes.