Use discos persistentes dedicados como volumes efémeros


Esta página mostra como usar hardware de armazenamento externo, como Persistent Disks do Compute Engine, como volumes efémeros nas suas cargas de trabalho do Google Kubernetes Engine (GKE). Já deve estar familiarizado com os Volumes Kubernetes e as StorageClasses.

Quando usar o armazenamento efémero no Kubernetes

O armazenamento efémero é útil em qualquer situação em que as suas cargas de trabalho apenas precisem dos dados durante o ciclo de vida da aplicação, como para pipelines de processamento de dados, tarefas de aprendizagem automática, processamento em lote, colocação em cache local ou estatísticas. Por predefinição, parte do disco de arranque do nó do GKE está disponível para utilização como armazenamento efémero nos seus pods. Esta abordagem requer frequentemente um planeamento cuidadoso do espaço.

Os volumes efémeros genéricos do Kubernetes permitem-lhe pedir explicitamente armazenamento efémero para os seus pods através de PersistentVolumeClaims. O GKE aprovisiona dinamicamente discos persistentes do Compute Engine e anexa-os aos seus nós. Este tipo de armazenamento efémero é útil em situações como as seguintes:

  • As suas cargas de trabalho têm requisitos de desempenho elevados, pelo que tem de controlar o hardware de armazenamento.
  • Precisa de armazenamento efémero de curto prazo específico do contentor.
  • Quer evitar usar emptyDir para aprovisionar armazenamento temporário. emptyDir Os volumes continuam a ser úteis em situações em que quer que vários contentores partilhem os dados no armazenamento efémero.
  • Quiser uma capacidade de armazenamento efémero superior aos predefinições incorporadas do GKE.
  • Quer evitar ter de planear o tamanho e o tipo do disco de arranque do nó antecipadamente para clusters do GKE no modo Standard.

Tipos de armazenamento temporário no GKE

Em geral, pode usar a capacidade de armazenamento do disco de arranque ou os discos persistentes dedicados como armazenamento efémero nos seus pods e contentores. A tabela seguinte descreve as diferenças:

Tipo de armazenamento Como usar Descrição
Disco de arranque – Discos persistentes

Monte um volume com emptyDir na especificação do pod e peça a capacidade de que precisa.

Para ver instruções, consulte a secção Criar volumes.

O armazenamento efémero pedido é retirado de uma parte reservada do disco de arranque do nó. Esta é a predefinição nos clusters do Autopilot e Standard.

Use quando os pods têm pequenos pedidos de armazenamento efémero ou quando quer partilhar os dados efémeros entre vários contentores no pod.

Autopilot

  • O pedido tem de ter entre 10 MiB e 10 GiB.
  • O tipo de hardware de armazenamento está pré-configurado.

Padrão

Sem limite de tamanho, mas requer um planeamento cuidadoso do tamanho do disco de arranque do nó e do tipo de hardware de armazenamento.

Para ver detalhes sobre como o GKE calcula a reserva de armazenamento efémero no disco de arranque do nó, consulte o artigo Reserva de armazenamento efémero local.

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

Para ver instruções, consulte o artigo Aprovisione armazenamento efémero com SSDs locais.

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

Use quando precisar de armazenamento efémero com um elevado débito.

Para ver detalhes, consulte o artigo Acerca dos SSDs locais para o GKE.

Discos persistentes dedicados
  1. Opcionalmente, crie uma StorageClass do Kubernetes para o hardware.
  2. Monte um volume com o tipo de volume ephemeral na especificação do pod.

Este documento fornece instruções para pedir este tipo de armazenamento efémero.

Google Cloud aprovisiona dinamicamente o hardware externo pedido, anexa-o aos seus nós e monta o volume pedido no seu pod.

Use quando os pods tiverem pedidos de armazenamento temporário grandes ou quando quiser controlar o tipo de disco persistente subjacente. Estes volumes têm as seguintes propriedades:

  • Até 64 TiB no modo Autopilot e no modo Standard.
  • O pedido de armazenamento efémero do Pod pode ter até 64 TiB.
  • Hardware especializado, como volumes com base em SSD, suportado.
  • Armazenamento associado à rede.
  • Usa volumes do Kubernetes para obter armazenamento, em vez de usar emptyDir para partilhar o disco de arranque do nó.

Para ver detalhes acerca deste tipo de volume efémero, consulte o artigo Volumes efémeros genéricos.

Preços

O armazenamento aprovisionado através de volumes efémeros genéricos, conforme descrito neste guia, é faturado com base nos preços dos discos do Compute Engine.

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 gcloud components update para obter a versão mais recente.
  • Certifique-se de que tem um cluster do GKE Autopilot ou Standard a executar a versão 1.23 ou posterior.
  • Certifique-se de que tem quota suficiente no seu Google Cloud projeto para o hardware de armazenamento. Para gerir a sua quota, consulte o artigo Veja e faça a gestão das quotas.

Crie uma StorageClass

A criação de uma StorageClass do Kubernetes personalizada permite-lhe especificar o tipo de armazenamento a aprovisionar com base nos seus requisitos de preço e desempenho. Este passo é opcional, mas recomendado. Se quiser usar a StorageClass predefinida do GKE, que tem o tipo de disco persistente pd-balanced, ignore este passo.

  1. Guarde 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 persistente que quer, como pd-ssd. Para ver uma lista dos tipos suportados, consulte o artigo Tipos de Persistent Disk na documentação do Compute Engine.

  2. Crie a StorageClass:

    kubectl create -f ephemeral-pd-class.yaml
    

Peça capacidade de armazenamento efémero num agrupamento

Para aprovisionar, anexar e usar hardware externo como armazenamento efémero, adicione o volume correspondente ao manifesto do pod e adicione uma montagem de volume à especificação do contentor.

  1. Guarde 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
    

    Este manifesto cria um novo Kubernetes PersistentVolumeClaim que pede um novo PersistentVolume denominado ephemeral-volume com as seguintes propriedades:

    • spec.volumes.ephemeral: o ephemeral tipo de volume.
    • .spec.accessModes: o modo de acesso ao volume, que determina o acesso de leitura/escrita dos pods e a partilha de volumes entre nós. Estes exemplos usam ReadWriteOnce, que monta o PersistentVolume num único nó para acesso por um ou mais pods no nó. Para ver detalhes, consulte a secção Modos de acesso.
    • .spec.storageClassName: opcionalmente, o nome da StorageClass que criou. Se omitir este campo, o GKE usa a StorageClass predefinida e aprovisiona um disco persistente pd-balanced.
    • .spec.resources.requests.storage: a capacidade de armazenamento que quer.
  2. Crie a implementação:

    kubectl create -f ephemeral-ssd-deployment.yaml
    

O GKE aprovisiona um disco do Compute Engine que cumpre os requisitos do PersistentVolumeClaim e associa o disco ao nó. O GKE monta o volume no pod e fornece a capacidade pedida ao contentor.

Confirme se o GKE montou um volume efémero

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

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

    df -h

    O resultado é semelhante ao seguinte:

    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. Sair da sessão de shell:

    exit
    

O que se segue?