主题
第 11 章 客户端挂载
11.1 Linux 客户端安装与挂载
安装 NFS 客户端
bash
# Ubuntu
apt install -y nfs-common
# Rocky
dnf install -y nfs-utils临时挂载
bash
mkdir -p /mnt/nfs-ha
mount -t nfs -o vers=4.1,hard,intr,timeo=600,retrans=3 10.0.0.100:/gv0 /mnt/nfs-ha验证挂载
bash
df -h /mnt/nfs-ha
touch /mnt/nfs-ha/testfile
ls -l /mnt/nfs-ha/testfile11.2 /etc/fstab 持久化配置
编辑 /etc/fstab,添加:
10.0.0.100:/gv0 /mnt/nfs-ha nfs4 defaults,_netdev,hard,intr,timeo=600,retrans=3 0 0自动挂载
bash
mount -a
_netdev选项告诉系统这是一个网络文件系统,网络就绪后再挂载。
11.3 挂载参数最佳实践
推荐参数
| 参数 | 推荐值 | 说明 |
|---|---|---|
vers | 4.1 | NFSv4.1 |
hard | - | 故障时持续重试 |
intr | - | 允许中断 |
timeo | 600 | 超时 60 秒 |
retrans | 3 | 重试次数 |
_netdev | - | 网络文件系统 |
noatime | - | 不更新访问时间 |
nolock | 视情况 | NFSv4 已内置锁,可不加 |
完整示例
bash
mount -t nfs -o vers=4.1,hard,intr,timeo=600,retrans=3,_netdev,noatime 10.0.0.100:/gv0 /mnt/nfs-ha11.4 Kubernetes NFS 动态供给
安装 NFS Subdir External Provisioner
bash
helm repo add nfs-subdir-external-provisioner \
https://kubernetes-sigs.github.io/nfs-subdir-external-provisioner/
helm repo update部署 Provisioner
bash
helm install nfs-provisioner \
nfs-subdir-external-provisioner/nfs-subdir-external-provisioner \
--set nfs.server=10.0.0.100 \
--set nfs.path=/gv0 \
--set storageClass.defaultClass=true创建 StorageClass 和 PVC
默认会创建 StorageClass nfs-client。验证:
bash
kubectl get sc
kubectl get pods -n default测试 PVC
yaml
cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: test-pvc
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 1Gi
EOF验证:
bash
kubectl get pvc test-pvc在 Pod 中使用
yaml
apiVersion: v1
kind: Pod
metadata:
name: test-pod
spec:
containers:
- name: app
image: busybox
command: ["sh", "-c", "sleep 3600"]
volumeMounts:
- name: data
mountPath: /data
volumes:
- name: data
persistentVolumeClaim:
claimName: test-pvc11.5 多客户端并发访问测试
场景 1:多节点写入
在 client1 和 client2 同时执行:
bash
# client1
for i in {1..100}; do echo "client1-$i" >> /mnt/nfs-ha/shared.log; done
# client2
for i in {1..100}; do echo "client2-$i" >> /mnt/nfs-ha/shared.log; done场景 2:大文件传输
bash
dd if=/dev/zero of=/mnt/nfs-ha/bigfile bs=1M count=1024场景 3:故障切换测试
在客户端持续写入的同时,停止当前持有 VIP 节点的 Ganesha 服务,观察写入是否中断后恢复。
bash
while true; do date >> /mnt/nfs-ha/failover-test.log; sleep 1; done11.6 本章小结
- Linux 客户端使用
nfs-common/nfs-utils - 推荐 NFSv4.1 + hard 挂载
/etc/fstab中加入_netdev确保网络就绪后挂载- Kubernetes 使用
nfs-subdir-external-provisioner动态供给 PVC - 多客户端并发测试可验证高可用性
练习题
- 为什么
_netdev参数在 fstab 中很重要? - NFSv4 是否需要额外配置
nolock? - Kubernetes 中
ReadWriteMany访问模式有什么要求? - 设计一个测试方案,验证 VIP 漂移时客户端 IO 是否中断。