Dépannage

Cette page décrit les étapes de dépannage pour certains problèmes et erreurs courants.

Instance ÉCHOUÉE

L'état FAILED signifie que les données de l'instance ont été perdues et que l'instance doit être supprimée.

Les instances Parallelstore à l'état FAILED continuent d'être facturées jusqu'à leur suppression.

Pour récupérer l'état d'une instance, suivez les instructions de la section Gérer les instances : récupérer une instance.

Pour supprimer une instance, consultez Gérer les instances : supprimer une instance.

Dépassement du délai d'attente lors du montage dfuse ou des tests réseau

Si la commande dfuse -m expire lors du montage de votre instance Parallelstore, ou si les commandes de test réseau telles que self_test ou daos health net-test expirent, cela peut être dû à un problème de connectivité réseau.

Pour vérifier la connectivité aux serveurs Parallelstore, exécutez

self_test --use-daos-agent-env -r 1

Si le test signale un problème de connexion, deux raisons sont possibles :

Il est possible que l'agent DAOS ait sélectionné la mauvaise interface réseau lors de la configuration.

Vous devrez peut-être exclure les interfaces réseau qui ne peuvent pas accéder aux adresses IP de la liste access_points.

  1. Exécutez ifconfig pour lister les interfaces réseau disponibles. Un exemple de résultat peut afficher plusieurs interfaces réseau telles que eth0, docker0, ens8, lo, etc.

  2. Arrêtez daos_agent.

  3. Modifiez /etc/daos/daos_agent.yml pour exclure les interfaces réseau indésirables. Annulez la mise en commentaire de la ligne exclude_fabric_ifaces et mettez à jour les valeurs. Les entrées que vous incluez sont spécifiques à votre situation. Exemple :

    exclude_fabric_ifaces: ["docker0", "ens8", "lo"]
    
  4. Redémarrez daos_agent.

L'adresse IP de l'instance ou du client est en conflit avec des adresses IP internes.

Les instances et les clients Parallelstore ne peuvent pas utiliser d'adresse IP provenant de la plage de sous-réseau 172.17.0.0/16. Pour en savoir plus, consultez la section Problèmes connus.

ENOSPC lorsqu'il y a de la capacité inutilisée dans l'instance

Si votre instance utilise un striping minimal ou équilibré (par défaut), vous pouvez rencontrer des erreurs ENOSPC même si les fichiers existants n'utilisent pas toute la capacité de l'instance. Cela se produit généralement lors de l'écriture de fichiers volumineux (généralement supérieurs à 8 Gio) ou lors de l'importation de tels fichiers depuis Cloud Storage.

Utilisez le striping de fichier maximal pour réduire la probabilité de ces erreurs.

Dépannage de Google Kubernetes Engine

La section suivante liste certains problèmes courants et les étapes à suivre pour les résoudre.

Transport endpoint is not connected dans les pods de charge de travail

Cette erreur est due à l'arrêt de dfuse. Dans la plupart des cas, dfuse a été arrêté en raison d'un manque de mémoire. Utilisez les annotations de pod gke-parallelstore/[cpu-limit|memory-limit] pour allouer davantage de ressources au conteneur side-car Parallelstore. Vous pouvez définir gke-parallelstore/memory-limit: "0" pour supprimer la limite de mémoire du side-car si vous ne savez pas quelle quantité de mémoire lui allouer. Notez que cela ne fonctionne qu'avec les clusters Standard. Avec les clusters Autopilot, vous ne pouvez pas utiliser la valeur 0 pour annuler la définition des limites et des requêtes de ressources du conteneur side-car. Vous devez définir explicitement une limite de ressources plus élevée pour le conteneur side-car.

Une fois les annotations modifiées, vous devez redémarrer le pod de votre charge de travail. L'ajout d'annotations à une charge de travail en cours d'exécution ne modifie pas dynamiquement l'allocation de ressources.

Avertissements d'événements de pod

Si les pods de votre charge de travail ne peuvent pas démarrer, vérifiez les événements des pods :

kubectl describe pod POD_NAME -n NAMESPACE

Les solutions suivantes concernent les erreurs courantes.

Problèmes d'activation du pilote CSI

Voici les erreurs courantes d'activation du pilote CSI :

MountVolume.MountDevice failed for volume "volume" : kubernetes.io/csi:
attacher.MountDevice failed to create newCsiDriverClient:
driver name parallelstore.csi.storage.gke.io not found in the list of registered CSI drivers
MountVolume.SetUp failed for volume "volume" : kubernetes.io/csi:
mounter.SetUpAt failed to get CSI client:
driver name parallelstore.csi.storage.gke.io not found in the list of registered CSI drivers

Ces avertissements indiquent que le pilote CSI n'est pas activé ou n'est pas en cours d'exécution.

