Provisioning e utilizzo dello spazio di archiviazione temporaneo basato su SSD locale


Questa pagina spiega come eseguire il provisioning dello spazio di archiviazione SSD locale nei cluster Google Kubernetes Engine (GKE) e come configurare i carichi di lavoro in modo che consumino i dati dallo spazio di archiviazione temporaneo basato su SSD locale collegato ai nodi del cluster.

Per scoprire di più sul supporto delle unità SSD locali su GKE, consulta Informazioni sullo spazio di archiviazione SSD locale.

Prima di iniziare

Prima di iniziare, assicurati di aver eseguito le seguenti operazioni:

  • Attiva l'API Google Kubernetes Engine.
  • Attiva l'API Google Kubernetes Engine
  • Se vuoi utilizzare Google Cloud CLI per questa attività, installa e poi inizializza gcloud CLI. Se hai già installato gcloud CLI, ottieni la versione più recente eseguendo gcloud components update.

Creare un cluster o un pool di nodi con archiviazione temporanea basata su SSD locali

Utilizza Google Cloud CLI per creare un cluster o un pool di nodi con archiviazione temporanea basata su SSD locale.

Utilizza l'opzione --ephemeral-storage-local-ssd per collegare archiviazione temporanea locale completamente gestita supportata da volumi SSD locali. Questo spazio di archiviazione è legato al ciclo di vita dei pod. Quando i pod richiedono l'archiviazione temporanea, GKE li pianifica per l'esecuzione su nodi con volumi SSD locali configurati come archiviazione temporanea. Se vuoi un controllo più specializzato o granulare sui tuoi SSD locali, consigliamo di utilizzare lo spazio di archiviazione a blocchi non elaborati basato su SSD locali.

Se hai attivato la scalabilità automatica del cluster, GKE esegue la scalabilità automatica dei nodi quando il cluster ha bisogno di più spazio di archiviazione temporaneo. I pod possono accedere ai dati sui volumi SSD locali tramite il volume emptyDir.

Il comando gcloud CLI che esegui per creare il cluster o il pool di nodi dipende dalla generazione della serie di macchine del tipo di macchina selezionato. Ad esempio, i tipi di macchine N1 e N2 appartengono rispettivamente a una serie di macchine di prima e seconda generazione, mentre i tipi di macchine C3 appartengono a una serie di macchine di terza generazione.

Creare un cluster con SSD locale

1ª o 2ª generazione

Se utilizzi un tipo di macchina di una serie di macchine di prima o seconda generazione, crea il cluster specificando l'opzione --ephemeral-storage-local-ssd count=NUMBER_OF_DISKS. Questa opzione esegue il provisioning del numero specificato di volumi SSD locali su ciascun nodo da utilizzare per l'archiviazione temporanea di kubelet.

Queste impostazioni si applicano solo al pool di nodi predefinito. Se i node pool successivi richiedono SSD locali, specificalo durante la creazione del node pool.

Per creare un cluster in esecuzione su GKE versione 1.25.3-gke.1800 o superiore in cui il pool predefinito utilizza volumi SSD locali, esegui il seguente comando:

gcloud container clusters create CLUSTER_NAME \
    --ephemeral-storage-local-ssd count=NUMBER_OF_DISKS \
    --machine-type=MACHINE_TYPE \
    --release-channel CHANNEL_NAME

Sostituisci quanto segue:

  • CLUSTER_NAME: il nome del cluster.
  • NUMBER_OF_DISKS: il numero di volumi SSD locali da eseguire sul provisioning su ogni nodo. Questi volumi vengono combinati in un unico volume logico durante la configurazione del nodo. Il numero massimo di volumi varia in base al tipo di macchina e alla regione. Tieni presente che parte della capacità dell'unità SSD locale è riservata per l'utilizzo del sistema.
  • MACHINE_TYPE: il tipo di macchina da utilizzare. Questo campo è obbligatorio, poiché l'unità SSD locale non può essere utilizzata con il tipo e2-medium predefinito.
  • CHANNEL_NAME: un canale di rilascio che include le versioni di GKE successive alla 1.25.3-gke.1800. Se preferisci non utilizzare un canale di rilascio, puoi anche usare il flag --cluster-version anziché --release-channel, specificando una versione valida successiva a 1.25.3-gke.1800. Per determinare le versioni valide, utilizza il comando gcloud container get-server-config.

Terza generazione

Se utilizzi un tipo di macchina di una serie di macchine di terza generazione, non è necessario specificare opzioni SSD locale durante la creazione di un cluster. Il numero di dischi collegati a ciascun nodo dipende dal tipo di macchina.

Per creare un cluster, esegui il seguente comando:

gcloud container clusters create CLUSTER_NAME \
  --machine-type=MACHINE_TYPE \
  --cluster-version CLUSTER_VERSION

Sostituisci quanto segue:

  • CLUSTER_NAME: il nome del cluster.
  • MACHINE_TYPE: il tipo di macchina da utilizzare da una serie di macchine di terza generazione.
  • CLUSTER_VERSION: una versione del cluster GKE che supporta l'SSD locale sui tipi di macchine di una serie di macchine di 3ª generazione.

Crea un pool di nodi con SSD locale

