1.使用
k8s 原生的 nfs 挂载支持 inline 和 pvc 两种方式,使用 pvc 的方式可以通过指定 mountOptions 来使用 v3 协议挂载。
1)in-tree
创建工作负载时,nfs的定义 | POD中nfs的定义 |
---|---|
| 其中,readyonly默认为false。
|
2)借助静态PV/PVC
apiVersion: v1
kind: PersistentVolume
metadata:
name: nfs-pv
spec:
mountOptions:
- vers=3
- nolock
- proto=tcp
- noresvport
accessModes:
- ReadWriteMany
capacity:
storage: 10Gi
nfs:
server: $server
path: $path
persistentVolumeReclaimPolicy: Retain
volumeMode: Filesystem
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: nfs-pvc
namespace: default
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 10Gi
storageClassName: ""
volumeMode: Filesystem
volumeName: cfs-pv
2.运行机制
nfs不需要kube-controller-manager中的controller,直接由kubelet执行相关操作。
nfs插件没有实现AttachableVolumePlugin,因此不需要attach/dettach。
nfs插件没有实现DeviceMountableVolumePlugin,因此在mount到pod之前,mount到节点上。
nfs直接执行,mount到pod路径的操作。
对于,mount option。
1)in-tree:只支持ready-only。可以在镜像中,设置/etc/nfsmount.conf
2)PVC/PV(静态):会从PV的spec中读取选项。