Aprovisione e use o armazenamento efémero suportado por SSDs locais

Esta página explica como aprovisionar o armazenamento SSD local em clusters do Google Kubernetes Engine (GKE) e como configurar cargas de trabalho para consumir dados do armazenamento efémero suportado por SSD local anexado a nós no seu cluster.

Para saber mais sobre a compatibilidade com SSD local no GKE, consulte o artigo Acerca do armazenamento SSD local.

Antes de começar

Antes de começar, certifique-se de que realizou as seguintes tarefas:

  • Ative a API Google Kubernetes Engine.
  • Ative a API Google Kubernetes Engine
  • Se quiser usar a CLI gcloud para esta tarefa, instale-a e, em seguida, inicialize-a. Se instalou anteriormente a CLI gcloud, execute o comando gcloud components update para obter a versão mais recente. As versões anteriores da CLI gcloud podem não suportar a execução dos comandos neste documento.

Crie um cluster ou um node pool com armazenamento efémero suportado por SSD local

Use a Google Cloud CLI para criar um cluster ou um conjunto de nós com armazenamento efémero suportado por SSD local.

Use a opção --ephemeral-storage-local-ssd para anexar armazenamento efémero local totalmente gerido, com base em volumes de SSD local. Este armazenamento está associado ao ciclo de vida dos seus pods. Quando os seus pods pedem armazenamento efémero, o GKE agenda a respetiva execução em nós que têm volumes de SSD local configurados como armazenamento efémero. Se quiser um controlo mais especializado ou detalhado sobre os seus SSDs locais, recomendamos que use o armazenamento de blocos não processados suportado por SSDs locais em alternativa.

Se tiver a escalabilidade automática de clusters ativada, o GKE dimensiona automaticamente os seus nós quando o cluster precisa de mais espaço de armazenamento temporário. Os seus pods podem aceder a dados em volumes de SSD local através do volume emptyDir.

O comando da CLI gcloud que executa para criar o cluster ou o conjunto de nós depende da geração da série de máquinas do tipo de máquina selecionado. Por exemplo, os tipos de máquinas N1 e N2 pertencem, respetivamente, a uma série de máquinas de primeira e segunda geração, enquanto os tipos de máquinas C3 pertencem a uma série de máquinas de terceira geração.

Crie um cluster com SSD local

1.ª ou 2.ª geração

Se estiver a usar um tipo de máquina de uma série de máquinas de primeira ou segunda geração, crie o cluster especificando a opção --ephemeral-storage-local-ssd count=NUMBER_OF_DISKS. Esta opção aprovisiona o número especificado de volumes de SSD local em cada nó para utilização no armazenamento efémero do kubelet.

Estas definições aplicam-se apenas ao conjunto de nós predefinido. Se os node pools subsequentes precisarem de SSD local, especifique-o durante a criação do node pool.

Para criar um cluster executado na versão 1.25.3-gke.1800 ou posterior do GKE em que o pool predefinido usa volumes de SSD local, execute o seguinte comando:

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

Substitua o seguinte:

  • CLUSTER_NAME: o nome do cluster.
  • NUMBER_OF_DISKS: o número de volumes de SSD local a serem aprovisionados em cada nó. Estes volumes são combinados num único volume lógico durante a configuração do nó. O número máximo de volumes varia consoante o tipo de máquina e a região. Tenha em atenção que alguma capacidade do SSD local está reservada para utilização pelo sistema.
  • MACHINE_TYPE: o tipo de máquina a usar. Este campo é obrigatório, uma vez que não é possível usar o SSD local com o tipo e2-medium predefinido.
  • CHANNEL_NAME: um canal de lançamento que inclui versões do GKE posteriores a 1.25.3-gke.1800. Se preferir não usar um canal de lançamento, também pode usar a flag --cluster-version em vez de --release-channel, especificando uma versão válida posterior a 1.25.3-gke.1800. Para determinar as versões válidas, use o comando gcloud container get-server-config.

3.ª ou 4.ª geração

Se usar um tipo de máquina de uma série de máquinas de terceira ou quarta geração, não precisa de especificar nenhuma opção de SSD local quando cria um cluster. O número de discos associados a cada nó depende do tipo de máquina.

Para criar um cluster, execute o seguinte comando:

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

Substitua o seguinte:

  • CLUSTER_NAME: o nome do cluster.
  • MACHINE_TYPE: o tipo de máquina a usar de uma série de máquinas de terceira ou quarta geração.
  • CLUSTER_VERSION: uma versão do cluster do GKE que suporta SSD local em tipos de máquinas de uma série de máquinas de terceira ou quarta geração.

Crie um node pool com SSD local

1.ª ou 2.ª geração

Para criar um node pool executado na versão 1.25.3-gke.1800 ou posterior do GKE que usa volumes de SSD local, execute o seguinte comando:

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

Substitua o seguinte:

  • POOL_NAME: o nome do novo conjunto de nós.
  • CLUSTER_NAME: o nome do cluster.
  • NUMBER_OF_DISKS: o número de volumes de SSD local a serem aprovisionados em cada nó. Estes volumes são combinados num único volume lógico durante a configuração do nó. O número máximo de volumes varia consoante o tipo de máquina e a região. Tenha em atenção que alguma capacidade do SSD local está reservada para utilização do sistema.
  • MACHINE_TYPE: o tipo de máquina a usar. Este campo é obrigatório, uma vez que não é possível usar o SSD local com o tipo e2-medium predefinido.

