Skip to Content

O que é um volume persistente de Kubernetes?

Gerenciar o armazenamento para aplicativos stateful é um aspecto crucial da orquestração de contêineres. O Kubernetes Persistent Volume (PV ) é um recurso fundamental que atende a essa necessidade fornecendo um mecanismo para gerenciar recursos de armazenamento de forma independente do ciclo de vida de pods individuais. Neste artigo, analisaremos o conceito de volume persistente do Kubernetes, seus recursos e as práticas recomendadas para usá-lo com eficácia em seus clusters Kubernetes.

O que é o volume persistente do Kubernetes?

Um Kubernetes Kubernetes Persistent Volume (PV ) é um recurso de armazenamento em um cluster Kubernetes que abstrai a tecnologia de armazenamento subjacente. Ao contrário do armazenamento temporário, que está vinculado ao ciclo de vida de um pod e desaparece quando o pod é encerrado, os PVs oferecem uma maneira de gerenciar e alocar armazenamento persistente aos aplicativos. Isso garante que os dados permaneçam intactos mesmo que os pods que os acessam sejam encerrados ou reagendados.

O uso de volumes persistentes oferece benefícios como:

  • Abstração de armazenamento: Os PVs ocultam as especificidades do armazenamento físico (por exemplo, discos locais, SAN , armazenamento em nuvem ) dos pods. Os usuários podem solicitar armazenamento sem precisar saber os detalhes específicos da implementação.
  • Persistência: Os PVs garantem persistência de dados mesmo entre reinicializações ou reprogramações de pods. Imagine um pod de servidor web que usa armazenamento efêmero para armazenar logs temporários. Quando o pod reinicia, esses logs são perdidos. O armazenamento persistente, por outro lado, garante que os dados, como os dados de aplicativos mantidos por um pod de banco de dados, permaneçam intactos.
  • Desacoplamento de armazenamento de pods: Essa separação permite maior flexibilidade e controle sobre os recursos de armazenamento. Os pods podem ser facilmente expandidos para cima ou para baixo sem afetar o armazenamento subjacente.

Principais recursos dos volumes persistentes do Kubernetes

Os volumes persistentes do Kubernetes oferecem vários recursos importantes que os tornam poderosos e adaptáveis para diversas necessidades de armazenamento:

Classes de armazenamento

As classes de armazenamento agem como modelos que definem diferentes camadas ou categorias de armazenamento disponíveis em um cluster. Eles podem especificar características como desempenho (por exemplo, SSD vs. HDD), capacidade, durabilidade e custo. Isso permite que os administradores provisionem armazenamento adaptado aos requisitos específicos dos aplicativos.

Modos de acesso

Os modos de acesso definem como os pods podem interagir com o armazenamento fornecido por um PV . Veja uma descrição dos modos comuns:

  • ReadWriteOnce (RWO): Somente um pod de cada vez pode montar o volume com permissões de leitura/gravação. Isso garante a integridade de dados para aplicativos que exigem acesso exclusivo à gravação, como uma réplica do banco de dados primário.
  • Somente leituraMuitos (ROX): Vários pods podem montar o volume simultaneamente, mas apenas no modo somente leitura. Isso é útil para cenários em que os aplicativos precisam acessar dados compartilhados sem modificação, como um arquivo de configuração ou repositório de log.
  • LeiaGraveMuitos (RWX): Vários pods podem montar o volume com permissões de leitura e gravação. Esse modo de acesso deve ser usado com cautela devido a possíveis inconsistências de dados se vários pods gravarem simultaneamente. É ideal para casos de uso específicos, como caches compartilhados ou ferramentas de edição colaborativa.

Políticas de recuperação

As políticas de recuperação ditam como o Kubernetes lida com um PV depois que ele não está mais vinculado a um pod. As principais políticas incluem:

  • Reter: O PV permanece depois que o pod é desvinculado, permitindo a administração manual para possível uso ou migração futuros.
  • Reciclar: O Kubernetes recicla o PV . Isso normalmente envolve limpar quaisquer dados existentes e disponibilizar o armazenamento para futuras atribuições de pod.
  • Excluir: O objeto PV e seu recurso de armazenamento subjacente são completamente excluídos. Use isso com cautela, pois a recuperação de dados pode não ser possível.

