ノードのアップグレード用のリソースを確保する


このページでは、ノードのアップグレード戦略を使用してクラスタのノードを変更できるようにする方法について説明します。選択した戦略に応じて、Google Kubernetes Engine(GKE)Standard ノードプールの更新に十分なリソースがプロジェクトにあるかどうか確認することをおすすめします。

ノードのアップグレードに必要なリソース

選択したノード戦略と構成によっては、ノードのアップグレードで GKE に一時的に追加ノードを作成しなければならない場合があります。このため、GKE でノードプールをアップグレードする際に、追加のリソースが必要になることがあります。

特定の予約アフィニティのあるノードプールの場合、GKE が作成するすべてのノード(アップグレードに使用されるノードを含む)には、プロジェクトのリソース割り当てリソースの可用性予約容量が適用されます。

特別なマシンタイプの要件と容量の制約がある場合は、十分なリソースがあることを確認することを強くおすすめします。ノードをアップグレードしたり、予約の作成などの他のアクションを実行できるように、必要なリソースが少ない戦略の構成が必要になる場合があります。詳細については、リソースが制限された環境でのアップグレードをご覧ください。

さまざまなアップグレード戦略に必要なリソース

以降のセクションでは、利用可能なアップグレード戦略を使用するために必要な追加リソースについて説明します。アップグレードの問題が発生した場合は、アップグレード オペレーションを確認し、手順に沿ってアップグレード エラーを解決します。

サージ アップグレードのリソース

サージ アップグレードは、ノードのデフォルトのアップグレード戦略です。サージ アップグレードでは、maxSurge にゼロより大きい値が設定されていると、古いノードをドレインして削除する前に追加の VM が作成されます。このため、プロジェクトに十分なリソースがないと、アップグレードが失敗する可能性があります。

使用可能なリソースが maxSurge で指定されたノード数より少ない場合、並列アップグレードの数は maxSurgemaxUnavailable を加えた数より少なくなります。追加の容量がない場合は、リソースが制限された環境でアップグレードする方法をご覧ください。

次の表では、アップグレードのさまざまな動作の例を示しています。

アップグレードの設定 使用可能なリソースで許可される追加ノードの数 結果
maxSurge: 5 maxUnavailable: 0 5 5 ノードを並列にアップグレードします。
maxSurge: 5 maxUnavailable: 0 2 2 ノードだけを並列にアップグレードします。
maxSurge: 5 maxUnavailable: 0 0 追加のノードを確保できず、アップグレードの設定によって既存のノードを再起動することが禁止されているため、アップグレードは失敗します。オペレーションが成功するまで、GKE は自動アップグレードの試行を継続します。
maxSurge: 5 maxUnavailable: 1 5 6 ノードを並列にアップグレードすると同時に、アップグレードが原因でノードプールで一時的に失われるノードが 1 つのみになるようにします。
maxSurge: 5 maxUnavailable: 1 2 3 ノードだけを並列にアップグレードすると同時に、アップグレードが原因でノードプールで不足するノードが 1 つまでになるようにします。
maxSurge: 5 maxUnavailable: 1 0 ローリング アップグレード方式で各ノードを再作成することにより、ノードを 1 つずつアップグレードします。

Blue/Green アップグレードのリソース

Blue/Green アップグレードでは、ノードプール内のノード数が一時的に 2 倍になります。これは、ノードプールで一時的に 2 倍のリソースを必要とすることを意味します。十分なリソースがなく、この戦略を使用するようにノードプールを構成したときに、アップグレードのブロック解除が必要になった場合は、サージ アップグレードを構成します。この戦略を構成する場合は、ノードプールのノードで使用可能なリソースで動作するように、サージ アップグレード パラメータを構成します。詳細については、前のセクションのサージ アップグレードのリソースをご覧ください。

アップグレード操作でリソース関連のエラーが発生していないか確認する

アップグレード操作のオブジェクトを調べると、アップグレード操作の詳細に加えて、アップグレードが失敗した状況と理由に関する情報も確認できます。アップグレード操作のオブジェクトのリストを出力するには、次のコマンドを実行します。

gcloud container operations list \
    --filter="STATUS=DONE AND TYPE=UPGRADE_NODES AND targetLink:https://container.googleapis.com/v1/projects/PROJECT_ID/zones/COMPUTE_ZONE/clusters/CLUSTER_NAME"

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

  • PROJECT_ID: Google Cloud プロジェクトの ID。
  • COMPUTE_ZONE: クラスタの Compute Engine ゾーン
  • CLUSTER_NAME: クラスタの名前。

