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 volumesemptyDir
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 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
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 |
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 |
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:
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.
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, comopd-ssd
. Para uma lista de tipos compatíveis, consulte Tipos de disco permanente na documentação do Compute Engine.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.
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 volumeephemeral
..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, usamosReadWriteOnce
, 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 permanentepd-balanced
..spec.resources.requests.storage
: a capacidade de armazenamento que você quer.
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
Crie uma sessão do shell no pod:
kubectl exec -it deploy/ephemeral-deployment -- bash
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 ...
Saia da sessão do shell:
exit