Plug-ins de volume

O Kubernetes aproveita plug-ins de volume para preencher a lacuna entre a plataforma e vários provedores de armazenamento. Esses plug-ins permitem que o Kubernetes entenda e interaja com diversos back-ends de armazenamento, incluindo armazenamento local, soluções de armazenamento anexado à rede (NAS, Network Attached Storage), como NFS ou iSCSI, e serviços de armazenamento específicos do provedor de nuvem, como AWS EBS ou GCE Persistent Disk. Essa arquitetura de plug-in oferece flexibilidade significativa na escolha e integração de soluções de armazenamento com seu cluster Kubernetes.

Provisionamento de volumes persistentes

O Kubernetes oferece dois métodos principais para provisionamento de volumes persistentes (PVs, Persistent Volumes): provisionamento estático e provisionamento dinâmico. Cada abordagem atende a diferentes casos de uso e oferece vantagens distintas.

Provisionamento estático

No provisionamento estático, os administradores de cluster criam e configuram PVs manualmente com antecedência. Essa abordagem fornece controle detalhado sobre a configuração do armazenamento e é adequada para cenários com requisitos de armazenamento bem definidos que não mudam com frequência. Para provisionar um PV estaticamente:

1. Defina os detalhes do armazenamento: Determine a capacidade de armazenamento, os modos de acesso (ReadWriteOnce, ReadOnlyMany, ReadWriteMany), a política de recuperação (Retain, Recycle, Delete) e as especificações do plug-in de volume (por exemplo, endereço do servidor para NFS).

2. Crie o objeto PV usando YAML: Use um arquivo de manifesto YAML para definir a configuração PV. Veja um exemplo de uso do armazenamento NFS:

apiVersion: v1
 kind: PersistentVolume
 metadata:
   name: my-pv-nfs
 spec:
   capacity:
     storage: 10Gi
   accessModes:
     - ReadWriteOnce
   persistentVolumeReclaimPolicy: Retain
   nfs:
     path: /path/to/nfs/share
     server: nfs-server.example.com

  • nome: Nome exclusivo do PV .
  • armazenamento: Capacidade de armazenamento desejada (por exemplo, 10Gi para 10 Gigabytes).
  • modos de acesso: Escolha o modo de acesso adequado com base nos requisitos do seu aplicativo.
  • Política derecuperação devolumepersistente: Defina como o Kubernetes deve lidar com a PV depois que ela não estiver ligada a um pod.
  • nfs.path: Caminho para o compartilhamento NFS no servidor NFS.
  • nfs.server: Endereço IP ou nome de host do servidor NFS.

3. Aplique o manifesto YAML: Use o comando kubectl apply -f para criar o objeto PV em seu cluster Kubernetes.

Provisionamento dinâmico

O provisionamento dinâmico aproveita o StorageClasses para automatizar a criação de PV. Os administradores definem classes de armazenamento que especificam as características de armazenamento desejadas e permitem que o Kubernetes lide com a criação de PV sob demanda quando um PVC (PersistentVolumeClaim) solicita armazenamento. Para usar o provisionamento dinâmico:

1. Defina uma classe de armazenamento: Crie um manifesto de classe de armazenamento YAML especificando o provisionador, o tipo de armazenamento (por exemplo, SSD, HDD) e quaisquer parâmetros adicionais exigidos pelo provisionador. Veja um exemplo do AWS EBS:

apiVersion: storage.k8s.io/v1
 kind: StorageClass
 metadata:
   name: standard-ebs
 provisioner: kubernetes.io/aws-ebs
 parameters:
   type: gp2

  • nome: Nome exclusivo da classe de armazenamento.
  • provisionador: Nome do plug-in do provisionador de armazenamento (por exemplo, kubernetes.io/aws-ebs para AWS EBS ).
  • parâmetros.tipo: Tipo de armazenamento no provisionador (por exemplo, gp2 para um tipo de volume de SSD de uso geral no AWS EBS ).

