Usar discos permanentes dedicados como volumes temporários


Nesta página, mostramos como usar hardware de armazenamento externo, como discos permanentes do Compute Engine, como volumes temporários nas cargas de trabalho do Google Kubernetes Engine (GKE). Você já deve ter familiaridade com os Volumes e os StorageClasses do Kubernetes.

Quando usar o armazenamento temporário no Kubernetes

O armazenamento temporário é útil em qualquer situação em que suas cargas de trabalho só precisem dos dados durante o ciclo de vida do aplicativo, como para pipelines de processamento de dados, jobs de machine learning, processamento em lote, armazenamento em cache local ou análises. Por padrão, parte do disco de inicialização do nó do GKE está disponível para uso como armazenamento temporário nos pods. Essa abordagem geralmente requer um planejamento cuidadoso do espaço.

Os volumes temporários genéricos do Kubernetes permitem solicitar explicitamente o armazenamento temporário para seus pods usando PersistentVolumeClaims. O GKE provisiona dinamicamente os discos permanentes do Compute Engine e anexa os discos aos nós. Esse tipo de armazenamento temporário é útil em situações como as seguintes:

  • Suas cargas de trabalho têm requisitos de alto desempenho, portanto, você precisa controlar o hardware de armazenamento.
  • Você precisa de armazenamento temporário de curto prazo específico de contêineres.
  • Você quer evitar o uso de emptyDir para provisionar o armazenamento temporário. Os volumes emptyDir ainda são úteis em situações em que você quer que vários contêineres compartilhem os dados no armazenamento temporário.
  • Você quer mais capacidade de armazenamento temporário do que os padrões integrados do GKE.
  • Você quer evitar a necessidade de planejar o tamanho do disco de inicialização do nó e digitar com antecedência para clusters do GKE no modo padrão.

Tipos de armazenamento temporário no GKE

Em geral, é possível usar a capacidade de armazenamento do disco de inicialização ou discos permanentes dedicados como armazenamento temporário nos seus pods e contêineres. A tabela a seguir descreve as diferenças:

Tipo de armazenamento Como usar Descrição
Disco de inicialização: discos permanentes

Ative um volume usando emptyDir na especificação do pod e solicite a capacidade necessária.

Para mais instruções, consulte Como criar volumes.

O armazenamento temporário solicitado é retirado de uma parte reservada do disco de inicialização do nó. Esse é o padrão nos clusters do Autopilot e Standard.

Use quando os pods tiverem pequenas solicitações de armazenamento temporário ou quando você quiser compartilhar os dados temporários entre vários contêineres no pod.

Piloto automático

  • A solicitação precisa ter entre 10 MiB e 10 GiB.
  • O tipo de hardware de armazenamento é pré-configurado.

Standard

Não há limite de tamanho, mas exige um planejamento cuidadoso do tamanho do disco de inicialização do nó e do tipo de hardware de armazenamento.

Para mais detalhes sobre como o GKE calcula a reserva de armazenamento temporário no disco de inicialização do nó, consulte Reserva de armazenamento temporário local.

Discos SSD locais
  1. Crie um pool de nós com discos SSD locais anexados e uma série de máquinas compatível.
  2. Monte um volume usando emptyDir com a capacidade necessária.
  3. Use um nodeSelector para colocar pods em nós com discos SSD locais anexados.

Para instruções, consulte Provisionar armazenamento temporário com SSDs locais.

Os discos SSD locais usam incrementos fixos de 375 GB que são compatíveis com clusters do GKE no modo Standard e em nós do Autopilot que executam GPUs A100 (80 GB).

Use quando precisar de armazenamento temporário com alta capacidade de processamento.

Para mais detalhes, consulte Sobre SSDs locais para GKE.

Discos permanentes dedicados
  1. Como opção, crie um StorageClass do Kubernetes para o hardware.
  2. Ative um volume usando o tipo de volume ephemeral na especificação do pod.

Neste documento, fornecemos instruções para solicitar esse tipo de armazenamento temporário.

O Google Cloud provisiona dinamicamente o hardware externo solicitado, o anexa aos nós e monta o volume solicitado no seu pod.

Use quando os pods tiverem grandes solicitações de armazenamento temporário ou quando você quiser controlar o tipo de disco permanente subjacente. Esses volumes têm as seguintes propriedades:

  • Até 64 TiB nos modos Autopilot e Standard
  • Hardware especializado, como volumes compatíveis com SSD.
  • Armazenamento conectado à rede.
  • Usa volumes do Kubernetes para conseguir armazenamento, em vez de usar emptyDir para compartilhar o disco de inicialização de nós.

Para detalhes sobre esse tipo de volume temporário, consulte Volumes temporários genéricos.

Preços

O armazenamento provisionado por meio de volumes temporários genéricos, conforme descrito neste guia, é faturado com base nos preços de discos do Compute Engine.