Si votre cluster vient d'être mis à l'échelle, mis à jour ou migré, cet avertissement est normal et devrait être temporaire. Il faut quelques minutes pour que les pods du pilote CSI soient fonctionnels après les opérations sur le cluster.

Sinon, vérifiez que le pilote CSI est activé sur votre cluster. Pour en savoir plus, consultez Activer le pilote CSI. Si le CSI est activé, chaque nœud affiche un pod nommé parallelstore-csi-node-id en cours d'exécution.

Échecs AttachVolume.Attach

Une fois le pod planifié sur un nœud, le volume y est associé et le pod de montage est créé si vous utilisez le montage de nœud.

Cela se produit sur le contrôleur et implique l'étape AttachVolume de attachdetach-controller.

Code d'erreur Avertissement d'événement de pod Solution
InvalidArgument
  • AttachVolume.Attach failed for volume "volume" : rpc error: code = InvalidArgument desc = an error occurred while preparing mount options: invalid mount options
Des options d'installation non valides sont transmises à PersistentVolume ou StorageClass. Pour en savoir plus, consultez les options de montage dfuse compatibles.
NotFound
  • AttachVolume.Attach failed for volume "volume" : rpc error: code = NotFound desc = failed to get instance "instance"
L'instance Parallelstore n'existe pas. Vérifiez que le volumeHandle du PersistentVolume est au bon format.

Échecs MountVolume.MountDevice

Une fois le volume associé à un nœud, il est préparé pour ce nœud.

Cela se produit sur le nœud et implique l'étape MountVolume.MountDevice de kubelet.

Code d'erreur Avertissement d'événement de pod Solution
FailedPrecondition
  • MountVolume.MountDevice failed for volume "volume" : rpc error: code = FailedPrecondition desc = mounter pod "pod" expected to exist but was not found
Cette erreur est généralement due à la suppression manuelle du pod de montage. Supprimez toutes les charges de travail qui consomment la PVC, puis redéployez-les. Un pod de montage est alors créé.
DeadlineExceeded
  • MountVolume.MountDevice failed for volume "volume": rpc error: code = DeadlineExceeded desc = context deadline exceeded
Un problème de connexion à l'instance Parallelstore est survenu. Vérifiez que votre réseau VPC et vos points d'accès sont correctement configurés.

Échecs MountVolume.SetUp

Une fois le volume préparé sur le nœud, il est installé et fourni au conteneur sur le pod. Cela se produit sur le nœud et implique l'étape MountVolume.SetUp dans kubelet.

Support de module

Code d'erreur Avertissement d'événement de pod Solution
ResourceExhausted
  • MountVolume.SetUp failed for volume "volume" : rpc error: code = ResourceExhausted desc = the sidecar container failed with error: signal: killed
  • MountVolume.SetUp failed for volume "volume" : rpc error: code = ResourceExhausted desc = the sidecar container terminated due to OOMKilled, exit code: 137
Le processus dfuse s'est terminé, ce qui est généralement dû à une condition de mémoire insuffisante (OOM). Envisagez d'augmenter la limite de mémoire du conteneur side-car à l'aide de l'annotation gke-parallelstore/memory-limit.

Si vous n'êtes pas sûr de la quantité de mémoire que vous souhaitez allouer au side-car parallelstore, nous vous recommandons de définir gke-parallelstore/memory-limit: "0" pour éliminer la restriction de mémoire imposée par Parallelstore.

Abandon
  • MountVolume.SetUp failed for volume "volume" : rpc error: code = Aborted desc = NodePublishVolume request is aborted due to rate limit
  • MountVolume.SetUp failed for volume "volume" : rpc error: code = Aborted desc = An operation with the given volume key key already exists
L'opération de montage de volume a été abandonnée en raison d'une limitation du débit ou d'opérations existantes. Cet avertissement est normal et devrait être temporaire.
InvalidArgument MountVolume.SetUp failed for volume "volume" : rpc error: code = InvalidArgument desc = Si vous avez fourni des arguments non valides dans StorageClass ou PersistentVolume, le journal des erreurs indique les champs contenant les arguments non valides. Pour le provisionnement dynamique, consultez la classe de stockage. Pour l'approvisionnement statique, cochez la case Volume persistant.
FailedPrecondition MountVolume.SetUp failed for volume "volume" : rpc error: code = FailedPrecondition desc = can not find the sidecar container in Pod spec Le conteneur side-car Parallelstore n'a pas été injecté. Vérifiez que l'annotation de pod gke-parallelstore/volumes: "true" est correctement définie.

Support de nœud

Code d'erreur Avertissement d'événement de pod Solution
Abandon
  • MountVolume.SetUp failed for volume "volume" : rpc error: code = Aborted desc = NodePublishVolume request is aborted due to rate limit
  • MountVolume.SetUp failed for volume "volume" : rpc error: code = Aborted desc = An operation with the given volume key key already exists
