• k8s nfs-client 添加挂载参数 —— 筑梦之路


    背景介绍

    1. 为什么要使用noresvport参数挂载NAS?不重新挂载会有什么后果?

      如果发生网络切换或者后端服务的HA倒换,小概率会造成NFS文件系统阻塞,那就可能需要几分钟时间连接才会自动恢复,极端情况下甚至需要重启ECS才能恢复。使用noresvport参数后,这个恢复几秒就可以自动完成。

    2. 什么情况会引发网络切换或者后端服务的HA倒换?

      NAS服务是稳定的,网络切换或者后端服务的HA倒换都是罕见情况。

      后端服务升级会触发上述切换,但导致客户端阻塞的概率很低,并且在升级之前我们会提前通知相关集群的用户,留出充足时间使用noresvport参数。

      其他可能引发切换的场景,还有负载均衡调整、服务端硬件故障等情况,有一定的不可预测性,所以即使服务端没有升级安排,也请尽快使用noresvport参数避免这样的风险。

    3. 为什么需要重新挂载?还有没有其他的方案?

      需要重新挂载的原因是要把之前没有使用noresvport参数的TCP连接断掉,然后使用noresvport参数挂载时,会建立新的TCP连接。

      为了把老的TCP连接断掉,就必须把NAS相关的业务都停掉,然后执行umount卸载。

      如果不希望重新挂载,可以考虑新建NAS挂载点,使用noresvport参数挂载到新的本地路径,然后把业务进程逐步迁移过去,最后废弃老的挂载路径和挂载点。

    NFS挂载示例

    静态PV

    1. apiVersion: v1
    2. kind: PersistentVolume
    3. metadata:
    4. name: pv-nfs-v3
    5. spec:
    6. accessModes:
    7. - ReadWriteOnce
    8. capacity:
    9. storage: 2Gi
    10. mountOptions:
    11. - vers=3
    12. - nolock,tcp,noresvport
    13. nfs:
    14. path: /nfs-v3
    15. server: nas_server
    16. persistentVolumeReclaimPolicy: Retain

     

    1. apiVersion: v1
    2. kind: PersistentVolume
    3. metadata:
    4. name: pv-nfs-v4.0
    5. spec:
    6. accessModes:
    7. - ReadWriteOnce
    8. capacity:
    9. storage: 2Gi
    10. mountOptions:
    11. - vers=4.0
    12. - noresvport
    13. nfs:
    14. path: /nfs-v4.0
    15. server: nas_server
    16. persistentVolumeReclaimPolicy: Retain

    动态pvc

    假设集群已经部署了nfs-client-provisioner用来实现在动态提供PersistentVolume

    1. apiVersion: storage.k8s.io/v1
    2. kind: StorageClass
    3. metadata:
    4. name: nfsv3-sc
    5. mountOptions:
    6. - vers=3
    7. - nolock,tcp,noresvport
    8. provisioner: fuseim.pri/ifs
    9. reclaimPolicy: Retain
    10. ---------------
    11. apiVersion: storage.k8s.io/v1
    12. kind: StorageClass
    13. metadata:
    14. name: nfsv4-sc
    15. mountOptions:
    16. - vers=4.0
    17. - nolock,tcp,noresvport
    18. provisioner: fuseim.pri/ifs
    19. reclaimPolicy: Retain

    PVC

    1. apiVersion: v1
    2. kind: PersistentVolumeClaim
    3. metadata:
    4. name: nfsv3-pvc
    5. namespace: default
    6. spec:
    7. accessModes:
    8. - ReadWriteOnce
    9. resources:
    10. requests:
    11. storage: 1Gi
    12. storageClassName: nfsv3-sc
    13. volumeMode: Filesystem
    14. ---------------
    15. apiVersion: v1
    16. kind: PersistentVolumeClaim
    17. metadata:
    18. name: nfsv4-pvc
    19. namespace: default
    20. spec:
    21. accessModes:
    22. - ReadWriteOnce
    23. resources:
    24. requests:
    25. storage: 1Gi
    26. storageClassName: nfsv4-sc
    27. volumeMode: Filesystem

    测试

    1. kind: Pod
    2. apiVersion: v1
    3. metadata:
    4. name: test-nfs-pod
    5. namespace: default
    6. spec:
    7. containers:
    8. - name: test-nfs-pod
    9. image: busybox:1.24
    10. command:
    11. - "/bin/sh"
    12. args:
    13. - "-c"
    14. - "while true; do sleep 99999;done"
    15. volumeMounts:
    16. - name: nfsv3-pvc
    17. mountPath: "/mnt/nfsv3"
    18. - name: nfsv4-pvc
    19. mountPath: "/mnt/nfsv4"
    20. restartPolicy: "Never"
    21. volumes:
    22. - name: nfsv3-pvc
    23. persistentVolumeClaim:
    24. claimName: nfsv3-pvc
    25. - name: nfsv4-pvc
    26. persistentVolumeClaim:
    27. claimName: nfsv4-pvc

    检查验证

    mount | grep nfs
    

  • 相关阅读:
    如何发布一个属于自己的 npm 包
    INI 格式配置文件基础知识
    GEE3:吴秋生geemap介绍和安装
    NineData:从 Kafka 到 ClickHouse 的数据同步解决方案
    顺丰快递商家寄件发货接口API类型和接入流程方案【快递100接口Demo】
    如何将一个字符串转换为驼峰命名法(camel case)?
    云南白药正在度过“中年危机”
    云课五分钟-04一段代码学习-大模型分析C++
    jdk历程
    【题解】P8817 [CSP-S 2022] 假期计划(bfs,dfs)
  • 原文地址:https://blog.csdn.net/qq_34777982/article/details/132600665