Sobes.tech
Middle

Qu'est-ce que PV et PVC dans le contexte de Kubernetes ?

sobes.tech IA

Réponse de l'IA

Le Volume Persistant (PV) est une ressource de stockage dans le cluster Kubernetes. Il abstrait les détails de l'implémentation spécifique du stockage des consommateurs. Le PV est géré par l'administrateur du cluster et existe indépendamment du cycle de vie de tout pod.

La Requête de Volume Persistant (PVC) est une demande de stockage de l'utilisateur. L'utilisateur demande un volume de stockage avec des caractéristiques spécifiques (taille, mode d'accès). La PVC est liée à un PV approprié. Si aucun PV approprié n'est trouvé, un provisionnement dynamique d'un nouveau PV peut être effectué si un StorageClass correspondant est configuré.

Principales différences et interactions:

  • PV: Représente la ressource de stockage réelle.
  • PVC: Représente la demande de stockage de l'utilisateur.
  • La PVC est liée à un PV.
  • Le PV peut être créé statiquement par l'administrateur ou dynamiquement en réponse à une PVC en utilisant un StorageClass.
  • Le Pod fait référence à la PVC, pas directement au PV, ce qui permet de séparer la logique de l'application des détails du stockage.

Modes d'accès (Access Modes) pour PV et PVC:

  • ReadWriteOnce (RWO): Le volume peut être monté en lecture-écriture par un seul nœud à la fois.
  • ReadOnlyMany (ROX): Le volume peut être monté en lecture seule par plusieurs nœuds simultanément.
  • ReadWriteMany (RWX): Le volume peut être monté en lecture-écriture par plusieurs nœuds.

Exemple YAML pour PV et PVC:

# persistent-volume.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
  name: my-pv
spec:
  capacity:
    storage: 5Gi
  volumeMode: Filesystem
  accessModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Retain # Que faire du volume après la suppression de la PVC (Retain, Recycle, Delete)
  storageClassName: local-storage # Peut être utilisé pour le lien avec un StorageClass
  local:
    path: /mnt/data
  nodeAffinity: # Affinité pour le stockage 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 # Lié au PV ou au 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 # Référence à la PVC