故障排除-------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.mzph.cn/news/886939.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

大数据的left_join

刷算法题: 第一遍:1.看5分钟,没思路看题解 2.通过题解改进自己的解法,并且要写每行的注释以及自己的思路。 3.思考自己做到了题解的哪一步,下次怎么才能做对(总结方法) 4.整理到自己的自媒体平台。 5.再刷重复的类…

安卓CameraX的使用

如果要在安卓应用中操作相机,有三个库可以选: Camera(已废弃):Camera是安卓最早的包,目前已废弃,在Android 5.0(API 级别 21)的设备上操作相机可以选择该包,…

微服务即时通讯系统的实现(客户端)----(2)

目录 1. 将protobuf引入项目当中2. 前后端交互接口定义2.1 核心PB类2.2 HTTP接口定义2.3 websocket接口定义 3. 核心数据结构和PB之间的转换4. 设计数据中心DataCenter类5. 网络通信5.1 定义NetClient类5.2 引入HTTP5.3 引入websocket 6. 小结7. 搭建测试服务器7.1 创建项目7.2…

02_Spring_IoC实现

接下来先简单说一下关于IoC的一些要点,后面我们再详细一步一步讨论。 一、IoC控制反转 IoC控制反转它是一种思想,不是具体的实现控制反转的目的是为了降低程序的耦合度,提高程序的可扩展性,从而满足OCP原则和DIP原则控制反转,那到底反转是什么东西? 我们不再使用某个对象…

凸函数与深度学习调参

问题1:如何区分凸问题和凹问题? 问题2:深度学习如何区分调参?

游戏开发实现简易实用的ui框架

游戏开发实现简易实用的ui框架 本文使用cocos引擎实现,框架代码本质上不依赖某一个引擎,稍作修改也能作为其他引擎的实现 1.1 UI管理框架的核心需求剖析 分层与类型管理 对不同类型UI需要进行分层管理。不同层级的UI需要有不同的父节点,保证渲…

使用可视化工具kafkatool连接docker的kafka集群,查看消息内容和offset

1、下载kafkatool 下载地址Offset Explorer,下载对应系统的offset explorer 下载完,傻瓜安装即可(建议放D盘),在开始菜单输入offset找到该应用打开 打开 2、连接kafka 点击File > add new connection Bootstrap…

关于Java使用ueditor上传图片的一些总结

1.如何配置ueditor让上传的图片到项目之外? 因为图片上传到web项目中,重新部署项目可能会丢失图片。 解决方法:下载ueditor.1.1.2.jar. 地址:ueditor-1.1.2项目源码及jar包.zip 链接: https://pan.baidu.com/s/1Bhumfw8OX16n0MTO9ur73g 提…

React可以做全栈开发吗

React可以做全栈开发吗? 答案是肯定的,而且还比较完美 React可以用于全栈开发,以下是具体的介绍: 前端部分 构建用户界面 React是一个用于构建用户界面的JavaScript库,它通过组件化的方式让开发者能够高效地创建交互式的UI。例…

【前端学习笔记】Javascript学习二(运算符、数组、函数)

一、运算符 运算符(operator)也被称为操作符,是用于实现赋值、比较和执行算数运算等功能的符号。 JavaScript中常用的运算符有: 算数运算符、递增和递减运算符、比较运算符、逻辑运算符、赋值运算符 算数运算符: 、-…

Redis五大基本类型——List列表命令详解(命令用法详解+思维导图详解)

目录 一、List列表类型介绍 二、常见命令 1、LPUSH 2、LPUSHX 3、RPUSH 4、RPUSHX 5、LRANGE 6、LPOP 7、RPOP 8、LREM 9、LSET 10、LINDEX 11、LINSERT 12、LLEN 13、阻塞版本命令 BLPOP BRPOP 三、命令小结 相关内容: Redis五大基本类型——Ha…

快速入门消息队列MQ、RabbitMQ

目录 一、MQ简介 1.同步调用 2.异步调用 3.技术选型 二、RabbitMQ 1.安装 2.控制台的使用说明 2.1交换机 2.2队列​编辑 2.3绑定关系 3.AMQP 3.1快速入门 3.2WorkQueues模型 3.3交换机 3.3.1 Fanout交换机 3.3.2 Direct交换机 3.3.3 Topic交换机 3.4 声明交换机…

CRM系统安全性排名:数据保护能力评估

安全性对CRM系统厂商和企业来说至关重要,因为它直接关系到企业的客户数据、商业机密和品牌信誉。CRM系统通常存储了大量敏感信息,包括客户联系详情、交易记录和个人身份信息,一旦发生数据泄露或安全事件,不仅可能导致客户信任丧失…

Spark SQL大数据分析快速上手-完全分布模式安装

【图书介绍】《Spark SQL大数据分析快速上手》-CSDN博客 《Spark SQL大数据分析快速上手》【摘要 书评 试读】- 京东图书 大数据与数据分析_夏天又到了的博客-CSDN博客 Hadoop完全分布式环境搭建步骤-CSDN博客,前置环境安装参看此博文 完全分布模式也叫集群模式。将Spark目…

《现代网络技术》读书笔记:NFV功能

本文部分内容来源于《现代网络技术:SDN,NFV,QoE、物联网和云计算:SDN,NFV,QoE,IoT,andcloud》 NFV基础设施 NFV体系结构的核心是资源与功能集合,也为称为NFV基础设施(NFVI)。NFVI包括以下三个域: 计算域:提供商用的大…

MySQL数据库2——SQL语句

一.SQL基础 1.SQL通用语法 1.SQL语句可以单行或多行书写,以分号结尾。2.SOL语句可以使用空格/缩进来增强语句的可读性。3.MySQL数据库的SQL语句不区分大小写,关键字建议使用大写 注释: 单行注释:-- 注释内容或#注释内容(MySQL…

会员等级经验问题

问题描述 会员从一级完成任务升级到二级以后,一级显示还差经验,这里差的其实是二级到三级的经验,如下图所示 修复方法 1、前端需要修改: 路径:/pages/users/user_vip/index.vue 方便复制: v-if"i…

【Apache Paimon】-- 6 -- 清理过期数据

目录 1、简要介绍 2、操作方式和步骤 2.1、调整快照文件过期时间 2.2、设置分区过期时间 2.2.1、举例1 2.2.2、举例2 2.3、清理废弃文件 3、参考 1、简要介绍 清理 paimon (表)过期数据可以释放存储空间,优化资源利用并提升系统运行效…

前端项目支持tailwindcss写样式

安装 npm install -D tailwindcss npx tailwindcss init配置 tailwind.config.js //根据个人需求填写,比如vue简单配置 /** type {import(tailwindcss).Config} */ module.exports {darkMode: "class",corePlugins: {preflight: false},content: [&quo…

Spring Boot整合Kafka,实现单条消费和批量消费,示例教程

如何安装Kafka&#xff0c;可以参考docker搭载Kafka集群&#xff0c;一个文件搞定&#xff0c;超简单&#xff0c;亲试可行-CSDN博客 1、在pom.xml中加入依赖 <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-sta…