このページでは、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 世代または第 4 世代
第 3 世代または第 4 世代のマシンシリーズのマシンタイプを使用する場合、クラスタの作成時にローカル SSD オプションを指定する必要はありません。各ノードにアタッチされるディスクの数は、マシンタイプによって異なります。
クラスタを作成するには、次のコマンドを実行します。
gcloud container clusters create CLUSTER_NAME \
--machine-type=MACHINE_TYPE \
--cluster-version CLUSTER_VERSION
次のように置き換えます。
CLUSTER_NAME
: クラスタの名前。MACHINE_TYPE
: 使用する第 3 世代または第 4 世代のマシンシリーズのマシンタイプ。CLUSTER_VERSION
: 第 3 世代または第 4 世代のマシンシリーズのマシンタイプでローカル 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 世代または第 4 世代
第 3 世代または第 4 世代のマシンシリーズのマシンタイプを使用する場合、ノードプールの作成時にローカル 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 世代または第 4 世代のマシンシリーズのマシンタイプ。NODE_VERSION
: 第 3 世代または第 4 世代のマシンシリーズのマシンタイプでローカル SSD をサポートする GKE ノードプールのバージョン。
ノードプール内のノードは cloud.google.com/gke-ephemeral-storage-local-ssd=true
ラベル付きで作成されます。ラベルは、次のコマンドを実行して確認できます。
kubectl describe node NODE_NAME
ローカル SSD を使用するエフェメラル ストレージを Autopilot クラスタで使用する
ローカル SSD は、次のいずれかの方法で Pod を構成するときに、エフェメラル ストレージとして使用できます。
- Pod を実行するマシンシリーズを明示的に選択し、
cloud.google.com/gke-ephemeral-storage-local-ssd: "true"
nodeSelector またはローカル SSD を含む容量予約を指定します。Autopilot でのマシンシリーズの選択の詳細については、マシンシリーズを選択して Autopilot Pod のパフォーマンスを最適化するをご覧ください。 - ローカル SSD をサポートする GPU タイプをリクエストし、
cloud.google.com/gke-ephemeral-storage-local-ssd: "true"
nodeSelector またはローカル SSD を含む容量予約のいずれかを指定します。NVIDIA H100(80 GB)GPU と NVIDIA A100(80 GB)GPU は、エフェメラル ストレージに常にローカル SSD を使用します。これらの GPU にそのノードセレクタを指定することはできません。Autopilot で GPU をリクエストする方法については、コンテナで GPU をリクエストするをご覧ください。
ローカル SSD と互換性のあるマシンシリーズのリストについては、Autopilot でローカル SSD をサポートするマシンシリーズをご覧ください。
ワークロード マニフェストでローカル SSD を直接リクエストする
エフェメラル ストレージにローカル SSD を使用するには、ワークロード マニフェストに cloud.google.com/gke-ephemeral-storage-local-ssd: "true"
nodeSelector を追加します。たとえば、次の Pod マニフェストは、GPU Pod のエフェメラル ストレージとしてローカル SSD を選択します。
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"
容量予約でローカル SSD をリクエストする
Compute Engine 容量予約を使用してローカル SSD を備えたマシンを予約すると、Autopilot は予約から使用可能なローカル SSD をノードにアタッチします。ワークロード マニフェストでローカル SSD を明示的に選択する必要はありません。Autopilot で予約を使用する方法については、Autopilot クラスタで容量予約を使用するをご覧ください。
たとえば、次の Pod マニフェストは、ローカル SSD を含む特定の予約を選択します。
apiVersion: v1
kind: Pod
metadata:
name: local-ssd-pod
spec:
nodeSelector:
cloud.google.com/machine-family: MACHINE_SERIES
cloud.google.com/reservation-name: localssd-count-reservation
cloud.google.com/reservation-affinity: "specific"
containers:
- name: my-container
image: "k8s.gcr.io/pause"
resources:
requests:
cpu: 6
memory: "25Gi"
ephemeral-storage: "100Gi"
limits:
cpu: 12
memory: "50Gi"
ephemeral-storage: "200Gi"
MACHINE_SERIES
は、ローカル SSD もサポートするサポート対象のマシンシリーズに置き換えます。指定したマシンシリーズがローカル SSD をサポートしていない場合、デプロイに失敗します。
Autopilot でローカル SSD をサポートするマシンシリーズ
Autopilot クラスタは、次のマシンシリーズでエフェメラル ストレージにローカル SSD を使用することをサポートしています。
(容量予約の場合のみ) |
(容量予約の場合のみ) |
(容量予約の場合のみ) |
(容量予約の場合のみ) |
(容量予約の場合のみ) |
(常にバンドル) |
(容量予約の場合のみ) |
(常にバンドル) |
(常にバンドル) |
以前の 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 ボリュームとしてのエフェメラル ストレージ
emptyDir
ボリュームなど、一時ストレージにローカル 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 のストレージのトラブルシューティングをご覧ください。