本文介绍关于存储相关异常问题诊断流程和排查思路。
诊断流程
查看Pod事件,确认Pod无法启动是由存储问题导致。
kubectl describe pods <pod-name>
若Pod处于下图所示的状态,说明存储已成功挂载。此时Pod未启动(例如CrashLoopBackOff)不属于存储问题,请提交工单处理。
查看CSI存储插件是否正常工作。
kubectl get pod -n kube-system |grep csi
预期输出:
NAME READY STATUS RESTARTS AGE csi-plugin-*** 4/4 Running 0 23d csi-provisioner-*** 7/7 Running 0 14d
说明如果Pod状态非Running,使用
kubectl describe pods <pod-name> -n kube-system
查看具体Container退出的原因及Pod的Event。查询CSI存储插件是否为最新版本。
kubectl get ds csi-plugin -n kube-system -oyaml |grep image
预期输出:
image: registry.cn-****.aliyuncs.com/acs/csi-plugin:v*****-aliyun
存储插件最新版本信息,请参见csi-plugin和csi-provisioner,若存储插件不是最新版本,请升级CSI插件。
其他存储组件升级失败问题排查,请参见组件升级失败问题排查。
排查Pod Pending问题。
云盘的Pod Pending问题处理,请参见下文云盘Pod的状态为非Running。
NAS的Pod Pending问题处理,请参见下文NAS Pod的状态为非Running。
OSS的Pod Pending问题处理,请参见下文OSS Pod的状态为非Running。
排查PVC处于非Bound问题。
云盘的PVC非Bound问题处理,请参见下文云盘PVC的状态为非Bound。
NAS的PVC非Bound问题处理,请参见下文NAS PVC的状态为非Bound。
OSS的PVC非Bound问题处理,请参见下文OSS PVC的状态为非Bound。
如果排查后问题仍未解决,请提交工单处理。
组件升级失败问题排查
若组件升级失败,请参考以下操作,进行csi-provisioner和csi-plugin组件升级失败问题排查。
csi-provisioner
csi-plugin
检查集群是否存在
NotReady
的节点,如果存在, csi-plugin对应的DaemonSet会升级失败。若组件升级失败但所有Plugin均正常,可能是组件中心检测到升级超时自动回滚。遇到此问题,请提交工单处理。
云盘异常问题排查
Pod所属节点与云盘必须在同一地域和可用区,不支持跨地域和跨可用区使用。
不同规格的ECS节点支持挂载的云盘类型不同。更多信息,请参见实例规格族。
Pod的状态为非Running
问题现象
PVC为Bound状态,Pod为非Running状态。
问题原因
没有满足条件的节点可以调度。
云盘挂载出现问题。
ECS节点和云盘类型不匹配。
解决方案
PVC的状态为非Bound
问题现象
PVC为非Bound状态,Pod为非Running状态。
问题原因
静态方式:由于PVC和PV之间的Selector无法满足互相绑定的条件导致。例如:PVC中Selector配置与PV中的不一致,StorageClass Name不一致、PV状态是Release等问题。
动态方式:由于csi-provisioner组件的某种原因未能创建出对应的云盘。
解决方案
NAS异常问题排查
节点挂载NAS时,节点与NAS必须在同一个VPC网络下。若不在同一VPC,请使用云企业网打通。
NAS支持跨可用区挂载。
极速型NAS以及CPFS2.0挂载目录需要以
/share
开头。
Pod的状态为非Running
问题现象
PVC为Bound状态,Pod为非Running状态。
问题原因
挂载NAS时使用了
fsGroups
,文件较多,导致chmod速度较慢。安全组中限制了2049端口,导致NAS无法挂载。
NAS和节点不在同一个VPC下。
解决方案
PVC的状态为非Bound
问题现象
PVC为Bound状态,Pod为非Running状态。
问题原因
静态方式:由于PVC和PV之间的Selector无法满足互相绑定的条件导致。例如:PVC中Selector配置与PV中的不一致,StorageClass Name不一致、PV状态是Release等问题。
动态方式:由于csi-provisioner组件的某种原因未能挂载NAS。
解决方案
静态方式:请检查相关的YAML书写是否正确。更多信息,请参见使用NAS静态存储卷。
说明若PV的状态是Release,则该PV无法被复用,需要将PV中的Service取出,重新创建PV。
动态方式:通过
kubectl describe pvc <pvc-name> -n <namespace>
查看PVC的Event。
OSS异常问题排查
节点挂载OSS时,PV中需填写AccessKey信息,可通过Secret方式使用 。
跨地域使用OSS时,需将Bucket URL改成公网地址,同一地域建议使用内网地址。
Pod的状态为非Running
问题现象
PVC为Bound状态,Pod状态为非Running。
问题原因
挂载OSS时使用了
fsGroups
,文件较多,导致chmod速度较慢。跨地域使用了内网地址,导致无法连接到Bucket Endpoint。
解决方案
PVC的状态为非Bound
问题现象
PVC为非Bound状态,Pod为非Running状态。
问题原因
静态方式:PVC和PV之间的Selector无法满足互相绑定的条件。例如:PVC中Selector配置与PV中的不一致,StorageClass Name不一致、PV状态是Release等。
动态方式:csi-provisioner组件的某种原因导致未能挂载OSS。
解决方案
静态方式:检查相关的YAML书写是否正确。更多信息,请参见使用OSS静态存储卷。
说明若PV状态是Release,则该PV无法复用,需取出Bucket地址重新创建PV。
动态方式:通过
kubectl describe pvc <pvc-name> -n <namespace>
查看PVC的Event。