kubernetes - 调试 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 之外,我还可以查看其他日志吗?
解决方案
如果 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。从文件。
解决方法:
可以通过以下方式处理。
- 减少卷中的文件数。
- 停止使用 fsGroup 设置。
推荐阅读
- r - 根据多个条件删除组上的行 r
- microsoft-graph-api - 在 MS 的示例应用程序中创建 GraphServiceClient 时出错
- controller - 控制器 AdminAddresses 丢失或无效 PrestaShop 1.7.5.1
- api - 在生产环境中请求时出现 AMADEUS API 凭据错误
- java - Spring JPA - 为 N 个数据库创建 N 个存储库
- angular - TypeError:不是 Angular 中的函数
- gcc - 第一个 gcc 交叉编译器编译阶段出错(arm-none-eabi/bin/as:无法识别的选项 '--64')
- java - 如果对象类型不同,GSON 会引发异常
- javascript - 如何在 Chrome 81 中禁用 Angular 表单中的自动完成选项
- azure-devops - 在后台运行 Azure DevOps 扩展