L'opération de montage du volume a été abandonnée en raison d'une limite de débit ou d'opérations existantes. Cet avertissement est normal et devrait être temporaire.
InvalidArgument MountVolume.SetUp failed for volume "volume" : rpc error: code = InvalidArgument desc = Si vous avez fourni des arguments non valides dans StorageClass ou PersistentVolume, le journal des erreurs indiquera les champs contenant les arguments non valides. Pour le provisionnement dynamique, consultez la classe de stockage. Pour l'approvisionnement statique, consultez la section Volume persistant.
FailedPrecondition MountVolume.SetUp failed for volume "volume" : rpc error: code = FailedPrecondition desc = mounter pod expected to exist but was not found Le pod du programme de montage Parallelstore n'existe pas. Si le pod de montage a été supprimé par erreur, recréez toutes les charges de travail pour déclencher la recréation.
DeadlineExceeded MountVolume.SetUp failed for volume "volume" : rpc error: code = DeadlineExceeded desc = timeout waiting for mounter pod gRPC server to become available Le serveur gRPC du pod de montage n'a pas démarré. Recherchez d'éventuelles erreurs dans les journaux du pod de montage.

Résoudre les problèmes liés aux réseaux VPC

Autorisation refusée pour ajouter le peering au service servicenetworking.googleapis.com

ERROR: (gcloud.services.vpc-peerings.connect) User [$(USER)] does not have 
permission to access services instance [servicenetworking.googleapis.com]
(or it may not exist): Permission denied to add peering for service
'servicenetworking.googleapis.com'.

Cette erreur signifie que vous ne disposez pas de l'autorisation IAM servicenetworking.services.addPeering dans votre compte utilisateur.

Pour savoir comment ajouter l'un des rôles suivants à votre compte, consultez Contrôle des accès avec IAM :

  • roles/compute.networkAdmin ou
  • roles/servicenetworking.networksAdmin

Impossible de modifier les plages allouées dans CreateConnection

ERROR: (gcloud.services.vpc-peerings.connect) The operation
"operations/[operation_id]" resulted in a failure "Cannot modify allocated
ranges in CreateConnection. Please use UpdateConnection.

Cette erreur est renvoyée lorsque vous avez déjà créé un peering VPC sur ce réseau avec des plages d'adresses IP différentes. Il existe deux solutions :

Remplacez les plages d'adresses IP existantes :

gcloud services vpc-peerings update \
  --network=NETWORK_NAME \
  --ranges=IP_RANGE_NAME \
  --service=servicenetworking.googleapis.com \
  --force

Vous pouvez également ajouter la nouvelle plage d'adresses IP à la connexion existante :

  1. Récupérez la liste des plages d'adresses IP existantes pour l'appairage :

    EXISTING_RANGES=$(
      gcloud services vpc-peerings list \
        --network=NETWORK_NAME \
        --service=servicenetworking.googleapis.com \
        --format="value(reservedPeeringRanges.list())"
    )
    
  2. Ajoutez ensuite la nouvelle plage au peering :

    gcloud services vpc-peerings update \
      --network=NETWORK_NAME \
      --ranges=$EXISTING_RANGES,IP_RANGE_NAME \
      --service=servicenetworking.googleapis.com
    

La plage d'adresses IP est épuisée.

La création d'instance peut échouer avec l'erreur suivante indiquant que la plage est épuisée :

ERROR: (gcloud.alpha.Parallelstore.instances.create) FAILED_PRECONDITION: Invalid
resource state for "NETWORK_RANGES_NOT_AVAILABLE": IP address range exhausted

Si ce message d'erreur s'affiche, suivez le guide VPC pour recréer la plage d'adresses IP ou étendre la plage d'adresses IP existante.

Si vous recréez une instance Parallelstore, vous devez recréer la plage d'adresses IP au lieu de l'étendre.

Maintenance bloquée en raison d'un budget d'interruption de pod restrictif

La console Google Cloud peut afficher le message d'erreur suivant indiquant que la maintenance ne peut pas se poursuivre, car un budget d'interruptions de pod (PDB) est configuré pour autoriser zéro éviction de pod :

GKE can't perform maintenance because the Pod Disruption Budget allows for 0 Pods evictions.

Si ce message d'erreur s'affiche, identifiez le pod problématique en procédant comme suit :

  1. Cliquez sur le message d'erreur pour ouvrir le panneau d'informations sur l'erreur.

  2. Consultez la section Budgets d'interruptions de pods non permissifs pour connaître le nom du pod.

  3. Si le pod est parallelstorecsi-mount, vous pouvez ignorer cette erreur, car elle n'empêchera pas la maintenance. Pour tout autre pod, examinez votre PDB.