1. 前置条件
- NFS 服务器已部署:指定自己的NFS 服务器地址为
192.168.111.105
,共享目录为/data/nfs/static
。 - 客户端节点已安装 NFS 工具:确保 Kubernetes 节点能挂载 NFS。
2. 创建 PersistentVolume (PV)
手动定义一个 PV,指向 NFS 服务器的共享目录:
apiVersion: v1
kind: PersistentVolume
metadata:
name: static-nfs-pv
spec:
capacity:
storage: 10Gi # PV 总容量
volumeMode: Filesystem
accessModes:
- ReadWriteMany # NFS 支持多节点读写
persistentVolumeReclaimPolicy: Retain # 删除 PVC 后保留 PV 和数据
storageClassName: static-nfs # 可自定义或留空(与 PVC 匹配)
nfs:
path: /data/nfs/static # NFS 共享目录路径
server: 192.168.111.105 # NFS 服务器 IP
应用配置:
kubectl apply -f static-nfs-pv.yaml
3. 创建 PersistentVolumeClaim (PVC)
定义 PVC 来申请 PV 资源(需匹配 PV 的 storageClassName
和容量):
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: static-nfs-pvc
spec:
storageClassName: static-nfs # 必须与 PV 的 storageClassName 一致
accessModes:
- ReadWriteMany
resources:
requests:
storage: 5Gi # 请求的存储量(需 ≤ PV 的容量)
应用配置:
kubectl apply -f static-nfs-pvc.yaml
4. 验证 PV/PVC 绑定
检查 PV 和 PVC 状态:
kubectl get pv static-nfs-pv # 状态应为 Bound
kubectl get pvc static-nfs-pvc # 状态应为 Bound
5. 在 Pod 中使用 PVC
将 PVC 挂载到 Pod 中:
apiVersion: v1
kind: Pod
metadata:
name: nfs-static-pod
spec:
containers:
- name: nginx
image: nginx
volumeMounts:
- name: nfs-storage
mountPath: /usr/share/nginx/html # 容器内的挂载路径
volumes:
- name: nfs-storage
persistentVolumeClaim:
claimName: static-nfs-pvc # 引用 PVC
应用配置:
kubectl apply -f pod-with-static-pvc.yaml
6. 验证数据持久化
(1) 写入数据到 NFS 目录
kubectl exec -it nfs-static-pod -- touch /usr/share/nginx/html/test.txt
(2) 检查 NFS 服务器目录
在 NFS 服务器的 /data/nfs/static
目录中,应看到 test.txt
文件:
ls /data/nfs/static # 确认文件存在
7. 清理资源
(1) 删除 Pod 和 PVC
kubectl delete pod nfs-static-pod
kubectl delete pvc static-nfs-pvc
(2) 手动清理 PV
由于 persistentVolumeReclaimPolicy: Retain
,删除 PVC 后 PV 状态变为 Released
,需手动删除并清理 NFS 数据:
kubectl delete pv static-nfs-pv
rm -rf /data/nfs/static/* # 在 NFS 服务器上执行
配置说明
参数 | 作用 |
---|---|
accessModes: ReadWriteMany | NFS 支持多节点同时读写。 |
persistentVolumeReclaimPolicy | Retain :删除 PVC 后保留 PV 和数据;Delete :自动删除 PV 和数据(需谨慎! )。 |
storageClassName | 用于将 PVC 与 PV 匹配 |
使用推荐:
- 需要精确控制存储资源的分配。
- NFS 共享目录已预先规划,无需动态创建子目录。