Sobes.tech
Middle

O que são PV e PVC no contexto do Kubernetes?

sobes.tech IA

Resposta da IA

O Volume Persistente (PV) é um recurso de armazenamento no cluster Kubernetes. Ele abstrai os detalhes da implementação específica do armazenamento dos consumidores. O PV é gerido pelo administrador do cluster e existe independentemente do ciclo de vida de qualquer pod.

A Reivindicação de Volume Persistente (PVC) é uma solicitação do utilizador para armazenamento. O utilizador solicita um volume de armazenamento com características específicas (tamanho, modo de acesso). A PVC é ligada a um PV adequado. Se não for encontrado um PV adequado, pode ser feito um provisionamento dinâmico de um novo PV se um StorageClass correspondente estiver configurado.

Principais diferenças e interação:

  • PV: Representa o recurso de armazenamento real.
  • PVC: Representa a solicitação de armazenamento do utilizador.
  • A PVC liga-se a um PV.
  • O PV pode ser criado estaticamente pelo administrador ou dinamicamente em resposta a uma PVC usando um StorageClass.
  • O Pod faz referência à PVC, não diretamente ao PV, o que permite separar a lógica da aplicação dos detalhes do armazenamento.

Modos de acesso (Access Modes) para PV e PVC:

  • ReadWriteOnce (RWO): O volume pode ser montado para leitura e escrita por um único nó de cada vez.
  • ReadOnlyMany (ROX): O volume pode ser montado apenas para leitura por muitos nós ao mesmo tempo.
  • ReadWriteMany (RWX): O volume pode ser montado para leitura e escrita por muitos nós ao mesmo tempo.

Exemplo YAML para PV e PVC:

# persistent-volume.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
  name: my-pv
spec:
  capacity:
    storage: 5Gi
  volumeMode: Filesystem
  accessModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Retain # O que fazer com o volume após a remoção da PVC (Retain, Recycle, Delete)
  storageClassName: local-storage # Pode ser usado para vincular a um StorageClass
  local:
    path: /mnt/data
  nodeAffinity: # Afinidade para armazenamento local
    required:
      nodeSelectorTerms:
        - matchExpressions:
            - key: kubernetes.io/hostname
              operator: In
              values:
                - my-node
# persistent-volume-claim.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: my-pvc
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 5Gi
  storageClassName: local-storage # Ligado ao PV ou ao StorageClass
# pod-using-pvc.yaml
apiVersion: v1
kind: Pod
metadata:
  name: my-app
spec:
  containers:
    - name: app-container
      image: nginx
      volumeMounts:
        - name: app-storage
          mountPath: /usr/share/nginx/html
  volumes:
    - name: app-storage
      persistentVolumeClaim:
        claimName: my-pvc # Referência à PVC