1ª o 2ª generazione

Per creare un pool di nodi in esecuzione su GKE versione 1.25.3-gke.1800 o successiva che utilizza volumi SSD locali, esegui il seguente comando:

gcloud container node-pools create POOL_NAME \
    --cluster=CLUSTER_NAME \
    --ephemeral-storage-local-ssd count=NUMBER_OF_DISKS \
    --machine-type=MACHINE_TYPE

Sostituisci quanto segue:

  • POOL_NAME: il nome del nuovo pool di nodi.
  • CLUSTER_NAME: il nome del cluster.
  • NUMBER_OF_DISKS: il numero di volumi SSD locali da eseguire sul provisioning su ogni nodo. Questi volumi vengono combinati in un unico volume logico durante la configurazione del nodo. Il numero massimo di volumi varia in base al tipo di macchina e alla regione. Tieni presente che parte della capacità dell'unità SSD locale è riservata per l'utilizzo del sistema.
  • MACHINE_TYPE: il tipo di macchina da utilizzare. Questo campo è obbligatorio, poiché l'SSD locale non può essere utilizzato con il tipo e2-medium predefinito.

Terza generazione

Se utilizzi un tipo di macchina di una serie di macchine di 3ª generazione, non devi specificare opzioni SSD locale quando crei un pool di nodi. Il numero di volumi collegati a ciascun nodo dipende dal tipo di macchina.

Per creare un pool di nodi, esegui il seguente comando:

gcloud container node-pools create POOL_NAME \
  --cluster=CLUSTER_NAME \
  --machine-type=MACHINE_TYPE \
  --node-version NODE_VERSION

Sostituisci quanto segue:

  • POOL_NAME: il nome del nuovo pool di nodi.
  • CLUSTER_NAME: il nome del cluster.
  • MACHINE_TYPE: il tipo di macchina da utilizzare da una serie di macchine di terza generazione.
  • NODE_VERSION: una versione del pool di nodi GKE che supporta l'SSD locale sui tipi di macchine di una serie di macchine di 3ª generazione.

I nodi nel pool di nodi vengono creati con un'etichetta cloud.google.com/gke-ephemeral-storage-local-ssd=true. Puoi verificare le etichette eseguendo il seguente comando:

kubectl describe node NODE_NAME

Utilizzare lo spazio di archiviazione temporaneo basato su SSD locale con i cluster Autopilot

Puoi utilizzare l'unità SSD locale nelle seguenti classi di calcolo Autopilot:

  • Performance
  • Accelerator

Per la classe Performance, segui le istruzioni per utilizzare gli SSD locali nei pod della classe di prestazioni.

Per la classe di calcolo Accelerator, puoi utilizzare l'SSD locale per l'archiviazione temporanea se utilizzi GPU NVIDIA L4 ed esegui la versione della patch GKE 1.28.6-gke.1369000 e successive o 1.29.1-gke.1575000 e successive. Le GPU NVIDIA H100 (80 GB) e NVIDIA A100 (80 GB) utilizzano sempre unità SSD locali per lo spazio di archiviazione temporaneo e non puoi specificare il seguente selettore di nodi per queste GPU.

Per utilizzare l'SSD locale per lo spazio di archiviazione temporaneo, aggiungi il nodeSelector cloud.google.com/gke-ephemeral-storage-local-ssd: "true" al manifest del carico di lavoro. La specifica del pod dovrebbe essere simile all'esempio seguente:

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"

Utilizzo del parametro dell'API precedente

L'opzione --local-ssd-count è un parametro dell'API precedente che supporta l'SSD locale SCSI. La serie di macchine di terza generazione di Compute Engine non supporta SCSI e supporta solo NVMe. Utilizza questa opzione solo con i cluster Windows Server. Se al momento utilizzi il parametro dell'API precedente sui cluster Linux, ti consigliamo di utilizzare l'opzione --ephemeral-storage-local-ssd.

SSD locale sui cluster Windows Server

Quando utilizzi l'SSD locale con i cluster che eseguono pool di nodi Windows Server, devi accedere al nodo e formattare il volume prima di utilizzarlo. Nel seguente esempio, il volume SSD locale è formattato con il file system NTFS. Puoi anche creare directory all'interno del volume. In questo esempio, le directory si trovano sul disco 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

Accedere ai volumi SSD locali

L'esempio seguente mostra come accedere allo spazio di archiviazione temporaneo basato su SSD locale.

Spazio di archiviazione temporaneo come volume emptyDir

Un pool di nodi GKE può essere configurato per utilizzare l'SSD locale per lo archiviazione temporanea, inclusi i volumi emptyDir.

Il seguente manifest del pod utilizza un emptyDir e un selettore di nodi di cloud.google.com/gke-ephemeral-storage-local-ssd. Puoi applicare una tecnica simile per i manifest di Deployment o StatefulSet.

Quando scegli la richiesta di risorse di archiviazione temporanea, tieni conto della capacità dell'SSD locale riservata per l'utilizzo del sistema.

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: {}

Risoluzione dei problemi

Per le istruzioni per la risoluzione dei problemi, consulta Risolvere i problemi di archiviazione in GKE.

Passaggi successivi