Dados salvos nos Persistent Volumes sobrevivem ao reinicio de um Pod. Em diversas situações os dados vivem muito além do ciclo de vida das aplicações, containers, Pods, Nodes e até do próprio Cluster. A persistência de dados garante que seu ciclo de vida estará desacoplado do ciclo de vida de outros recursos do cluster. Um exemplo típico são os dados persistidos em bancos de dados.

O Kubernetes realiza a persistência dos dados com a ajuda de duas primitivas: PersistentVolume e PersistentVolumeClaim.

Figure 8-2. Claiming a PersistentVolume from a Pod

Figure 8-2. Claiming a PersistentVolume from a Pod

Trecho da Documentação Kubernetes

Introduction

Um PersistentVolume (PV) é um pedaço reservado do armazenamento do cluster que pode ter sido provisionado de forma estática por um administrador ou dinâmica por um Storage Class. Um PersistentVolumeClaim (PVC) representa uma requisição por armazenamento feita pelo usuário. Fazendo uma analogia rápida, temos os Pods que consomem recursos como CPU e memória do Node e temos os PVCs que consomem o espaço de armazenamento e modos de acesso fornecidos nos PVs.

Enquanto os PersistentVolumeClaims permitem a abstração e consumo dos recursos de armazenamento, é comum que surja a necessidade de PersistentVolumes com diferentes atributos como performance para aplicação em diferentes soluções. Os administradores do cluster Kubernetes podem oferecer uma variedade de PersistentVolumes com diferenças que vão além do seu tamanho e modo de acesso sem expor os detalhes da implementação. Para atender a esta demanda existe o *StorageClass.*

O StorageClass é a primitiva que fornece uma maneira do administrator descrever as classes de armazenamento oferecidas no cluster Kubernetes. Diferentes classes são mapeadas para diferentes níveis de QoS(quality of service), políticas de backup ou outras políticas arbitrárias determinadas pelo administrador do cluster. Cada StorageClass possui os seguintes campos provisioner, parameters e reclaimPolicy, estes campos são utilizados quando um PersistentVolume que pertence a classe precisa ser provisionado dinamicamente. É com base no name dado ao StorageClass que os usuários conseguirão requisitar um PersistentVolume de determinada classe de forma dinâmica através de um PersistentVolumeClaim. O administrador determina o name e outros parâmetros da classe quando cria o StorageClass e, uma vez criado, o objeto não pode ser modificado.

Lifecycle of a volume and claim

PVs são recursos do cluster e PVCs são requisições a estes recursos. A interação entre PV e PVC ocorre de acordo com o seguinte ciclo de vida:

Provisionamento: Existem duas maneiras de provisionar um PV: dinâmica e estática.

Estática: O administrador do cluster cria um número arbitrário de PVs prevendo o consumo de armazenamento futuro. Eles possuem detalhes do dispositivo de armazenamento real que é disponibilizado para os usuários.

Dinâmica: Quando nenhum PV estático criado pelo administrador corresponde ao PersistentVolumeClaim que o usuário criou o Kubernetes tenta provisionar um PV dinamicamente que seja compatível com o PVC. Este provisionamento é baseado em StorageClasses: O PVC deve solicitar uma classe de armazenamento e o administrador deve ter configurado esta classe para que ocorra o provisionamento dinâmico. Para habilitar o provisionamento dinâmico de armazenamento baseado em StorageClasses, o administrador do cluster precisa habilitar o  DefaultStorageClass admission controller no API server. PVCs que solicitam a classe “” desabilitam o provisionamento dinâmico para si próprios.

Binding(PV - PVC)

Um usuário cria um PersistentVolumeClaim com uma quantidade específica de armazenamento e o modo de acesso desejado. Um loop de controle no control-plane monitora a criação de novos PVCs, encontra(se possível) um PV correspondente e cria o vínculo entre PV e PVC. Se o PV foi provisionado dinamicamente para um novo PVC, o loop de controle manterá o vínculo entre PV e PVC. O vinculo entre PV e PVC é um mapeamento one-a-one utilizando o campoClaimRef do PV para fazer a ligação bi-direcional entre eles.

O QUE É STORAGE CLASS, PV E PVC | DESCOMPLICANDO O KUBERNETES

https://youtu.be/_WxMQRFmXd4?t=60

Documentação Kubernetes

Storage Classes

Documentação Storage Class

Persistent Volumes

Documentação Persistent Volume

Persistent Volumes

Documentação Persistent Volume - Access Modes