このドキュメントでは、Google Kubernetes Engine(GKE)ノード上の Compute Engine Persistent Disk と Hyperdisk の永続ボリュームのアタッチ上限の仕組みについて説明します。ワークロードのスケジューリングとノードプールのサイズ設定を適切に行うには、GKE ノードにアタッチできる永続ボリュームの最大数を理解することが重要です。特に単一のインスタンスへのアタッチ上限が異なる複数のディスクタイプを使用する場合、ワークロードのスケジューリングをより詳細に制御するには、ノードラベルを使用してデフォルトのアタッチ上限をオーバーライドできます。
このドキュメントは、ストレージの作成と割り当てを行うストレージ スペシャリストと、ワークロードのスケジューリングとノードプールのサイズ設定を管理する GKE 管理者を対象としています。 Cloud de Confiance by S3NS のコンテンツで使用されている一般的なロールとタスク例の詳細については、GKE Enterprise ユーザーの一般的なロールとタスクをご覧ください。
概要
GKE で、Compute Engine Persistent Disk CSI ドライバ(pd.csi.storage.gke.io)を使用して PersistentVolume(PV)をリクエストすると、 Cloud de Confiance Persistent Disk サービスからブロック ストレージ ボリュームがプロビジョニングされます。
GKE クラスタで Compute Engine Persistent Disk CSI(PDCSI)ドライバを有効にすると、PDCSI ドライバはノードあたりの永続ボリュームのアタッチ上限を計算して kubelet に報告します。Kubernetes スケジューラは、この情報に基づいてスケジューリングの決定を行い、アタッチメント容量に達したノードに対して、永続ボリュームを必要とする Pod を過剰にスケジュールしないようにします。PDCSI ドライバが不正確なアタッチ上限(実際の上限よりも大きい数値)を報告した場合、Pod はスケジュールされず、Pending 状態のままになります。これは、Hyperdisk と Persistent Disk のアタッチ上限が異なる C3 などの第 3 世代のマシンタイプで発生する可能性があります。
永続ボリュームのアタッチ上限について
第 4 世代より前のマシンでは、Compute Engine PDCSI ドライバは、永続ボリュームのアタッチ上限をすべてのマシンタイプで合計 128 個のディスク(127 個のデータディスクと 1 個のブートディスク)に設定します。アタッチ上限は、Persistent Disk ボリュームと Hyperdisk ボリュームの両方の合計に適用されます。Hyperdisk のアタッチ上限は、基盤となる Compute Engine マシンタイプ、マシン上の vCPU の数、特定の Hyperdisk タイプによって決まります。
例:
- C4 などの第 4 世代のマシンタイプの場合、PDCSI ドライバは、ノードの vCPU 数に基づいて計算された正確なデフォルトのアタッチ上限を Kubernetes に報告します。報告されるアタッチ上限は通常、8~128 個の永続ボリュームの範囲内になります。
- 一方、C3 などの第 3 世代のマシンタイプの場合、PDCSI ドライバは、デフォルトのアタッチ上限を固定の上限である 128 個のディスクとして Kubernetes に報告します。vCPU 数に基づく実際の上限は 128 よりも少ない可能性があるため、Pod のスケジューリングが失敗する可能性があります。
デフォルトのアタッチ上限は、ノードラベルを使用してオーバーライドできます。
Compute Engine ドキュメントの次のリソースをご覧ください。
- 使用可能な Compute Engine マシンの世代については、Compute Engine の用語セクションの表をご覧ください。
- マシンタイプの一覧とそれぞれに互換性のある Persistent Disk タイプについては、マシンシリーズのサポートをご覧ください。
- Hyperdisk タイプごとの CPU 数に基づく、サポートされている Hyperdisk のアタッチ上限については、VM あたりの Hyperdisk ボリュームの最大数をご覧ください。
- Hyperdisk のアタッチ上限がノードに適用される仕組みについては、Hyperdisk VM あたりの上限の概要をご覧ください。
永続ボリュームのデフォルトのアタッチ上限をオーバーライドする
特定の要件またはノード構成により、ノードに特定の数の永続ボリュームをアタッチする場合は、ノードラベル node-restriction.kubernetes.io/gke-volume-attach-limit-override: VALUE を使用して、ノードプールに対する永続ボリュームのデフォルトのアタッチ上限をオーバーライドできます。
このノードラベルは、次の GKE バージョンで使用できます。
1.32.4-gke.1698000以降。1.33.1-gke.1386000以降。
新しいノードプール
永続ボリュームのアタッチ上限を指定して新しいノードプールを作成するには、次のコマンドを実行します。
gcloud container node-pools create NODE_POOL_NAME \
--cluster=CLUSTER_NAME \
--node-labels=node-restriction.kubernetes.io/gke-volume-attach-limit-override=VALUE
既存のノードプール
既存のノードプールの現在の永続ボリュームのアタッチ上限を変更する手順は次のとおりです。
ノードプールのアタッチ上限を更新します。
gcloud container node-pools update NODE_POOL_NAME \ --cluster=CLUSTER_NAME \ --node-labels=node-restriction.kubernetes.io/gke-volume-attach-limit-override=VALUEpdcsi-nodeDaemonSet を再起動します。kubectl rollout restart ds pdcsi-node -n kube-systempdcsi-nodePod がRunning状態になった後、新しいアタッチ上限が適用されます。
次のように置き換えます。
NODE_POOL_NAME: 作成または更新するノードプールの名前。CLUSTER_NAME: 作成または更新するノードプールのクラスタの名前。VALUE:0~127の整数。アタッチ可能な新しい永続ボリューム数を指定します。127 より大きい値を指定すると、ノードラベルは無視され、PDCSI ドライバは永続ボリュームのデフォルトのアタッチ上限を使用します。デフォルトの上限は、第 3 世代マシンでは 128、第 4 世代マシンでは vCPU 数に基づく値です。
オーバーライドを確認する
オーバーライドが正しく適用されたかどうかを確認するには、ノードラベルとノード容量を確認します。
次のコマンドで、NODE_NAME は、override ノードラベルを適用した特定のノードプールに属するノードの名前に置き換えます。
ノードラベルを確認します。
kubectl get node NODE_NAME --show-labels出力にはラベル
node-restriction.kubernetes.io/gke-volume-attach-limit-overrideが含まれます。ノード容量を確認します。
kubectl describe node NODE_NAME出力には
attachable-volumes-gce-pd容量が含まれます。これは、ノードプールに設定したオーバーライド値と一致するはずです。詳細については、ノードの割り当て可能なリソースを確認するをご覧ください。