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

bash 复制代码
apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv-nfs-v3
spec:
  accessModes:
  - ReadWriteOnce
  capacity:
    storage: 2Gi
  mountOptions:
  - vers=3
  - nolock,tcp,noresvport
  nfs:
    path: /nfs-v3
    server: nas_server
  persistentVolumeReclaimPolicy: Retain
bash 复制代码
apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv-nfs-v4.0
spec:
  accessModes:
  - ReadWriteOnce
  capacity:
    storage: 2Gi
  mountOptions:
  - vers=4.0
  - noresvport
  nfs:
    path: /nfs-v4.0
    server: nas_server
  persistentVolumeReclaimPolicy: Retain

动态pvc

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

bash 复制代码
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: nfsv3-sc
mountOptions:
- vers=3
- nolock,tcp,noresvport
provisioner: fuseim.pri/ifs
reclaimPolicy: Retain


---------------

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: nfsv4-sc
mountOptions:
- vers=4.0
- nolock,tcp,noresvport
provisioner: fuseim.pri/ifs
reclaimPolicy: Retain

PVC

bash 复制代码
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: nfsv3-pvc
  namespace: default
spec:
  accessModes:
  - ReadWriteOnce
  resources:
    requests:
      storage: 1Gi
  storageClassName: nfsv3-sc
  volumeMode: Filesystem


---------------

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: nfsv4-pvc
  namespace: default
spec:
  accessModes:
  - ReadWriteOnce
  resources:
    requests:
      storage: 1Gi
  storageClassName: nfsv4-sc
  volumeMode: Filesystem

测试

bash 复制代码
kind: Pod
apiVersion: v1
metadata:
  name: test-nfs-pod
  namespace: default
spec:
  containers:
  - name: test-nfs-pod
    image: busybox:1.24
    command:
    - "/bin/sh"
    args:
    - "-c"
    - "while true; do sleep 99999;done"
    volumeMounts:
    - name: nfsv3-pvc
      mountPath: "/mnt/nfsv3"
    - name: nfsv4-pvc
      mountPath: "/mnt/nfsv4"
  restartPolicy: "Never"
  volumes:
  - name: nfsv3-pvc
    persistentVolumeClaim:
      claimName: nfsv3-pvc
  - name: nfsv4-pvc
    persistentVolumeClaim:
      claimName: nfsv4-pvc

检查验证

bash 复制代码
mount | grep nfs
相关推荐
照物华25 分钟前
K8s概念之进程、容器与 Pod 的终极指南
云原生·容器·kubernetes
vvilkim6 小时前
Java主流框架全解析:从企业级开发到云原生
java·运维·云原生
JohnYan13 小时前
工作笔记 - CentOS7环境运行Bun应用
javascript·后端·容器
ezreal_pan13 小时前
Kubernetes 负载均衡现象解析:为何同一批次请求集中于单个 Pod
运维·云原生·k8s·traefik
小猿姐13 小时前
KubeBlocks AI:AI时代的云原生数据库运维探索
数据库·人工智能·云原生·kubeblocks
曼岛_14 小时前
[系统架构设计师]云原生架构设计理论与实践(十四)
云原生·系统架构·系统架构设计师
科大饭桶14 小时前
C++入门自学Day14-- Stack和Queue的自实现(适配器)
c语言·开发语言·数据结构·c++·容器
城管不管15 小时前
Docker核心---数据卷(堵门秘籍)
运维·docker·容器
wdxylb15 小时前
云原生俱乐部-RH294知识点归纳(1)
云原生·ansible
Britz_Kevin1 天前
从零开始的云计算生活——第四十六天,铁杵成针,kubernetes模块之Configmap资源与Secret资源对象
kubernetes·云计算·生活