Antes de começar

Antes de começar, verifique se você realizou as tarefas a seguir:

  • Ativar a API Google Kubernetes Engine.
  • Ativar a API Google Kubernetes Engine
  • Se você quiser usar a Google Cloud CLI para essa tarefa, instale e, em seguida, inicialize a CLI gcloud. Se você instalou a CLI gcloud anteriormente, instale a versão mais recente executando gcloud components update.
  • Verifique se você tem um cluster do GKE Autopilot ou Standard executando a versão 1.23 ou mais recente.
  • Verifique se você tem cota suficiente no projeto do Google Cloud para o hardware de armazenamento. Para gerenciar sua cota, acesse Consultar as cotas do seu projeto.

Criar um StorageClass

A criação de um StorageClass personalizado do Kubernetes permite especificar o tipo de armazenamento a ser provisionado com base nos seus requisitos de preço e desempenho. Esta etapa é opcional, mas recomendada. Se você quiser usar o StorageClass padrão do GKE, que tem o tipo de disco permanente pd-balanced, pule esta etapa.

  1. Salve o seguinte manifesto como ephemeral-pd-class.yaml:

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: ephemeral-ssd
    provisioner: pd.csi.storage.gke.io
    volumeBindingMode: WaitForFirstConsumer
    allowVolumeExpansion: true
    parameters:
      type: STORAGE_TYPE
    

    Substitua STORAGE_TYPE pelo nome do tipo de disco permanente que você quer, como pd-ssd. Para uma lista de tipos compatíveis, consulte Tipos de disco permanente na documentação do Compute Engine.

  2. Crie o StorageClass

    kubectl create -f ephemeral-pd-class.yaml
    

Solicitar capacidade de armazenamento temporário em um pod

Para provisionar, anexar e usar hardware externo como armazenamento temporário, adicione o volume correspondente ao manifesto do pod e adicione uma ativação de volume à especificação do contêiner.

  1. Salve o seguinte manifesto como ephemeral-ssd-deployment.yaml:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: ephemeral-deployment
    spec:
      replicas: 1
      selector:
        matchLabels:
          storage: ephemeral
      template:
        metadata:
          labels:
            storage: ephemeral
        spec:
          containers:
          - name: ephemeral-container
            image: nginx
            resources:
              requests:
                cpu: 500m
                memory: 2Gi
                ephemeral-storage: 2Gi
            volumeMounts:
            - mountPath: "/short-term"
              name: ephemeral-volume
          volumes:
          - name: ephemeral-volume
            ephemeral:
              volumeClaimTemplate:
                metadata:
                  labels:
                    type: ephemeral
                spec:
                  accessModes: ["ReadWriteOnce"]
                  storageClassName: "ephemeral-ssd"
                  resources:
                    requests:
                      storage: 1Ti
    

    Esse manifesto cria um novo PersistentVolumeClaim do Kubernetes que solicita um novo PersistentVolume chamado ephemeral-volume com as seguintes propriedades:

    • spec.volumes.ephemeral: o tipo de volume ephemeral.
    • .spec.accessModes: o modo de acesso ao volume, que determina o acesso de leitura/gravação de pods e o compartilhamento de volume entre os nós. Neste exemplo, usamos ReadWriteOnce, que monta o PersistentVolume em um único nó para acesso a um ou mais pods no nó. Para mais detalhes, consulte Modos de acesso.
    • .spec.storageClassName: opcionalmente, o nome do StorageClass que você criou. Se você omitir esse campo, o GKE usará o StorageClass padrão e provisionará um disco permanente pd-balanced.
    • .spec.resources.requests.storage: a capacidade de armazenamento que você quer.
  2. Crie a implantação:

    kubectl create -f ephemeral-ssd-deployment.yaml
    

O GKE provisiona um disco do Compute Engine que atende aos requisitos do PersistentVolumeClaim e anexa o disco ao nó. O GKE monta o volume no pod e fornece a capacidade solicitada ao contêiner.

Verificar se o GKE ativou um volume temporário

  1. Crie uma sessão do shell no pod:

    kubectl exec -it deploy/ephemeral-deployment -- bash
    
  2. Verifique os volumes ativados:

    df -h
    

    O resultado será assim:

    Filesystem                Size      Used Available Use% Mounted on
    ...
    /dev/sdb               1006.9G     28.0K   1006.8G   0% /short-term
    /dev/sda1                94.3G      3.6G     90.6G   4% /etc/hosts
    /dev/sda1                94.3G      3.6G     90.6G   4% /dev/termination-log
    /dev/sda1                94.3G      3.6G     90.6G   4% /etc/hostname
    /dev/sda1                94.3G      3.6G     90.6G   4% /etc/resolv.conf
    ...
    
  3. Saia da sessão do shell:

    exit
    

A seguir