このページでは、ノードのアップグレード戦略を使用してクラスタのノードを変更できるようにする方法について説明します。選択した戦略に応じて、Google Kubernetes Engine(GKE)Standard ノードプールの更新に十分なリソースがプロジェクトにあるかどうか確認することをおすすめします。
ノードのアップグレードに必要なリソース
選択したノード戦略と構成によっては、ノードのアップグレードで GKE に一時的に追加ノードを作成しなければならない場合があります。このため、GKE でノードプールをアップグレードする際に、追加のリソースが必要になることがあります。
特定の予約アフィニティのあるノードプールの場合、GKE が作成するすべてのノード(アップグレードに使用されるノードを含む)には、プロジェクトのリソース割り当て、リソースの可用性、予約容量が適用されます。
特別なマシンタイプの要件と容量の制約がある場合は、十分なリソースがあることを確認することを強くおすすめします。ノードをアップグレードしたり、予約の作成などの他のアクションを実行できるように、必要なリソースが少ない戦略の構成が必要になる場合があります。詳細については、リソースが制限された環境でのアップグレードをご覧ください。
さまざまなアップグレード戦略に必要なリソース
以降のセクションでは、利用可能なアップグレード戦略を使用するために必要な追加リソースについて説明します。アップグレードの問題が発生した場合は、アップグレード オペレーションを確認し、手順に沿ってアップグレード エラーを解決します。
サージ アップグレードのリソース
サージ アップグレードは、ノードのデフォルトのアップグレード戦略です。サージ アップグレードでは、maxSurge
にゼロより大きい値が設定されていると、古いノードをドレインして削除する前に追加の VM が作成されます。このため、プロジェクトに十分なリソースがないと、アップグレードが失敗する可能性があります。
使用可能なリソースが maxSurge
で指定されたノード数より少ない場合、並列アップグレードの数は maxSurge
に maxUnavailable
を加えた数より少なくなります。追加の容量がない場合は、リソースが制限された環境でアップグレードする方法をご覧ください。
次の表では、アップグレードのさまざまな動作の例を示しています。
アップグレードの設定 | 使用可能なリソースで許可される追加ノードの数 | 結果 |
---|---|---|
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."
容量不足が原因の場合は、リソースの可用性に関するエラー メッセージが表示されます。
アップグレードのエラーの解決
リソース不足が原因でアップグレードが失敗した場合は、次の手順をお試しください。
- リソースを大量に消費しないアップグレード戦略を検討してください。Blue/Green アップグレードを使用している場合は、サージ アップグレードを検討してください。
- プロジェクトでリソースを消費している Compute Engine リソースの中で不要なものがあるかどうか確認します。見つかった場合は、そのリソースを削除してからアップグレードをやり直します。
- 最初の 2 つの手順でアップグレードのブロックを解除できない場合は、割り当ての増加をリクエストするか、特定の予約のサイズを増やします。
- 特別なマシンタイプの要件や容量制約があり、リソースが制限された環境で運用している場合は、次のセクションでアップグレードのブロック解除の手順をご覧ください。
リソースが制限された環境でのアップグレード
ノードプールで使用している特定のリソース(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 つずつ中断され、ノードが再作成されて更新されます。
次のステップ
- ノードのアップグレード戦略について理解する
- リソース割り当ての詳細について理解する
- 予約の使用の詳細を確認する