同時実行オペレーションのトラブルシューティング


Google Kubernetes Engine(GKE)クラスタまたはそのノードプールを変更しようとすると、別のオペレーションが実行されているため、アクションが一時的にブロックされることがあります。この問題により、重要な更新、クラスタ管理、アプリケーションのデプロイが遅延する可能性があります。

このページでは、実行中のオペレーションを特定する方法について説明します。アクティブなオペレーションを把握することで、遅延を推定し、アクションを再試行するタイミングを判断できます。

この情報は、アプリケーションのデプロイや変更時にこれらの上限に遭遇する可能性のあるアプリケーション デベロッパーと、クラスタのライフサイクル全体を管理し、アップグレードを行い、ブロックされた管理タスクのトラブルシューティングを行う必要のあるプラットフォーム管理者とオペレーターの両方にとって重要です。Google Cloud のコンテンツで使用されている一般的なロールとタスクの例の詳細については、一般的な GKE ユーザー ロールとタスクをご覧ください。

同時実行オペレーション エラーについて

GKE では、クラスタ オペレーションは、クラスタのコントロール プレーンまたはノードプールの状態を変更するアクションです。これらのオペレーションは GKE によって管理され、ユーザーが開始することも、メンテナンスのために GKE が開始することもできます。一般的なクラスタ オペレーションは次のとおりです。

  • クラスタの作成または削除。
  • クラスタのコントロール プレーンのバージョンをアップグレードしています。
  • ノードプールの作成、更新、サイズ変更、削除。
  • 機能の有効化や無効化など、クラスタレベルの設定を変更する。
  • GKE によって開始されたコントロール プレーンの自動修復。

クラスタでオペレーションを実行すると、次のようなエラー メッセージが表示されることがあります。

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

これらのエラーには次の値が含まれることがあります。

  • OPERATION_NAME: クラスタで実行中のオペレーションの一意の ID。この名前を使用して、新しいオペレーションの開始をブロックしている既存のオペレーションのステータスを追跡します。
  • ACTIONING: クラスタで実行されているアクション。たとえば、CreatingUpdating です。
  • CLUSTER_NAME: オペレーションのターゲットとなるクラスタの名前。

これらのエラーは、競合を防ぐために GKE が同時に実行できるオペレーションの数を制限しているために発生します。通常、GKE では、クラスタレベルで 1 つのオペレーション、またはノードプールごとに 1 つのオペレーションのみを同時に実行できます。GKE は、コントロール プレーンのアップグレードなどの独自の自動アクションも実行します。これらのアクションは上限にカウントされ、新しいタスクの開始が一時的にブロックされることがあります。

同時実行オペレーション エラーを解決する

別のオペレーションが進行中であることを示すエラーが表示された場合は、進行中のタスクを特定して、そのタスクが完了するまで待ちます。

  1. ブロックしているオペレーションの名前がわからない場合は、クラスタで進行中または保留中のオペレーションをすべて一覧表示します。

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

    次のように置き換えます。

    • LOCATION: クラスタがリージョン クラスタかゾーンクラスタかに応じて、クラスタの Compute Engine リージョンまたはゾーン(us-central1us-central1-a など)。
    • CLUSTER_NAME: 失敗したオペレーションを含むクラスタの名前。

      出力は次のようになります。

      {
         "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"
      }
      

      出力で、各オペレーションの name フィールドを確認します。この値は、新しいオペレーションの開始をブロックしているオペレーションの名前です。この値は次のステップで必要になります。

      出力の他のフィールドの詳細については、projects.locations.operations の API ドキュメントをご覧ください。

  2. オペレーションが完了するまで待ちます。

    gcloud container operations wait OPERATION_NAME \
        --location=LOCATION
    

    OPERATION_NAME は、エラー メッセージまたは前の手順で取得したブロック オペレーションの名前に置き換えます。

    このコマンドは、オペレーションをアクティブにモニタリングし、オペレーションが完了すると終了します。

  3. ブロッキング オペレーションのステータスが DONE になったら、エラーの原因となったオペレーションを再試行します。

次のステップ

  • このドキュメントで問題を解決できない場合は、サポートを受けるで、次のトピックに関するアドバイスなど、詳細なヘルプをご覧ください。