3.ª ou 4.ª geração

Se usar um tipo de máquina de uma série de máquinas de terceira ou quarta geração, não precisa de especificar nenhuma opção de SSD local quando criar um conjunto de nós. O número de volumes anexados a cada nó depende do tipo de máquina.

Para criar um node pool, execute o seguinte comando:

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

Substitua o seguinte:

  • POOL_NAME: o nome do novo conjunto de nós.
  • CLUSTER_NAME: o nome do cluster.
  • MACHINE_TYPE: o tipo de máquina a usar de uma série de máquinas de terceira ou quarta geração.
  • NODE_VERSION: uma versão do conjunto de nós do GKE que suporta SSD local em tipos de máquinas de uma série de máquinas de terceira ou quarta geração.

Os nós no node pool são criados com uma etiqueta.cloud.google.com/gke-ephemeral-storage-local-ssd=true Pode validar as etiquetas executando o seguinte comando:

kubectl describe node NODE_NAME

Use o armazenamento efémero suportado por SSD local com clusters do Autopilot

Pode usar SSDs locais para armazenamento efémero quando configura os seus agrupamentos de uma das seguintes formas:

  • Seleciona explicitamente uma série de máquinas para executar os seus pods e especifica o cloud.google.com/gke-ephemeral-storage-local-ssd: "true"nodeSelector ou uma reserva de capacidade que tenha SSDs locais. Para saber mais sobre a seleção da série de máquinas no Autopilot, consulte o artigo Otimize o desempenho do pod do Autopilot escolhendo uma série de máquinas.
  • Pede um tipo de GPU que suporte SSDs locais e especifica o cloud.google.com/gke-ephemeral-storage-local-ssd: "true"nodeSelector ou uma reserva de capacidade com SSDs locais. As GPUs NVIDIA H100 (80 GB) e as GPUs NVIDIA A100 (80 GB) usam sempre SSDs locais para armazenamento efémero, e não pode especificar o seletor de nós para essas GPUs. Para saber como pedir GPUs no Autopilot, consulte o artigo Peça GPUs nos seus contentores.

Consulte o artigo Séries de máquinas que suportam o SSD local no Autopilot para ver uma lista de séries de máquinas compatíveis com SSDs locais.

Peça SSDs locais diretamente nos manifestos de cargas de trabalho

Para usar o SSD local para armazenamento efémero, adicione o nodeSelector ao manifesto da carga de trabalho.cloud.google.com/gke-ephemeral-storage-local-ssd: "true" Por exemplo, o seguinte manifesto do pod seleciona SSDs locais como armazenamento efémero para pods de 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"

Peça SSDs locais com reservas de capacidade

Se usar uma reserva de capacidade do Compute Engine para reservar máquinas com SSDs locais, o Autopilot associa os SSDs locais disponíveis da reserva aos seus nós, e não tem de selecionar explicitamente os SSDs locais no manifesto da carga de trabalho. Para saber mais sobre a utilização de reservas com o Autopilot, consulte o artigo Consuma reservas de capacidade em clusters do Autopilot.

Por exemplo, o manifesto do Pod seguinte seleciona uma reserva específica que tem SSDs locais:

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"

Substitua MACHINE_SERIES por uma série de máquinas suportada que também suporte SSDs locais. Se a série de máquinas especificada não suportar SSDs locais, a implementação falha com um erro.

Séries de máquinas que suportam o SSD local no Autopilot

Os clusters do Autopilot suportam a utilização de SSDs locais para armazenamento efémero com as seguintes séries de máquinas:

(apenas com reserva de capacidade)
(apenas com reserva de capacidade)
(apenas com reserva de capacidade)
(apenas com reserva de capacidade)
(apenas com reserva de capacidade)
(sempre incluído)
(apenas com reserva de capacidade)
(sempre incluído)
(sempre incluído)

Usar o parâmetro da API antiga

A opção --local-ssd-count é um parâmetro da API antigo que suporta SSD local SCSI. A série de máquinas de terceira geração do Compute Engine não suporta SCSI e só suporta NVMe. Só deve usar esta opção com clusters do Windows Server. Se estiver a usar o parâmetro da API antigo em clusters Linux, recomendamos que use a opção --ephemeral-storage-local-ssd.

SSD local em clusters do Windows Server

Quando usa o SSD local com os clusters que executam pools de nós do Windows Server, tem de iniciar sessão no nó e formatar o volume antes de o usar. No exemplo seguinte, o volume do SSD local está formatado com o sistema de ficheiros NTFS. Também pode criar diretórios no volume. Neste exemplo, os diretórios estão no 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

Aceda a volumes de SSD local

O exemplo seguinte mostra como pode aceder ao armazenamento efémero suportado por SSD local.

Armazenamento temporário como um volume emptyDir

Pode configurar um conjunto de nós do GKE para usar um SSD local para armazenamento efémero, incluindo volumes emptyDir.

O manifesto do pod seguinte usa um emptyDir e um seletor de nós de cloud.google.com/gke-ephemeral-storage-local-ssd. Pode aplicar uma técnica semelhante para manifestos de implementação ou manifestos StatefulSet.

Quando escolher o pedido de recursos de armazenamento efémero, tenha em conta a capacidade do SSD local reservada para utilização pelo 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: {}

Resolução de problemas

Para ver instruções de resolução de problemas, consulte o artigo Resolva problemas de armazenamento no GKE.

O que se segue?