Résoudre les problèmes liés aux opérations simultanées


Lorsque vous essayez de modifier votre cluster Google Kubernetes Engine (GKE) ou ses pools de nœuds, votre action peut être temporairement bloquée, car une autre opération est en cours d'exécution. Ce problème peut retarder les mises à jour critiques, l'administration des clusters et les déploiements d'applications.

Cette page vous explique comment identifier l'opération en cours d'exécution. Comprendre l'opération active vous aide à estimer le délai et à déterminer quand réessayer votre action.

Ces informations sont importantes à la fois pour les développeurs d'applications, qui peuvent rencontrer ces limites lors du déploiement ou de la modification d'applications, et pour les administrateurs et opérateurs de plate-forme, qui gèrent le cycle de vie global du cluster, les mises à niveau et doivent résoudre les problèmes liés aux tâches administratives bloquées. Pour en savoir plus sur les rôles courants et les exemples de tâches que nous citons dans le contenuGoogle Cloud , consultez Rôles utilisateur et tâches courantes de GKE.

Comprendre les erreurs d'opérations simultanées

Dans GKE, une opération de cluster est une action qui modifie l'état du plan de contrôle ou des pools de nœuds de votre cluster. Ces opérations sont gérées par GKE et peuvent être lancées par vous ou par GKE à des fins de maintenance. Voici quelques opérations courantes sur les clusters :

  • Création ou suppression du cluster.
  • Mise à niveau de la version du plan de contrôle du cluster.
  • Créer, mettre à jour, redimensionner ou supprimer des pools de nœuds
  • Modifier les paramètres au niveau du cluster, comme activer ou désactiver des fonctionnalités.
  • Réparations automatiques du plan de contrôle initiées par GKE.

Lorsque vous effectuez des opérations sur vos clusters, des messages d'erreur semblables à ceux ci-dessous peuvent s'afficher :

Cluster is running incompatible operation OPERATION_NAME
Cluster is currently being created, deleted, updated or repaired and cannot be updated
Operation OPERATION_NAME is currently ACTIONING cluster CLUSTER_NAME. Please wait and try again once it is done

Ces erreurs peuvent inclure les valeurs suivantes :

  • OPERATION_NAME : ID unique d'une opération déjà en cours d'exécution sur votre cluster. Utilisez ce nom pour suivre l'état de cette opération préexistante qui empêche le démarrage de votre nouvelle opération.
  • ACTIONING : action effectuée sur le cluster. Par exemple, Creating ou Updating.
  • CLUSTER_NAME : nom du cluster ciblé par l'opération.

Ces erreurs se produisent, car GKE limite le nombre d'opérations pouvant être exécutées simultanément pour éviter les conflits. En règle générale, GKE n'autorise qu'une seule opération au niveau du cluster ou une seule opération par pool de nœuds à s'exécuter simultanément. GKE effectue également ses propres actions automatiques, telles que les mises à niveau du plan de contrôle, qui sont comptabilisées dans cette limite et peuvent vous empêcher temporairement de démarrer une nouvelle tâche.

Résoudre les erreurs d'opération simultanée

Si vous recevez un message d'erreur indiquant qu'une autre opération est en cours, identifiez la tâche en cours et attendez qu'elle se termine :

  1. Si vous ne connaissez pas le nom de l'opération bloquante, listez toutes les opérations en cours et en attente pour votre cluster :

     gcloud container operations list \
         --location=LOCATION \
         --filter '(targetLink~/clusters/CLUSTER_NAME$ OR targetLink~/clusters/CLUSTER_NAME/) AND status!=DONE' \
         --format json
    

    Remplacez les éléments suivants :

    • LOCATION : région ou zone Compute Engine (par exemple, us-central1 ou us-central1-a) du cluster, selon qu'il s'agit d'un cluster régional ou zonal.
    • CLUSTER_NAME : nom du cluster dont l'opération a échoué.

      Le résultat ressemble à ce qui suit :

      {
         "name": "operation-0978307200000-00112233-4455-6677-8899-aabbccddeeff",
         "operationType": "UPDATE_CLUSTER",
         "selfLink": "https://container.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/operations/operation-0978307200000-00112233-4455-6677-8899-aabbccddeeff",
         "startTime": "2001-01-01T00:00:00.000000000Z",
         "status": "RUNNING",
         "targetLink": "https://container.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/clusters/CLUSTER_NAME/nodePools/NODE_POOL_NAME",
         "zone": "LOCATION"
      }
      

      Dans le résultat, examinez le champ name pour chaque opération. Cette valeur correspond au nom de l'opération qui empêche le démarrage de votre nouvelle opération. Vous aurez besoin de cette valeur à l'étape suivante.

      Pour en savoir plus sur les autres champs de la sortie, consultez la documentation de l'API pour projects.locations.operations.

  2. Patientez jusqu'à la fin de l'opération :

    gcloud container operations wait OPERATION_NAME \
        --location=LOCATION
    

    Remplacez OPERATION_NAME par le nom d'une opération de blocage provenant d'un message d'erreur ou de l'étape précédente.

    Cette commande surveille activement l'opération et se ferme une fois celle-ci terminée.

  3. Une fois que l'opération de blocage a l'état DONE, réessayez l'opération à l'origine de l'erreur.

Étapes suivantes