苏州官方网站建站,成都游戏软件开发公司有哪些,杭州做网站hzfwwl,一般公司网站用什么域名套餐故障排除-------K8s挂载集群外NFS异常 1. 故障现象2. 原因梳理2.1 排查思路2.2 确认yaml内容2.3 创建k8s内的nfs测试2.3.1 创建nfs和svc2.3.2 测试创建pvc2.3.3 测试结果 2.4 NFS服务端故障排除2.4.1 网络阻断排除2.4.2 排除服务状态问题2.4.3 排查NFS权限问题 3. 故障排除 1. … 故障排除-------K8s挂载集群外NFS异常 1. 故障现象2. 原因梳理2.1 排查思路2.2 确认yaml内容2.3 创建k8s内的nfs测试2.3.1 创建nfs和svc2.3.2 测试创建pvc2.3.3 测试结果 2.4 NFS服务端故障排除2.4.1 网络阻断排除2.4.2 排除服务状态问题2.4.3 排查NFS权限问题 3. 故障排除 1. 故障现象
nfs可以在任意节点挂载. nfs csi正确安装 sc也能被正确创建,但pv未被创建,pvc无法被绑定
2. 原因梳理
2.1 排查思路
问题可能发生的点无法以下2个 一. NFS的客户端(即k8s端) k8s端可能出现的问题无非2部分
csi配置问题yaml写的有问题 排查方法:由于csi我们重新部署过了,所以暂时忽略这个确认storageclass和pvc的yaml内容是否正确.在k8s集群中创建nfs看是否正常挂载pvc 二. NFS服务提供端的问题排查NFS服务端网络防火墙,selinux排查NFS服务端的服务状态排查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:- nfsvers4.1pvc
---
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: /exportsvolumeMounts:- 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: DirectoryOrCreate2.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:- nfsvers4.1
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: nfs-pvc2-defaultnamespace: default
spec:accessModes:- ReadWriteManyresources:requests:storage: 110MistorageClassName: nfs-csi22.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