リソース割り当てが不十分であるために直近のアップグレードが失敗した場合、出力は次のようになります。

gcloud container operations describe operation-1234567891234-1abc2d3e
detail: "Insufficient quota to satisfy the request: waiting on IG: instance https://www.googleapis.com/compute/v1/projects/my-project-123/zones/us-central1-a/instances/gke-my-cluster-default-pool-123ab45c-de67\
  \ is still CREATING. Last attempt errors: [QUOTA_EXCEEDED] Instance 'gke-my-cluster-default-pool-123ab45c-de67'\
  \ creation failed: Quota 'IN_USE_ADDRESSES' exceeded.  Limit: 50.0 in region us-central1.\
...

失敗の理由が予約不足である場合、出力は次のようになります。

gcloud container operations describe operation-1234567891234-1abc2d3e
detail: "Reservation does not have enough resources for the request: waiting on IG:\
  \ instance https://www.googleapis.com/compute/v1/projects/my-project-123/zones/us-central1-a/instances/gke-my-cluster-default-pool-123ab45c-de67\
  \ is still CREATING. Last attempt error: [CONDITION_NOT_MET] Instance 'gke-my-cluster-default-pool-123ab45c-de67'\
  \ creation failed: Specified reservation 'foo' does not have available resources\
  \ for the request."

容量不足が原因の場合は、リソースの可用性に関するエラー メッセージが表示されます。

アップグレードのエラーの解決

リソース不足が原因でアップグレードが失敗した場合は、次の手順をお試しください。

  1. リソースを大量に消費しないアップグレード戦略を検討してください。Blue/Green アップグレードを使用している場合は、サージ アップグレードを検討してください。
  2. プロジェクトでリソースを消費している Compute Engine リソースの中で不要なものがあるかどうか確認します。見つかった場合は、そのリソースを削除してからアップグレードをやり直します。
  3. 最初の 2 つの手順でアップグレードのブロックを解除できない場合は、割り当ての増加をリクエストするか、特定の予約のサイズを増やします
  4. 特別なマシンタイプの要件や容量制約があり、リソースが制限された環境で運用している場合は、次のセクションでアップグレードのブロック解除の手順をご覧ください。

リソースが制限された環境でのアップグレード

ノードプールで使用している特定のリソース(GPU、TPU など)の容量が Google Cloud で制限されている場合は、予約を使用して、十分なリソースを確保することをおすすめします。十分なリソースがなく、既存の容量に予約がない場合、より多くの容量が利用可能になるまでノードをアップグレードできないことがあります。

追加の容量を取得できない場合、Blue/Green アップグレードは使用できません。サージ アップグレードの場合、maxSurge に追加ノードが必要です。maxUnavailable を使用した場合、容量が予約によるものでないと、GKE はアップグレード時にノードの容量を一時的に解放します。このため、容量が失われる可能性があります。

アップグレードが必要なノードプールに予約があるかどうかに応じて、次のガイダンスに従ってください。

容量が制限されているアップグレードで予約がない場合

ノードプールのノードに予約がない場合は、予約を作成することをおすすめします。ただし、サージ アップグレードができない場合は、maxSurge=1;maxUnavailable=0デフォルト構成でサージ アップグレードを使用することをおすすめします。この構成では、既存の容量が失われるリスクはありません。ただし、サージ アップグレードでは、容量が利用可能な場合にのみ、サージノードが作成されます。したがって、使用可能な容量がない場合はアップグレードに時間がかかり、各ノードのアップグレードに必要な容量が確保されるまで、ノードプールが部分的にアップグレードされた状態が継続する可能性があります。

予約を作成するか、既存の予約のサイズを増やすことをおすすめします。

容量が制限されているアップグレードで予約がある場合

ノードプールのノードに予約がある場合は、容量が制限されている環境でノードプールをアップグレードして、サージ アップグレードの速度と信頼性を調整できます。

予約に追加容量がある場合は、maxSurge を使用してサージノードを作成できます。一度に中断するノード数と追加容量に応じて、maxSurge を設定します。たとえば、一度に 1 つのノードのみを停止する場合や、追加のノードを 1 つしか作成できない場合は、maxSurge=1;maxUnavailable=0 を設定します。

追加の容量がない場合は、maxSurge=0;maxUnavailable=1 のように構成で maxUnavailable を使用できます。これにより、容量が予約されます。この構成では、ノードが 1 つずつ中断され、ノードが再作成されて更新されます。

次のステップ