当前位置: 首页 > news >正文

故障排除-------K8s挂载集群外NFS异常

故障排除-------K8s挂载集群外NFS异常

  • 1. 故障现象
  • 2. 原因梳理
    • 2.1 排查思路
    • 2.2 确认yaml内容
    • 2.3 创建k8s内的nfs测试
      • 2.3.1 创建nfs和svc
      • 2.3.2 测试创建pvc
      • 2.3.3 测试结果
    • 2.4 NFS服务端故障排除
      • 2.4.1 网络阻断排除
      • 2.4.2 排除服务状态问题
      • 2.4.3 排查NFS权限问题
  • 3. 故障排除

1. 故障现象

  1. nfs可以在任意节点挂载.
    在这里插入图片描述
  2. nfs csi正确安装
    在这里插入图片描述
  3. sc也能被正确创建,但pv未被创建,pvc无法被绑定
    在这里插入图片描述

2. 原因梳理

2.1 排查思路

问题可能发生的点无法以下2个
一. NFS的客户端(即k8s端)
k8s端可能出现的问题无非2部分

  1. csi配置问题
  2. yaml写的有问题
    排查方法:
  3. 由于csi我们重新部署过了,所以暂时忽略这个
  4. 确认storageclass和pvc的yaml内容是否正确.
  5. 在k8s集群中创建nfs看是否正常挂载pvc
    二. NFS服务提供端的问题
  6. 排查NFS服务端网络防火墙,selinux
  7. 排查NFS服务端的服务状态
  8. 排查NFS服务端权限

2.2 确认yaml内容

storageclass

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:name: nfs-csi
provisioner: nfs.csi.k8s.io
parameters:server: 192.168.31.6share: /nfs# csi.storage.k8s.io/provisioner-secret is only needed for providing mountOptions in DeleteVolume# csi.storage.k8s.io/provisioner-secret-name: "mount-options"# csi.storage.k8s.io/provisioner-secret-namespace: "default"
reclaimPolicy: Retain
volumeBindingMode: Immediate
mountOptions:- nfsvers=4.1

pvc

---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: nfs-pvc-defaultnamespace: default
spec:accessModes:- ReadWriteManyresources:requests:storage: 100MistorageClassName: nfs-csi

看上去yaml内容没什么问题

2.3 创建k8s内的nfs测试

2.3.1 创建nfs和svc

---
kind: Service
apiVersion: v1
metadata:name: nfs-servernamespace: defaultlabels:app: nfs-server
spec:type: ClusterIP  # use "LoadBalancer" to get a public ipselector:app: nfs-serverports:- name: tcp-2049port: 2049protocol: TCP- name: udp-111port: 111protocol: UDP
---
kind: Deployment
apiVersion: apps/v1
metadata:name: nfs-servernamespace: default
spec:replicas: 1selector:matchLabels:app: nfs-servertemplate:metadata:name: nfs-serverlabels:app: nfs-serverspec:nodeSelector:"kubernetes.io/os": linuxcontainers:- name: nfs-serverimage: registry.cn-hangzhou.aliyuncs.com/qiuqin/nfs-server-alpine:latestenv:- name: SHARED_DIRECTORYvalue: "/exports"volumeMounts:- mountPath: /exportsname: nfs-volsecurityContext:privileged: trueports:- name: tcp-2049containerPort: 2049protocol: TCP- name: udp-111containerPort: 111protocol: UDPvolumes:- name: nfs-volhostPath:path: /nfs-vol  # modify this to specify another path to store nfs share datatype: DirectoryOrCreate

2.3.2 测试创建pvc

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:name: nfs-csi2
provisioner: nfs.csi.k8s.io
parameters:server: nfs-server.default.svc.cluster.local.share: /# csi.storage.k8s.io/provisioner-secret is only needed for providing mountOptions in DeleteVolume# csi.storage.k8s.io/provisioner-secret-name: "mount-options"# csi.storage.k8s.io/provisioner-secret-namespace: "default"
reclaimPolicy: Retain
volumeBindingMode: Immediate
mountOptions:- nfsvers=4.1
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: nfs-pvc2-defaultnamespace: default
spec:accessModes:- ReadWriteManyresources:requests:storage: 110MistorageClassName: nfs-csi2

