PersistentVolum持久卷PV

由管理员设置的存储:PV是集群对策一部分。就像是节点一样,是集群中的资源。PV 独立于Pod的生命周期之外。


创建PV

与创建volume类似,这里挂载nfs为示例

创建nfs服务,在主机192.168.0.190上执行。

# 安装nfs
apt install nfs-kernel-server
# 创建要挂载的目录
mkdir -p /opt/nfs/data
# 配置nfs
echo "/opt/nfs/data *(rw,sync,no_subtree_check)" >> /etc/exports
# 使配置生效
exportfs -ra

创建pv资源文件

apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv01
spec:
  capacity:
    storage: 1Gi
  volumeMode: Filesystem
  accessModes:
  -  ReadWriteOnce
  persistentVolumeReclaimPolicy: Recycle
  mountOptions:
  - hard
  - vers=4.1
  nfs:
    path: /opt/nfs/data
    server: 192.168.0.190

这个 YAML 文件定义了一个 Kubernetes 的 PersistentVolume (PV) 对象,它代表了一个在集群中预先存在的存储卷。以下是该 YAML 文件的详细解释:

capacity

storage: 1Gi: 定义了 PV 的存储容量,这里是 1GiB(吉字节)。

 volumeMode

Filesystem: 表示这个 PV 将作为文件系统被挂载到 Pod 中。

在 Kubernetes 中,volumeMode 字段用于指定 PersistentVolume(PV)的卷模式,它决定了卷是以文件系统(Filesystem)还是原始块设备(Block)的形式挂载到 Pod 中。

具体来说,volumeMode 可以有以下两种模式:

Filesystem:
  • 这是默认的卷模式。
  • 当设置为 Filesystem 时,卷将作为文件系统被挂载到 Pod 中。
  • 大部分卷类型(如 emptyDir、hostPath、NFS、AWS EBS 等)都支持此模式。
Block:
  • 当设置为 Block 时,卷将以原始块设备的形式提供给 Pod。
  • 在这种情况下,Pod 中的应用程序需要负责在块设备上创建和管理文件系统(如果需要的话)。
  • 不是所有的卷类型都支持块模式,但一些特定的卷类型(如 AWS EBS、Azure Disk、GCE PD 等)确实支持它。

accessModes

- ReadWriteOnce: 表示这个 PV 可以被单个节点以读写模式挂载。Kubernetes 支持多种访问模式:

  • ReadWriteOnce 单节点读写
  • ReadOnlyMany 多节点只读
  • ReadWriteMany 多节点读写

persistentVolumeReclaimPolicy

Recycle: 定义了当 PV 不再被任何 PVC (PersistentVolumeClaim) 使用时,PV 应该如何被回收。Recycle 策略会尝试删除 PV 中的数据并重新准备它以供再次使用。但请注意,Recycle 策略在某些 Kubernetes 版本中可能已被弃用或不再支持。更常见的回收策略包括 Delete(删除 PV 和关联的存储资源)和 Retain(保留 PV,需要管理员手动处理)。

storageClassName

slow: 指定了 PV 所属的存储类 (StorageClass) 的名字。这个名字应该与集群中定义的某个 StorageClass 匹配。StorageClass 用于动态地创建 PV。但是,对于预先定义的 PV(如本例),StorageClass 主要用于描述 PV 的存储类型或特性。

mountOptions

这里定义了两个挂载选项:

  • hard: 表示 NFS 挂载是硬挂载,即如果服务器不可达,客户端将尝试继续访问(可能导致错误)。
  • vers=4.1: 指定具体的 NFS 版本,

nfs

  • 这部分定义了 PV 使用的 NFS 存储的具体配置。
  • path: /opt/nfs/data: NFS 服务器上的路径,这个路径下的内容将被挂载到使用此 PV 的 Pod 中。
  • server: 192.168.0.190: NFS 服务器的 IP 地址。