2. Aplique o manifesto StorageClass: Use o kubectl apply -f para criar o objeto StorageClass no seu cluster.

Vinculação de volumes persistentes a pods

Vincular um PV a um pod permite que os aplicativos aproveitem o armazenamento persistente. Essa ligação normalmente é obtida por meio de um PersistentVolumeClaim (PVC).

    Um PVC age como uma solicitação de armazenamento enviada por um pod. Ela especifica os requisitos de armazenamento que um pod tem, incluindo:

  • Modos de acesso: Define como o pod pode interagir com o armazenamento (por exemplo, ReadWriteOnce, ReadOnlyMany, ReadWriteMany).
  • Capacidade de armazenamento: A quantidade desejada de armazenamento para o pod.
  • StorageClassName (opcional): Refere-se a uma classe de armazenamento para provisionamento dinâmico.

    Há dois métodos principais para vincular PVs a pods:

  • Ligação estática: Na vinculação estática, os administradores criam manualmente um PVC que faz referência explícita a um PV pré-provisionado. O PVC e o PV devem ter atributos compatíveis, como modos de acesso correspondentes e capacidade de armazenamento suficiente no PV , para atender à solicitação do PVC .
  • Associação dinâmica: A vinculação dinâmica aproveita o StorageClasses para criação automática de PV. Quando um pod com um PVC fazendo referência a uma classe de armazenamento é implantado, o Kubernetes procura um PV adequado (existente ou recém-provisionado com base na classe de armazenamento) que atenda aos requisitos do PVC. Se um PV adequado for encontrado, o Kubernetes liga automaticamente o PV e o PVC.

Veja um exemplo de um pod chamado "exemplo de pod" que usa um PVC chamado "exemplo de pod":

apiVersion: v1
 kind: Pod
 metadata:
   name: pod-example
 spec:
   containers:
   - name: app
     image: nginx
     volumeMounts:
     - mountPath: "/usr/share/nginx/html"
       name: pvc-storage
   volumes:
   - name: pvc-storage
     persistentVolumeClaim:
       claimName: pvc-example

Neste exemplo, o pod monta o PVC chamado "exemplo de pvc" no caminho "/usr/share/nginx/html" dentro do contêiner. Isso permite que o pod acesse e gerencie seus dados persistentes armazenados no PV subjacente.

Gerenciamento de volumes persistentes

É essencial gerenciar seus volumes persistentes (PVs, Persistent Volumes) com eficácia para manter uma utilização de armazenamento eficiente e escalável em seu cluster Kubernetes. Alguns aspectos importantes do gerenciamento de PV incluem:

1. Redimensionamento de volumes persistentes

O Kubernetes v1.11 apresentou a capacidade de redimensionar PVs. Isso permite ajustar dinamicamente a capacidade de armazenamento alocada a um PV, atendendo aos crescentes requisitos de armazenamento de seus aplicativos. 

Para redimensionar um PV, atualize a solicitação de armazenamento do PVC: Edite o PVC que faz referência ao PV e modifique o valor de armazenamento na seção resources.requests da especificação YAML do PVC. Por exemplo, para aumentar o tamanho de um PVC chamado "exemplo de VPC" para 20Gi, atualize o manifesto YAML:

apiVersion: v1
 kind: PersistentVolumeClaim
 metadata:
   name: pvc-example
 spec:
   resources:
     requests:
       storage: 20Gi

Depois de atualizar a solicitação de armazenamento do PVC, o Kubernetes tenta redimensionar o armazenamento subjacente provisionado para o PV. Redimensionar um PV geralmente é uma operação unidirecional (armazenamento expandido). Reduzir o tamanho de um PV não é suportado devido a possíveis preocupações com perda de dados.

2. Exclusão de volumes persistentes

Para excluir um PV, verifique se ele não está vinculado a nenhum PVC. Você não pode excluir um PV em uso por um PVC para evitar a perda de dados. Veja como excluir um PV:

kubectl delete pv pv-example

Substitua o exemplo de PV pelo nome real da PV que você deseja excluir.

