Kubernetes(K8s)持久卷与存储类使用教程

在Kubernetes中配置持久卷(PV)和存储类(StorageClass)时遇到几个问题:

  1. 如何正确创建和使用持久卷声明(PVC)来绑定特定的PV?
  2. 动态 provisioning 场景下,StorageClass 的参数该如何配置才能匹配不同的云服务商(如AWS EBS或Azure Disk)?
  3. PersistentVolume的访问模式(ReadWriteOnce/ReadOnlyMany等)在实际部署中应该如何选择?
  4. 当Pod被删除后,与之关联的PV/PVC数据该如何保留或自动清理?
  5. 有没有跨命名空间共享PV的最佳实践?遇到权限问题时该如何解决?

3 回复

首先,确保集群已配置支持的存储插件。创建存储类,例如使用NFS:

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: nfs-storage
provisioner: example.com/nfs

然后创建持久卷声明(PVC):

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: nfs-pvc
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 5Gi
  storageClassName: nfs-storage

接下来,在Pod中使用此PVC:

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

完成上述步骤后,Pod将挂载持久化存储。记得检查存储是否正常挂载,并验证数据持久性。


K8s的持久卷(PV)和存储类(StorageClass)是管理持久化存储的重要工具。首先,创建一个存储类定义不同的存储提供者,例如kubectl apply -f storageclass.yaml,其中storageclass.yaml内容如下:

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

接着,定义PV,指定存储容量和访问模式:

apiVersion: v1
kind: PersistentVolume
metadata:
  name: example-pv
spec:
  capacity:
    storage: 10Gi
  accessModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Retain
  storageClassName: fast
  awsElasticBlockStore:
    volumeID: vol-xxxxxxxx
    fsType: ext4

最后,Pod通过PersistentVolumeClaim(PVC)使用PV资源:

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: example-pvc
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 10Gi
  storageClassName: fast

Pod启动后即可挂载并使用该存储。这种方式简化了存储管理,适合复杂分布式系统。

Kubernetes持久卷(PV)和存储类(StorageClass)是管理集群存储的重要组件。以下是简明教程:

  1. 持久卷(PV)基础 PV是集群中的一块持久化存储资源,独立于Pod生命周期。

示例PV定义(YAML):

apiVersion: v1
kind: PersistentVolume
metadata:
  name: my-pv
spec:
  capacity:
    storage: 10Gi
  accessModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Retain
  storageClassName: manual
  hostPath:
    path: "/mnt/data"
  1. 持久卷声明(PVC) PVC是用户对存储的请求,K8s会为其匹配合适的PV。

示例PVC:

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: my-pvc
spec:
  storageClassName: manual
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 3Gi
  1. 存储类(StorageClass) StorageClass支持动态卷配置,定义不同类型的存储。

示例StorageClass:

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: standard
provisioner: kubernetes.io/aws-ebs
parameters:
  type: gp2
reclaimPolicy: Delete
volumeBindingMode: Immediate
  1. 使用流程
  • 管理员创建PV或StorageClass
  • 用户创建PVC请求存储
  • K8s自动绑定PVC和PV(静态)或动态配置(使用StorageClass)
  • Pod通过volumeMounts使用PVC

关键参数说明:

  • accessModes: ReadWriteOnce/ReadOnlyMany/ReadWriteMany
  • reclaimPolicy: Retain/Delete/Recycle
  • volumeBindingMode: Immediate/WaitForFirstConsumer

建议:生产环境推荐使用StorageClass实现动态配置,配合云厂商的CSI驱动。

回到顶部