ローカル SSD を使用するエフェメラル ストレージをプロビジョニングして使用する


このページでは、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 ボリュームがエフェメラル ストレージとして構成されているノードで実行されるようにスケジュールします。

クラスタの自動スケーリングが有効になっている場合、クラスタで追加のエフェメラル ストレージが必要な際に 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 オプションを指定してクラスタを作成します。このオプションは、各ノードにアタッチするローカル 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/compute-class: Accelerator
    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 ボリュームとしてのエフェメラル ストレージ

emptyDir ボリュームなど、一時ストレージにローカル SSD を使用するように GKE ノードプールを構成できます。

次の Pod マニフェストでは、emptyDircloud.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 のストレージのトラブルシューティングをご覧ください。

次のステップ