3. Atualização de volumes persistentes

Embora a capacidade de armazenamento do núcleo não possa ser modificada diretamente em um objeto PV, é possível atualizar determinados campos de metadados de um PV, como rótulos ou anotações. Esses rótulos e anotações podem ser usados para organizar, identificar e gerenciar melhor seus PVs no cluster.

Práticas recomendadas para usar volumes persistentes de Kubernetes

Veja a seguir algumas das práticas recomendadas que você deve seguir para aproveitar ao máximo os volumes persistentes do Kubernetes:

  • Selecione as classes de armazenamento apropriadas: Escolha classes de armazenamento que atendam aos requisitos de desempenho e durabilidade dos seus aplicativos. Por exemplo, use o armazenamento com suporte de SSD para aplicativos de alto desempenho e o armazenamento com suporte de HDD para fins de arquivamento.
  • Configure os modos de acesso corretamente: Selecione o modo de acesso adequado para sua PV com base em como seus aplicativos precisam acessar o armazenamento. Por exemplo, você pode usar RWX para sistemas de arquivos compartilhados e RWO para bancos de dados de instância única.
  • Implemente políticas de recuperação com sabedoria: Defina políticas de recuperação que correspondam à sua estratégia de gerenciamento do ciclo de vida dos dados. Use a política de retenção para dados críticos que exigem intervenção manual antes da exclusão.
  • Monitoramento e registro: Utilize ferramentas de monitoramento e registro para monitorar o uso, o desempenho e a integridade do PV. Ferramentas como Prometheus e Grafana podem fornecer insights valiosos sobre sua infraestrutura de armazenamento.
  • Use a Portworx ® para gerenciamento avançado de dados: Para soluções avançadas de gerenciamento de dados e armazenamento persistente no Kubernetes, considere usar a Portworx da Pure Storage. A Portworx oferece recursos como alta disponibilidade, recuperação de desastres e backup que são especificamente desenvolvidos para aplicativos em contêiner.

Conclusão

Os volumes persistentes (PVs, Persistent Volumes) do Kubernetes oferecem um mecanismo fundamental para gerenciar o armazenamento em aplicativos stateful. Ao aproveitar PVs, você pode garantir persistência de dados, alta disponibilidade e utilização eficiente do armazenamento em seu cluster Kubernetes. Soluções como a Portworx da Pure Storage oferecem uma maneira intuitiva de aproveitar os benefícios dos volumes persistentes do Kubernetes. Com recursos como alta disponibilidade, recuperação de desastres e backup que usam inteligência artificial para melhorar a eficiência, a Portworx é a solução de armazenamento persistente Kubernetes ideal para aplicativos em contêiner.

02/2025
Deploying Portworx on Google Distributed Cloud Anthos with vSphere
This Portworx reference architecture contains a validated architecture and design model to deploy Portworx on Anthos running on vSphere.
Arquitetura de referência
28 pages

Confira os principais recursos e eventos

LIDERANÇA EM IDEIAS
A corrida pela inovação

Os insights e perspectivas mais recentes de líderes do setor na vanguarda da inovação do armazenamento.

Saiba mais
RELATÓRIO DE ANALISTAS
Planeje o futuro com resiliência cibernética

Conheça estratégias de colaboração para aproveitar os investimentos em cibersegurança em sua totalidade e garantir resposta e recuperação rápidas.

Leia o relatório
RECURSO
O futuro do armazenamento: novos princípios para a era da IA

Saiba como novos desafios, como a IA, estão transformando as necessidades de armazenamento de dados, exigindo um novo pensamento e uma abordagem avançada para se conseguir sucesso.

Obtenha o e-book
RECURSO
Adoção de plataformas: o fim das compras de armazenamento

Explore as necessidades, os componentes e o processo de seleção das plataformas de armazenamento corporativo.

Leia o relatório
Seu navegador não é mais compatível.

Navegadores antigos normalmente representam riscos de segurança. Para oferecer a melhor experiência possível ao usar nosso site, atualize para qualquer um destes navegadores mais atualizados.