このページでは、Google Kubernetes Engine(GKE)クラスタにローカル SSD ストレージをプロビジョニングする方法と、クラスタ内のノードにアタッチされたローカル SSD を使用するエフェメラル ストレージのデータを消費するようにワークロードを構成する方法について説明します。
GKE でのローカル SSD のサポートの詳細については、ローカル SSD ストレージについてをご覧ください。
準備
作業を始める前に、次のことを確認してください。
- Google Kubernetes Engine API を有効にする。 Google Kubernetes Engine API の有効化
- このタスクに Google Cloud CLI を使用する場合は、gcloud CLI をインストールして初期化する。すでに gcloud CLI をインストールしている場合は、
gcloud components update
を実行して最新のバージョンを取得する。
ローカル SSD を使用するエフェメラル ストレージを備えたクラスタまたはノードプールを作成する
Google Cloud CLI を使用して、ローカル SSD を使用するエフェメラル ストレージを備えたクラスタまたはノードプールを作成します。
ローカル SSD ボリュームを基盤とするフルマネージドのローカル エフェメラル ストレージをアタッチするには、--ephemeral-storage-local-ssd
オプションを使用します。このストレージは Pod のライフサイクルに関連付けられます。Pod がエフェメラル ストレージをリクエストすると、GKE は、エフェメラル ストレージとして構成されたローカル SSD ボリュームを含むノードでそれが実行されるようにスケジュールします。ローカル SSD をより特殊な方法で、またはより細かく制御する必要がある場合は、代わりにローカル SSD を使用する raw ブロック ストレージを使用することをおすすめします。
クラスタの自動スケーリングが有効になっている場合、クラスタで追加のエフェメラル ストレージが必要になったときに GKE によってノードが自動スケーリングされます。Pod は、emptyDir
ボリュームを介してローカル SSD ボリュームのデータにアクセスできます。
クラスタまたはノードプールを作成するために実行する gcloud CLI コマンドは、選択したマシンタイプのマシンシリーズの世代によって異なります。たとえば、N1 マシンタイプと N2 マシンタイプはそれぞれ第 1 世代と第 2 世代のマシンシリーズに属していますが、C3 マシンタイプは第 3 世代のマシンシリーズに属しています。
ローカル SSD を使用するクラスタを作成する
第 1 世代または第 2 世代
第 1 世代または第 2 世代マシンシリーズのマシンタイプを使用している場合は、--ephemeral-storage-local-ssd count=NUMBER_OF_DISKS
オプションを指定してクラスタを作成します。このオプションにより、kubelet エフェメラル ストレージに使用する指定された数のローカル SSD ボリュームが各ノードにプロビジョニングされます。
これらの設定は、デフォルトのノードプールにのみ適用されます。後続のノードプールにローカル SSD が必要な場合は、ノードプールの作成時に指定します。
GKE バージョン 1.25.3-gke.1800 以降で実行され、デフォルト プールがローカル SSD ボリュームを使用するクラスタを作成するには、次のコマンドを実行します。
gcloud container clusters create CLUSTER_NAME \
--ephemeral-storage-local-ssd count=NUMBER_OF_DISKS \
--machine-type=MACHINE_TYPE \
--release-channel CHANNEL_NAME
次のように置き換えます。
CLUSTER_NAME
: クラスタの名前。NUMBER_OF_DISKS
: 各ノードでプロビジョニングするローカル SSD ボリュームの数。これらのボリュームは、ノードの設定時に単一の論理ボリュームに結合されます。ボリュームの最大数はマシンタイプとリージョンによって異なります。一部のローカル SSD 容量がシステムで使用するために予約されていることに留意してください。MACHINE_TYPE
: 使用するマシンタイプ。ローカル SSD はデフォルトのe2-medium
タイプでは使用できないため、このフィールドは必須です。CHANNEL_NAME
: 1.25.3-gke.1800 より後の GKE バージョンを含むリリース チャンネル。リリース チャンネルを使用しない場合は、--release-channel
の代わりに--cluster-version
フラグを使用して、1.25.3-gke.1800 より後の有効なバージョンを指定することもできます。有効なバージョンを確認するには、gcloud container get-server-config
コマンドを使用します。
第 3 世代
第 3 世代のマシンシリーズのマシンタイプを使用する場合、クラスタの作成時にローカル SSD オプションを指定する必要はありません。各ノードにアタッチされるディスクの数は、マシンタイプによって異なります。
クラスタを作成するには、次のコマンドを実行します。
gcloud container clusters create CLUSTER_NAME \
--machine-type=MACHINE_TYPE \
--cluster-version CLUSTER_VERSION
次のように置き換えます。
CLUSTER_NAME
: クラスタの名前。MACHINE_TYPE
: 使用する第 3 世代のマシンシリーズのマシンタイプ。CLUSTER_VERSION
: 第 3 世代のマシンシリーズのマシンタイプでローカル SSD をサポートする GKE クラスタ バージョン。
ローカル SSD でノードプールを作成する
第 1 世代または第 2 世代
GKE バージョン 1.25.3-gke.1800 以降で実行され、ローカル SSD ボリュームを使用するノードプールを作成するには、次のコマンドを実行します。
gcloud container node-pools create POOL_NAME \
--cluster=CLUSTER_NAME \
--ephemeral-storage-local-ssd count=NUMBER_OF_DISKS \
--machine-type=MACHINE_TYPE
次のように置き換えます。
POOL_NAME
: 新しいノードプールの名前。CLUSTER_NAME
: クラスタの名前。NUMBER_OF_DISKS
: 各ノードでプロビジョニングするローカル SSD ボリュームの数。これらのボリュームは、ノードの設定時に単一の論理ボリュームに結合されます。ボリュームの最大数はマシンタイプとリージョンによって異なります。一部のローカル SSD 容量はシステムで使用するために予約されていることに留意してください。MACHINE_TYPE
: 使用するマシンタイプ。ローカル SSD はデフォルトのe2-medium
タイプでは使用できないため、このフィールドは必須です。
第 3 世代
第 3 世代のマシンシリーズのマシンタイプを使用する場合、ノードプールの作成時にローカル SSD オプションを指定する必要はありません。各ノードにアタッチされるボリュームの数は、マシンタイプによって異なります。
ノードプールを作成するには、次のコマンドを実行します。
gcloud container node-pools create POOL_NAME \
--cluster=CLUSTER_NAME \
--machine-type=MACHINE_TYPE \
--node-version NODE_VERSION
次のように置き換えます。
POOL_NAME
: 新しいノードプールの名前。CLUSTER_NAME
: クラスタの名前。MACHINE_TYPE
: 使用する第 3 世代のマシンシリーズのマシンタイプ。NODE_VERSION
: 第 3 世代のマシンシリーズのマシンタイプでローカル SSD をサポートする GKE ノードプール バージョン。
ノードプール内のノードは cloud.google.com/gke-ephemeral-storage-local-ssd=true
ラベル付きで作成されます。ラベルは、次のコマンドを実行して確認できます。
kubectl describe node NODE_NAME
ローカル SSD を使用するエフェメラル ストレージを Autopilot クラスタで使用する
ローカル SSD は、次の Autopilot コンピューティング クラスで使用できます。
Performance
Accelerator
Performance
クラスの場合は、Performance クラスの Pod でローカル SSD を使用するの説明に従って操作します。
Accelerator
コンピューティング クラスで、NVIDIA L4 GPU を使用し、GKE パッチ バージョン 1.28.6-gke.1369000 以降または 1.29.1-gke.1575000 以降を実行している場合は、エフェメラル ストレージにローカル SSD を使用できます。NVIDIA H100(80 GB)GPU と NVIDIA A100(80 GB)GPU は、エフェメラル ストレージに常にローカル SSD を使用します。これらの GPU に次のノードセレクタを指定することはできません。
エフェメラル ストレージにローカル SSD を使用するには、ワークロード マニフェストに cloud.google.com/gke-ephemeral-storage-local-ssd: "true"
nodeSelector を追加します。Pod の仕様は、次の例のようになります。
apiVersion: v1
kind: Pod
metadata:
name: l4-localssd-pod
spec:
containers:
- name: my-gpu-container
image: nvidia/cuda:11.0.3-runtime-ubuntu20.04
command: ["/bin/bash", "-c", "--"]
args: ["while true; do sleep 600; done;"]
resources:
requests:
cpu: 16
memory: 64Gi
ephemeral-storage: 800Gi
limits:
cpu: 16
memory: 64Gi
ephemeral-storage: 800Gi
nvidia.com/gpu: 8
nodeSelector:
cloud.google.com/gke-accelerator: nvidia-l4
cloud.google.com/gke-ephemeral-storage-local-ssd: "true"
以前の API パラメータの使用
--local-ssd-count
オプションは、SCSI ローカル SSD をサポートする以前の API パラメータです。Compute Engine の第 3 世代のマシンシリーズは SCSI をサポートせず、NVMe のみをサポートしています。このオプションは、Windows Server クラスタでのみ使用してください。現在 Linux クラスタで以前の API パラメータを使用している場合は、代わりに --ephemeral-storage-local-ssd
オプションを使用することをおすすめします。
Windows Server クラスタのローカル SSD
Windows Server ノードプールを実行するクラスタでローカル SSD を使用する場合は、ノードにログインしてボリュームをフォーマットしてから使用する必要があります。次の例では、ローカル SSD ボリュームが NTFS ファイル システムでフォーマットされています。ボリュームの下にディレクトリを作成することもできます。この例では、ディレクトリはディスク D にあります。
PS C:\> Get-Disk | Where partitionstyle -eq 'raw' | Initialize-Disk -PartitionStyle MBR -PassThru | New-Partition -AssignDriveLetter -UseMaximumSize | Format-Volume -FileSystem ntfs -Confirm:$false
PS C:\> mkdir D:\test-ssd
ローカル SSD ボリュームにアクセスする
次の例は、ローカル SSD を使用するエフェメラル ストレージにアクセスする方法を示しています。
emptyDir Volume としてのエフェメラル ストレージ
emptyDir
Volume など、一時ストレージにローカル SSD を使用するように GKE ノードプールを構成できます。
次の Pod マニフェストでは、emptyDir
と cloud.google.com/gke-ephemeral-storage-local-ssd
のノードセレクタを使用します。Deployment マニフェストや StatefulSet マニフェストにも、同様の手法を適用できます。
エフェメラル ストレージ リソース リクエストを選択する場合は、システムで使用するために予約されたローカル SSD の容量を考慮してください。
apiVersion: v1
kind: Pod
metadata:
name: POD_NAME
spec:
containers:
- name: CONTAINER_NAME
image: "registry.k8s.io/pause"
resources:
requests:
ephemeral-storage: "200Gi"
volumeMounts:
- mountPath: /cache
name: scratch-volume
nodeSelector:
cloud.google.com/gke-ephemeral-storage-local-ssd: "true"
volumes:
- name: scratch-volume
emptyDir: {}
トラブルシューティング
トラブルシューティングの手順については、GKE のストレージのトラブルシューティングをご覧ください。