Esegui il provisioning e l'utilizzo dell'archiviazione temporanea supportata da SSD locali


Questa pagina spiega come eseguire il provisioning dell'archiviazione SSD locale sui cluster Google Kubernetes Engine (GKE) e come configurare i carichi di lavoro in modo da utilizzare i dati di archiviazione temporanea supportata da SSD locali collegati ai nodi nel cluster.

Per saperne di più sul supporto degli SSD locali su GKE, consulta Informazioni sull'archiviazione SSD locale.

Prima di iniziare

Prima di iniziare, assicurati di aver eseguito le seguenti attività:

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

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

Utilizza Google Cloud CLI per creare un cluster o un pool di nodi con archiviazione temporanea supportata da SSD locali.

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

Se la scalabilità automatica dei cluster è abilitata, GKE scala automaticamente i 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 di 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

1a o 2a 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 kubelet.

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

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 di cui eseguire il provisioning su ciascun 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à degli SSD locali è riservata per l'uso da parte del sistema.
  • MACHINE_TYPE: il tipo di macchina da utilizzare. Questo campo è obbligatorio perché non è possibile utilizzare SSD locali con il tipo predefinito e2-medium.
  • CHANNEL_NAME: un canale di rilascio che include versioni di GKE successive alla 1.25.3-gke.1800. Se preferisci non usare un canale di rilascio, puoi usare anche il flag --cluster-version anziché --release-channel, specificando una versione valida successiva alla 1.25.3-gke.1800. Per determinare le versioni valide, usa il comando gcloud container get-server-config.

3a generazione

Se utilizzi un tipo di macchina di una serie di macchine di terza generazione, non è necessario 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 di una serie di macchine di terza generazione.
  • CLUSTER_VERSION: una versione del cluster GKE che supporta SSD locali su tipi di macchine di una serie di macchine di terza generazione.

Crea un pool di nodi con SSD locale

1a o 2a 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 questo 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 di cui eseguire il provisioning su ciascun 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à degli SSD locali è riservata per l'uso da parte del sistema.
  • MACHINE_TYPE: il tipo di macchina da utilizzare. Questo campo è obbligatorio perché non è possibile utilizzare SSD locali con il tipo predefinito e2-medium.

3a generazione

Se utilizzi un tipo di macchina di una serie di macchine di terza generazione, non è necessario specificare alcuna opzione SSD locale durante la creazione di un pool di nodi. Il numero di volumi collegati a ciascun 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 di una serie di macchine di terza generazione.
  • NODE_VERSION: una versione del pool di nodi GKE che supporta SSD locali su tipi di macchine di una serie di macchine di terza 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

Usa l'archiviazione temporanea supportata da SSD locali con i cluster Autopilot

Puoi utilizzare SSD locale nelle seguenti classi di calcolo Autopilot:

  • Performance
  • Accelerator

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

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

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. La specifica del pod dovrebbe essere simile al seguente esempio:

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"

Utilizzare il parametro dell'API precedente

L'opzione --local-ssd-count è un parametro API legacy che supporta SSD locali SCSI. La serie di macchine di terza generazione di Compute Engine non supporta SCSI e solo NVMe. Dovresti utilizzare questa opzione solo con i cluster Windows Server. Se attualmente utilizzi il parametro dell'API legacy su cluster Linux, ti consigliamo di usare l'opzione --ephemeral-storage-local-ssd.

SSD locale su cluster Windows Server

Quando utilizzi l'SSD locale con i tuoi cluster che eseguono pool di nodi 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 sotto il 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

Accesso ai volumi SSD locali

L'esempio seguente mostra come accedere all'archiviazione temporanea supportata da SSD locali.

Archiviazione temporanea come volume emptyDir

È possibile configurare un pool di nodi GKE per l'utilizzo di SSD locali per l'archiviazione temporanea, inclusi i volumi emptyDir.

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

Quando scegli la richiesta di risorsa di archiviazione temporanea, prendi in considerazione la capacità SSD locale riservata per l'uso da parte 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 Risoluzione dei problemi di archiviazione in GKE.

Passaggi successivi