Dépannage

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

Instance FAILED

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 la section Gérer les instances: supprimer une instance.

Dépassement du délai d'expiration lors de l'installation dfuse ou des tests réseau

Si, lors du montage de votre instance Parallelstore, la commande dfuse -m expire ou si des 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:

L'agent DAOS a peut-être sélectionné la mauvaise interface réseau lors de la configuration

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

  1. Exécutez ifconfig pour obtenir la liste des interfaces réseau disponibles. Un exemple de sortie 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, puis 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 Parallelstore et les clients ne peuvent pas utiliser d'adresse IP 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 existe une capacité inutilisée dans l'instance

Si votre instance utilise un fractionnement 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 lorsque vous écrivez des fichiers volumineux, généralement supérieurs à 8 Go, ou lorsque vous importez de tels fichiers depuis Cloud Storage.

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

Résoudre les problèmes liés à Google Kubernetes Engine

La section suivante présente 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 plus de ressources au conteneur sidecar Parallelstore. Vous pouvez définir gke-parallelstore/memory-limit: "0" pour supprimer la limite de mémoire du sidecar si vous ne savez pas quelle quantité de mémoire vous souhaitez lui allouer. Notez que cette opération ne fonctionne que avec les clusters Standard. Avec les clusters Autopilot, vous ne pouvez pas utiliser la valeur 0 pour annuler les limites et les 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 des 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 s'appliquent aux erreurs courantes.

Problèmes d'activation des pilotes 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 qu'il ne s'exécute pas.

Si votre cluster vient d'être mis à l'échelle, mis à jour ou mis à niveau, cet avertissement est normal et devrait être temporaire. Les pods du pilote CSI prennent quelques minutes à être opérationnels après les opérations de cluster.

Sinon, vérifiez que le pilote CSI est activé sur votre cluster. Pour en savoir plus, consultez la section 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 sera associé au nœud et le pod d'installation sera créé si vous utilisez l'installation sur le nœud.

Cela se produit sur le contrôleur et implique l'étape AttachVolume à partir 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 indicateurs d'installation incorrects sont transmis à 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 de MountVolume.MountDevice

Une fois le volume associé à un nœud, il est mis en scène sur ce nœud.

Cela se produit sur le nœud et implique l'étape MountVolume.MountDevice à partir 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 utilisent 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
Impossible de se connecter à l'instance Parallelstore. Vérifiez que votre réseau VPC et vos points d'accès sont correctement configurés.

Échecs de MountVolume.SetUp

Une fois le volume mis en scène 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 pod

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 saturée (OOM). Envisagez d'augmenter la limite de mémoire du conteneur side-car à l'aide de l'annotation gke-parallelstore/memory-limit.

Si vous ne savez pas quelle quantité de mémoire vous souhaitez allouer au sidecar parallelstore, nous vous recommandons de définir gke-parallelstore/memory-limit: "0" pour supprimer 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 d'installation du volume a été interrompue en raison de la limitation de débit ou d'opérations existantes. Cette mise en garde est normale 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 avec les arguments non valides. Pour le provisionnement dynamique, vérifiez la classe de stockage. Pour le provisionnement statique, consultez la section 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 sidecar Parallelstore n'a pas été injecté. Vérifiez que l'annotation du 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 d'installation du volume a été interrompue en raison de la limite de débit ou d'opérations existantes. Cette mise en garde est normale 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 dans le volume persistant, le journal des erreurs indiquera les champs contenant les arguments non valides. Pour le provisionnement dynamique, vérifiez la classe de stockage. Pour le provisionnement statique, vérifiez le 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 monteur Parallelstore n'existe pas. Si le pod de montage a été supprimé par erreur, recréez toutes les charges de travail pour lancer 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 ne s'est pas lancé. 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 un peering pour le 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 sur votre compte utilisateur.

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

  • 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 vpc-peering 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
    

Plage d'adresses IP épuisée

La création d'instance peut échouer avec l'erreur d'épuisement de la plage suivante:

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 l'étendre.

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 être effectuée, car un budget d'interruptions de pod (PDB) est configuré pour n'autoriser aucune é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 les erreurs.

  2. Recherchez le nom du pod dans la section Budgets d'interruptions de pods non permissifs.

  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.