ローカル 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 ボリュームを含むノードでそれが実行されるようにスケジュールします。ローカル 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 マニフェストでは、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 のストレージのトラブルシューティングをご覧ください。

次のステップ