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


Questa pagina spiega come eseguire il provisioning dell'archiviazione SSD locale sui cluster Google Kubernetes Engine (GKE) e come configurare i workload per utilizzare i dati dall'archiviazione temporanea supportata da SSD locale collegata ai nodi del cluster.

Per scoprire di più sul supporto degli SSD locali su GKE, consulta la sezione 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à, installala e poi inizializzala. Se hai già installato gcloud CLI, scarica l'ultima versione eseguendo gcloud components update.

Crea un cluster o pool di nodi con archiviazione temporanea supportata da SSD locale

Utilizza Google Cloud CLI per creare un cluster o un pool di nodi con spazio di archiviazione effimero basato su SSD locale.

Utilizza l'opzione --ephemeral-storage-local-ssd per collegare l'archiviazione temporanea locale completamente gestita supportata dai volumi SSD locali. Questo spazio di archiviazione è legato al ciclo di vita dei tuoi 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 sugli SSD locali, ti consigliamo di utilizzare lo spazio di archiviazione a blocchi non elaborati supportato da SSD locali.

Se hai abilitato la scalabilità automatica del cluster, GKE esegue lo scale up dei nodi quando il cluster ha bisogno di più spazio di archiviazione temporaneo. I tuoi 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.

Crea 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 ogni 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 l'SSD locale, specificalo durante la creazione del node pool.

Per creare un cluster in esecuzione su GKE versione 1.25.3-gke.1800 o successive in cui il pool predefinito utilizza volumi SSD locali, esegui questo 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 provisionare 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 una parte della capacità dell'SSD locale è riservata all'uso del sistema.
  • MACHINE_TYPE: il tipo di macchina da utilizzare. Questo campo è obbligatorio, in quanto l'SSD locale non può essere utilizzato con il tipo e2-medium predefinito.
  • CHANNEL_NAME: un canale di rilascio che include versioni di GKE successive alla 1.25.3-gke.1800. Se preferisci non utilizzare un canale di rilascio, puoi anche utilizzare il flag --cluster-version anziché --release-channel, specificando una versione valida successiva alla 1.25.3-gke.1800. Per determinare le versioni valide, utilizza il comando gcloud container get-server-config.

3ª o 4ª generazione

Se utilizzi un tipo di macchina di una serie di macchine di terza o quarta generazione, non devi specificare alcuna opzione 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 questo 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 o quarta generazione.
  • CLUSTER_VERSION: una versione del cluster GKE che supporta l'SSD locale sui tipi di macchine di una serie di macchine di terza o quarta 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 successive che utilizza volumi SSD locali, esegui il comando seguente:

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 provisionare 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 una parte della capacità dell'SSD locale è riservata all'utilizzo da parte del sistema.
  • MACHINE_TYPE: il tipo di macchina da utilizzare. Questo campo è obbligatorio, in quanto l'SSD locale non può essere utilizzato con il tipo e2-medium predefinito.

3ª o 4ª generazione

Se utilizzi un tipo di macchina di una serie di macchine di terza o quarta generazione, non devi specificare alcuna opzione SSD locale durante la creazione di un pool di nodi. Il numero di volumi collegati a ogni nodo dipende dal tipo di macchina.

Per creare un pool di nodi, esegui questo 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 o quarta 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 terza o quarta 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 questo comando:

kubectl describe node NODE_NAME

Utilizzare l'archiviazione temporanea basata su SSD locale con i cluster Autopilot

Puoi utilizzare gli SSD locali per l'archiviazione temporanea quando configuri i pod in uno dei seguenti modi:

  • Selezioni esplicitamente una serie di macchine per eseguire i pod e specifichi il cloud.google.com/gke-ephemeral-storage-local-ssd: "true" nodeSelector o una prenotazione di capacità con SSD locali. Per saperne di più sulla selezione delle serie di macchine in Autopilot, consulta Ottimizzare il rendimento dei pod Autopilot scegliendo una serie di macchine.
  • Richiedi un tipo di GPU che supporti gli SSD locali e specifica cloud.google.com/gke-ephemeral-storage-local-ssd: "true" nodeSelector o una prenotazione di capacità che disponga di SSD locali. Le GPU NVIDIA H100 (80 GB) e NVIDIA A100 (80 GB) utilizzano sempre SSD locali per l'archiviazione temporanea e non puoi specificare il selettore di nodi per queste GPU. Per scoprire di più sulla richiesta di GPU su Autopilot, consulta Richiedere GPU nei container.

Consulta Serie di macchine che supportano l'SSD locale in Autopilot per un elenco delle serie di macchine compatibili con gli SSD locali.

Richiedere gli SSD locali direttamente nei manifest dei workload

Per utilizzare l'SSD locale per l'archiviazione temporanea, aggiungi cloud.google.com/gke-ephemeral-storage-local-ssd: "true" nodeSelector al manifest del carico di lavoro. Ad esempio, il seguente manifest del pod seleziona gli SSD locali come spazio di archiviazione temporaneo per i pod GPU:

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"

Richiedere SSD locali con prenotazioni di capacità

Se utilizzi una prenotazione di capacità di Compute Engine per prenotare macchine con SSD locali, Autopilot collega gli SSD locali disponibili dalla prenotazione ai tuoi nodi e non devi selezionarli esplicitamente nel manifest del workload. Per scoprire di più sull'utilizzo delle prenotazioni con Autopilot, consulta Utilizzare le prenotazioni di capacità nei cluster Autopilot.

Ad esempio, il seguente file manifest del pod seleziona una prenotazione specifica che dispone di SSD locali:

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"

Sostituisci MACHINE_SERIES con una serie di macchine supportata che supporti anche gli SSD locali. Se la serie di macchine specificata non supporta gli SSD locali, il deployment non va a buon fine e viene visualizzato un errore.

Serie di macchine che supportano l'SSD locale in Autopilot

I cluster Autopilot supportano l'utilizzo di SSD locali per l'archiviazione temporanea con le seguenti serie di macchine:

(solo con prenotazione della capacità)
(solo con prenotazione della capacità)
(solo con prenotazione della capacità)
(solo con prenotazione della capacità)
(solo con prenotazione della capacità)
(sempre in bundle)
(solo con prenotazione della capacità)
(sempre in bundle)
(sempre in bundle)

Utilizzo del parametro API legacy

L'opzione --local-ssd-count è un parametro API legacy 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 attualmente utilizzi il parametro API legacy 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 tuoi cluster che eseguono i node pool Windows Server, devi accedere al nodo e formattare il volume prima di utilizzarlo. Nell'esempio seguente, 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 nel 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

Il seguente esempio mostra come accedere all'archiviazione temporanea supportata da SSD locale.

Archiviazione temporanea come volume emptyDir

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

Il seguente manifest di pod utilizza un emptyDir e un selettore di nodi 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à SSD locale riservata all'uso 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