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 地址。