在K8S中,PV和PVC如何使用?

在kubernetes中,PersistentVolume(PV)和PersistentVolumeClaim(PVC)的使用涉及以下步骤:

创建PersistentVolume(PV)

定义PV:

首先,集群管理员需要创建一个或多个PersistentVolume资源。这通常在YAML文件中定义,并通过kubectl apply命令提交到集群。PV定义包含如下关键属性

  • capacity:指定PV的存储容量。
  • accessModes:描述PV允许的访问模式(ReadWriteOnce、ReadOnlyMany或ReadWriteMany)。
  • storageClassName:如果有StorageClass,则指定PV属于哪个类。
  • nfsawsElasticBlockStore:具体存储类型相关的配置信息,例如:对于NFS类型的PV,需要提供NFS服务器的地址和挂载路径。
示例:
apiVersion: v1
kind: PersistentVolume
metadata:
  name: my-nfs-pv
spec:
  capacity:
    storage: 10Gi
  accessModes:
    - ReadWriteMany
  nfs:
    path: /exports/data
    server: nfs-server.example.com
  storageClassName: managed-nfs-storage

创建PersistentVolumeClaim(PVC)

定义PVC:

开发者或应用所有者不需要关心具体的存储实现细节,只需声明他们所需要的存储资源规格。这通过创建PersistentVolumeClaim来完成。同样一yaml形式定义并通过kubectl apply提交。
PVC定义通常包括

  • spec.resources.requests.storage:请求的存储容量大小。
  • accessModes:指明所需的访问模式。
  • storageClassName:可选地指定希望使用的StorageClass名称。如果不指定,将匹配任何可用的PV;如果集群中有默认的StorageClass,则会自动关联。
示例:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: my-nfs-pvc
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 5Gi
  storageClassName: managed-nfs-storage

将PVC和POD关联

在Pod中引用PVC:

当PVC创建完成后,在需要持久化存储的Pod的容器卷配置部分引用此PVC。当Pod运行时,kubernetes会自动将满足的PV绑定到PVC,并将该PV挂载至Pod的相关目录下。

示例:
apiVersion: v1
kind: Pod
metadata:
  name: my-app-pod
spec:
  containers:
  - name: my-app-container
    image: my-app-image
    volumeMounts:
    - mountPath: /data
      name: my-pvc-volume
  volumes:
  - name: my-pvc-volume
    persistentVolumeClaim:
      claimName: my-nfs-pvc

综上所述:
当Pod被调度并运行后,其内部的/data目录就会映射到由PVC绑定到PV上的实际鵆空间上,从而实现了数据的持久化存储。即使Pod因为节点故障等原因被重新调度到其他节点,由于PVC与PV的绑定关系不变,Pod在新的节点上仍能继续访问同一块存储区域中的数据。

猜你喜欢

转载自blog.csdn.net/qq_56408123/article/details/143472986