首页 > 解决方案 > 调试 nfs 卷“无法为 pod 附加或挂载卷”

问题描述

我已经根据https://github.com/kubernetes/examples/tree/master/staging/volumes/nfs上的示例设置了一个为 RMW pv 提供服务的 nfs 服务器

这种设置在很多生产环境中对我来说都很好,但是在某些特定的 GKE 集群实例中,挂载在 pod 重新启动后停止工作。

从 kubelet 日志中,我看到以下内容重复了很多次

无法为 pod “api-bf5869665-zpj4c_default(521b43c8-319f-425f-aaa7-e05c08282e8e)”附加或挂载卷:未挂载的卷=[shared-mount],未附加的卷=[geekadm-net deployment-role-token-6tg9p shared-mount]:等待条件超时;跳舱

同步 pod 521b43c8-319f-425f-aaa7-e05c08282e8e 时出错(“api-bf5869665-zpj4c_default(521b43c8-319f-425f-aaa7-e05c08282e8e)”),跳过:未安装的卷 = [shared-mount],未附加的卷 = [geekad net deployment-role-token-6tg9p shared-mount]:等待条件超时

在任何节点上手动安装 nfs 都可以正常工作:mount -t nfs <service ip>:/ /tmp/mnt

如何进一步调试问题?除了 kubelet 之外,我还可以查看其他日志吗?

标签: kubernetesgoogle-kubernetes-enginemountnfspersistent-volumes

解决方案


如果 pod 因为挂载太慢而被踢出节点,您可能会在日志中看到类似的消息。

Kubelets 甚至会在日志中告知这个问题。
Kubelets 的示例日志:
设置 /var/lib/kubelet/pods/c9987636-acbe-4653-8b8d-aa80fe423597/volumes/kubernetes.io~gce-pd/pvc-fbae0402-b8c7-4bc8-b375-1060487d730d 和fsGroup 集。如果卷有很多文件,那么设置卷所有权可能会很慢,请参阅https://github.com/kubernetes/kubernetes/issues/69699

原因:
pod.spec.securityContext.fsGroup 设置导致 kubelet 对为给定 pod 安装的卷中的所有文件运行 chown 和 chmod。在包含许多文件的大卷的情况下,这可能是一件非常耗时的事情。

默认情况下,Kubernetes 会递归地更改每个卷的内容的所有权和权限,以匹配挂载该卷时 Pod 的 securityContext 中指定的 fsGroup。从文件

解决方法:
可以通过以下方式处理。

  1. 减少卷中的文件数。
  2. 停止使用 fsGroup 设置。

推荐阅读