Kubenets-PV(PersistentVolume)
PVPersistentVolume是Kubernetes中用于抽象存储资源的重要概念。PV是集群中的一块存储资源管理员预先创建或通过StorageClass动态创建。它具有以下特点集群级别资源不属于任何特定的命名空间 持久化存储即使Pod被删除数据仍然保留 生命周期独立与使用它的Pod生命周期分离PV的状态有Available可用尚未绑定到PVC Bound已绑定到PVC Released已释放但尚未被集群收回 Failed自动回收失败PV的声明周期如下供应阶段创建PV资源 绑定阶段PV与PVC绑定 使用阶段Pod通过PVC使用存储 释放阶段PVC删除PV释放 回收阶段PV根据策略进行回收PV的配置文件基本结构如下apiVersion: v1 kind: PersistentVolume metadata: name: example-pv labels: # 用于PVC匹配的关键标签 tier: storage spec: capacity: storage: 10Gi # 存储容量 # volumeMode显式指定文件系统模式其实不指定也是默认值 volumeMode: Filesystem accessModes: - ReadWriteOnce # 访问模式 persistentVolumeReclaimPolicy: Retain # 回收策略 storageClassName: fast-ssd # 存储类名称 mountOptions: # 挂载选项 - hard - nfsvers4.1 nfs: # 存储类型和配置 server: nfs-server.default.svc.cluster.local path: /dataPV字段详解labels可选项在Kubernetes的PersistentVolume(PV)配置中labels字段是一个可选但非常实用的部分下面我将详细解释其作用、使用方法和重要性。在PV中labels字段用于给PV添加标识性的键值对它们的主要作用是帮助PVC匹配到合适的PV。虽然labels不是必填项但在复杂的存储环境中非常有用。详细的配置介绍建议搜索一下PV中的labels字段详解capacity必选项用于指定PV的存储容量的字段是一个必填项。capacity: storage: 10Gi单位包括Gi, GiB, Mi, MiB, Ki, KiB, G, M, K等volumeMode必选项在Kubernetes的PersistentVolume(PV)配置中volumeMode字段是一个重要但常被忽略的参数它定义了PV的卷类型。下面我将详细解释volumeMode的作用、用法以及注意事项。volumeMode字段用于指定PV是作为文件系统使用还是作为裸块设备使用。这个字段决定了存储资源的暴露方式以及对存储的使用方式。volumeMode用于指定PV的卷模式Filesystem创建文件系统默认值Block原始块设备volumeMode: Filesystem # 或 BlockaccessModes必选项定义PV的访问模式可多选**ReadWriteOnce (RWO)**只能被单个节点以读写方式挂载**ReadOnlyMany (ROX)**可以被多个节点以只读方式挂载**ReadWriteMany (RWX)**可以被多个节点以读写方式挂载**ReadWriteOncePod (RWOP)**只能被单个Pod以读写方式挂载Kubernetes 1.22后可用accessModes: - ReadWriteOnce - ReadOnlyMany # 多个访问模式persistentVolumeReclaimPolicy必选项定义PV的回收策略Retain手动回收默认Delete自动删除关联的存储资源Recycle已废弃基本擦除后可再次使用不推荐persistentVolumeReclaimPolicy: Retain # 或 DeletestorageClassName可选项指定PV的存储类可与PVC的storageClassName匹配空字符串()表示特殊的存储类只能匹配同样设置的PVCnull表示不设置存储类可匹配不指定存储类的PVCstorageClassName: fast-ssd # 或 或 null这个存储类也是一个单独的资源需要创建。配置详解建议单独搜索文档了解。一般情况下常用的都是配置为空字符串因为使用PV和PVC的场景大部分都是特殊场景比如创建一个共享的网络文件系统NFS用于集群环境中节点之间的数据共享。例如storageClassName: nfs: server: 8.7.173.39 path: /opt/netcare/NetCare_ProjectPV的类型PV的类型包括网络文件系统(NFS)、云提供商存储(AWS EBS)、本地持久卷(Local)、iSCSI。配置详情建议后续根据实际工作场景研究后补充。PV的常用命令# 查看所有PV kubectl get pv # 查看PV详细信息 kubectl get pv -o wide # 查看PV详细描述 kubectl describe pv pv-name # 查看PV YAML配置 kubectl get pv pv-name -o yaml # 从文件创建PV kubectl create -f pv.yaml # 使用kubectl apply创建或更新PV kubectl apply -f pv.yaml # 删除PV如果使用Retain策略只会删除PV对象数据保留 kubectl delete pv pv-name # 强制删除即使有PVC绑定 kubectl delete pv pv-name --cascadefalseFAQ工作案例1apiVersion: v1 kind: PersistentVolume metadata: name: nfs-pv-project spec: capacity: storage: 450Gi accessModes: - ReadWriteMany persistentVolumeReclaimPolicy: Retain storageClassName: nfs: server: 8.7.173.39 path: /opt/netcare/NetCare_Project