2.3.3 测试结果

测试下来可以看到sc,pv,pvc都正常被创建.
证明我们的yaml是没有问题的,那么问题可能出在NFS服务端
在这里插入图片描述

2.4 NFS服务端故障排除

2.4.1 网络阻断排除

排除了防火墙和selinux的可能性
在这里插入图片描述
在node节点上可以获取到nfs并挂载读取到nfs的内容
在这里插入图片描述

2.4.2 排除服务状态问题

刚才已经挂载上了,说明服务也是没有问题的
在这里插入图片描述

2.4.3 排查NFS权限问题

这里我们看到 nfs的权限是:

/nfs *(rw)

在这里插入图片描述
乍一看没什么问题,但我们来到node节点对nfs进行写操作时发现没有权限.
可我们明明(rw)了为啥没权限写入,可能问题就在这里了.
在这里插入图片描述
修改/etc/export,并重启nfs-utils服务

/nfs 192.168.31.0/24(rw,no_root_squash)

在这里插入图片描述
重新挂载并尝试写入数据到nfs
在这里插入图片描述
可以看到这里写入操作不再报错

3. 故障排除

尝试重建sc和pvc,可以看到pvc被正常绑定到了pv
在这里插入图片描述
回到nfs服务器也可以看到/nfs下对应的pvc目录被创建
在这里插入图片描述
我们再建个pod看下

---
apiVersion: v1
kind: Pod
metadata:name: nginx-nfs-examplenamespace: default
spec:containers:- image: harbor.panasonic.cn/test-nginx/nginx-web:v2.0.0name: nginxports:- containerPort: 80protocol: TCPvolumeMounts:- mountPath: /var/wwwname: pvc-nginxreadOnly: falsevolumes:- name: pvc-nginxpersistentVolumeClaim:claimName: nfs-pvc-default

可以看到目录被正常挂载到了pod的/var/www
在这里插入图片描述
在容器中创建一个文件,并在nfs服务器上可以正常读取到
在这里插入图片描述
至此K8s集群可以正常挂载集群外的NFS了
常见的NFS CSI除了本文中的csi-nfs之外还有nfs-subdir-external-provisioner
csi-nfs它的官网在:
https://github.com/kubernetes-csi/csi-driver-nfs
nfs-subdir-external-provisioner它的官网在:
https://github.com/kubernetes-sigs/nfs-subdir-external-provisioner

http://www.lryc.cn/news/491696.html

相关文章:

  • Easyexcel(6-单元格合并)
  • 解决登录Google账号遇到手机上Google账号无法验证的问题
  • 【Redis_Day5】String类型
  • Python MySQL SQLServer操作
  • Java技术分享
  • CentOS7卸载node
  • LeetCode 2257. Count Unguarded Cells in the Grid
  • 即时通讯服务器被ddos攻击了怎么办?
  • 【大数据学习 | Spark-Core】Spark中的join原理
  • 【代码pycharm】动手学深度学习v2-08 线性回归 + 基础优化算法
  • 李宏毅机器学习课程知识点摘要(1-5集)
  • React(五)——useContecxt/Reducer/useCallback/useRef/React.memo/useMemo
  • UE5时间轴节点及其设置
  • git 命令之只提交文件的部分更改
  • 算法 差分修改 极简
  • pcb元器件选型与焊接测试时的一些个人经验
  • OSG开发笔记(三十三):同时观察物体不同角度的多视图从相机技术
  • 模糊逻辑学习 | 模糊推理 | 模糊逻辑控制
  • 【JavaEE】Servlet:表白墙
  • C++特殊类设计(不能被拷贝的类、只能在堆上创建对象的类、不能被继承的类、单例模式)
  • 【小白学机器学习34】用python进行基础的数据统计 mean,var,std,median,mode ,四分位数等
  • 安装 Docker(使用国内源)
  • Ajax学习笔记,第一节:语法基础
  • 《用Python画蔡徐坤:艺术与编程的结合》
  • Unity中动态生成贴图并保存成png图片实现
  • Mac配置maven环境及在IDEA中配置Maven
  • Reactor 模式的理论与实践
  • vim 一次注释多行 的几种方法
  • 问题记录-Java后端
  • 李春葆《数据结构》-课后习题代码题