问题排查和已知问题

本页面介绍了针对一些常见问题和错误的排查步骤。

已知问题

  • 当文件系统上未发生任何 I/O 时,性能图表会显示“选定时间范围内没有可用数据”消息。这是因为只有在有 I/O 时才会生成性能指标。如需详细了解指标,请参阅监控实例和操作
  • 不支持以下 Lustre 功能:
    • 客户端数据压缩
    • 持久性客户端缓存
  • 某些 Lustre 命令不受支持
  • 存在一些 POSIX 合规性例外情况

实例操作问题

以下各部分介绍了与实例操作相关的问题。

无法将操作加入队列

如果您在尝试启动操作时看到类似以下内容的错误,请执行相应操作:

ERROR: (gcloud.lustre.instances.import-data) ABORTED: unable to queue the operation
ERROR: (gcloud.lustre.instances.export-data) ABORTED: unable to queue the operation
ERROR: (gcloud.lustre.instances.update) ABORTED: unable to queue the operation

如果您尝试启动某项操作,但同一实例上已在进行另一项相同类型的操作,则会发生此错误。

  • 导入/导出:受管 Lustre 每次仅支持每个实例执行一项有效的传输操作。转移操作不支持排队。
  • 实例更新:Managed Lustre 允许每个实例一次进行一项有效更新,并允许将其他更新操作排入队列。

如需解决此问题,请等待当前操作完成后再开始执行新操作。

Compute Engine 问题

如果遇到在 Compute Engine 实例上装载受管理的 Lustre 文件系统时出现的问题,请按以下步骤诊断问题。

验证 Managed Lustre 实例是否可访问

首先,确保您的 Compute Engine 实例可以访问 Managed Lustre 实例:

sudo lctl ping IP_ADDRESS@tcp

如需获取 IP_ADDRESS 的值,请参阅获取实例

成功的 ping 会返回类似于以下内容的响应:

12345-0@lo
12345-10.115.0.3@tcp

如果 ping 失败,系统会返回以下内容:

failed to ping 10.115.0.3@tcp: Input/output error

如果 ping 失败:

  • 确保您的 Managed Lustre 实例和 Compute Engine 实例位于同一 VPC 网络中。比较以下命令的输出:

    gcloud compute instances describe VM_NAME \
      --zone=VM_ZONE \
      --format='get(networkInterfaces[0].network)'
    
    gcloud lustre instances describe INSTANCE_NAME \
      --location=ZONE --format='get(network)'
    

    输出如下所示:

    https://www.googleapis.com/compute/v1/projects/my-project/global/networks/my-network
    projects/my-project/global/networks/my-network
    

    gcloud compute instances describe 命令的输出以 https://www.googleapis.com/compute/v1/ 为前缀;该字符串后面的所有内容都必须与 gcloud lustre instances describe 命令的输出相匹配。

  • 检查 VPC 网络的防火墙规则和路由配置,确保它们允许 Compute Engine 实例与受管 Lustre 实例之间的流量。

检查 LNet accept 端口

您可以在创建时指定 --gke-support-enabled 标志,将 Managed Lustre 实例配置为支持 GKE 客户端。

如果已启用 GKE 支持,您必须在所有 Compute Engine 实例上将 LNet 配置为使用 accept_port 6988。请参阅gke-support-enabled 实例配置 LNet

如需确定实例是否已配置为支持 GKE 客户端,请运行以下命令:

gcloud lustre instances describe INSTANCE_NAME \
  --location=LOCATION | grep gkeSupportEnabled

如果该命令返回 gkeSupportEnabled: true,则您必须配置 LNet。

Ubuntu 内核版本与 Lustre 客户端不匹配

对于运行 Ubuntu 的 Compute Engine 实例,Ubuntu 内核版本必须与 Lustre 客户端软件包的特定版本相匹配。如果 Lustre 客户端工具出现故障,请检查您的 Compute Engine 实例是否已自动升级到较新的内核。

如需查看内核版本,请执行以下操作:

uname -r

响应如下所示:

6.8.0-1029-gcp

如需检查 Lustre 客户端软件包版本,请执行以下操作:

dpkg -l | grep -i lustre

响应如下所示:

ii  lustre-client-modules-6.8.0-1029-gcp 2.14.0-ddn198-1  amd64  Lustre Linux kernel module (kernel 6.8.0-1029-gcp)
ii  lustre-client-utils                  2.14.0-ddn198-1  amd64  Userspace utilities for the Lustre filesystem (client)

如果这两个命令列出的内核版本不一致,您必须重新安装 Lustre 客户端软件包

检查 dmesg 是否有 Lustre 错误

许多 Lustre 警告和错误都会记录到 Linux 内核环形缓冲区中。dmesg 命令用于输出内核环形缓冲区。

如需搜索特定于 Lustre 的消息,请将 grepdmesg 搭配使用:

dmesg | grep -i lustre

或者,如需查找可能相关的更一般性错误,请执行以下操作:

dmesg | grep -i error

支持请求中要包含的信息

如果您无法解决装载失败问题,请先收集诊断信息,然后再创建支持请求。

运行 sosreport:此实用程序会收集系统日志和配置信息,并生成压缩的 tar 压缩文件:

sudo sosreport

sosreport 归档和 dmesg 中的任何相关输出附加到支持请求中。

GKE 问题

在按照本部分中的问题排查步骤操作之前,请参阅从 GKE 连接到 Managed Lustre 时的限制

更新了最小实例容量

Managed Lustre 实例的最小容量已更新为 9,000 GiB。如需通过 Managed Lustre CSI 驱动程序创建 9, 000 GiB 实例,请将集群版本升级到 1.34.0-gke.2285000 或更高版本。

动态预配的 Lustre 实例的性能层级不正确

动态配置 Lustre 实例时,无论 API 请求中指定的 perUnitStorageThroughput 值是多少,实例创建都会因 PerUnitStorageThroughput 而失败并显示 InvalidArgument 错误。这会影响 1.33.4-gke.1036000 之前的 GKE 1.33 版本。

临时解决方法:

将 GKE 集群升级到 1.33.4-gke.1036000 版或更高版本。如果使用的是稳定版渠道,则可能尚未有更新的版本可用。在这种情况下,您可以从包含相应修复的常规渠道或快速渠道中手动选择一个版本。

Managed Lustre 通信端口

Managed Lustre CSI 驱动程序使用不同的端口与 Managed Lustre 实例进行通信,具体取决于您的 GKE 集群版本和现有的 Managed Lustre 配置。

  • 默认端口 (988):对于运行 1.33.2-gke.4780000 版或更高版本的新 GKE 集群,驱动程序默认使用端口 988 进行 Lustre 通信。

  • 旧版端口 (6988):在以下情况下,驱动程序使用端口 6988

    • 早期 GKE 版本:如果您的 GKE 集群运行的版本低于 1.33.2-gke.4780000,则在启用 CSI 驱动程序时需要使用 --enable-legacy-lustre-port 标志。启用此标志可解决 GKE 节点上 gke-metadata-server 的端口冲突问题。
    • 支持 GKE 的现有 Managed Lustre 实例:如果您要连接到使用 --gke-support-enabled 标志创建的现有 Managed Lustre 实例,则无论集群版本如何,都必须在启用 CSI 驱动程序时添加 --enable-legacy-lustre-port。如果没有此标志,您的 GKE 集群将无法挂载现有的 Lustre 实例。

    如需详细了解如何通过旧版端口启用 CSI 驱动程序,请参阅 Lustre 通信端口

日志查询

如需检查日志,请在日志浏览器中运行以下查询。

如需返回 Managed Lustre CSI 驱动程序节点服务器日志,请执行以下操作:

resource.type="k8s_container"
resource.labels.pod_name=~"lustre-csi-node*"

排查卷配置问题

如果 PersistentVolumeClaim (PVC) 保持 Pending 状态,并且在 20-30 分钟后仍未创建 PersistentVolume (PV),则可能发生了错误。

  1. 检查 PVC 事件:

    kubectl describe pvc PVC_NAME
    
  2. 如果错误表明存在配置问题或实参无效,请验证您的 StorageClass 参数

  3. 重新创建 PVC。

  4. 如果问题仍然存在,请与 Cloud Customer Care 联系。

排查卷装载问题

在将 Pod 调度到节点后,系统会装载卷。如果此操作失败,请检查 Pod 事件和 kubelet 日志。

kubectl describe pod POD_NAME

CSI 驱动程序启用问题

具体情况:

MountVolume.MountDevice failed for volume "yyy" : kubernetes.io/csi: attacher.MountDevice failed to create newCsiDriverClient: driver name lustre.csi.storage.gke.io not found in the list of registered CSI drivers

MountVolume.SetUp failed for volume "yyy" : kubernetes.io/csi: mounter.SetUpAt failed to get CSI client: driver name lustre.csi.storage.gke.io not found in the list of registered CSI drivers

原因:CSI 驱动程序未启用或尚未运行。

解决方法

  1. 验证 CSI 驱动程序是否已启用
  2. 如果集群最近进行了扩缩或升级,请等待几分钟,直到驱动程序正常运行。
  3. 如果错误仍然存在,请检查 lustre-csi-node 日志中是否存在“不允许的操作”。这表示节点版本过旧,无法支持 Managed Lustre。如需解决此问题,请将节点池升级到 1.33.2-gke.1111000 版或更高版本。
  4. 如果日志显示“LNET_PORT mismatch”,请升级节点池,以确保安装兼容的 Lustre 内核模块。

挂载点已存在

具体情况:

MountVolume.MountDevice failed for volume "yyy" : rpc error: code = AlreadyExists
desc = A mountpoint with the same lustre filesystem name "yyy" already exists on
node "yyy". Please mount different lustre filesystems

原因:不支持在单个节点上装载来自不同 Managed Lustre 实例且具有相同文件系统名称的多个卷。

解决方案:为每个 Managed Lustre 实例使用唯一的文件系统名称。

装载失败:不存在此类文件或目录

具体情况:

MountVolume.MountDevice failed for volume "yyy" : rpc error: code = Internal desc = Could not mount ... failed: No such file or directory

原因:指定的文件系统名称不正确或不存在。

解决方法:验证 StorageClass 或 PV 配置中的 fs_name 是否与 Managed Lustre 实例匹配。

装载失败:输入/输出错误

具体情况:

MountVolume.MountDevice failed for volume "yyy" : rpc error: code = Internal desc = Could not mount ... failed: Input/output error

原因:集群无法连接到 Managed Lustre 实例。

解决方法

  1. 验证受管理的 Lustre 实例的 IP 地址。
  2. 确保 GKE 集群和 Managed Lustre 实例位于同一 VPC 网络中或已正确对等互连。

内部错误

症状rpc error: code = Internal desc = ...

解决方法:如果错误仍然存在,请与 Cloud Customer Care 联系。

排查卷卸载问题

具体情况:

UnmountVolume.TearDown failed for volume "yyy" : rpc error: code = Internal desc = ...

解决方法

  1. 强制删除 Pod:

    kubectl delete pod POD_NAME --force
    
  2. 如果问题仍然存在,请与 Cloud Customer Care 联系。

排查卷删除问题

如果删除 PVC 后,PV 在很长一段时间内(例如超过一小时)仍处于“已释放”状态,请与 Cloud Customer Care 联系。

排查卷扩展问题

PVC 卡在 ExternalExpanding 中

症状:PVC 状态未更改为 Resizing,并且事件显示 ExternalExpanding

原因allowVolumeExpansion 字段可能缺失或设置为 false

解决方法:确保 StorageClass 具有 allowVolumeExpansion: true

kubectl get storageclass STORAGE_CLASS_NAME -o yaml

扩展失败:参数无效

症状VolumeResizeFailed: rpc error: code = InvalidArgument ...

原因:所请求的大小无效(例如,不是步长的倍数或超出限制)。

解决方法: 查看有效容量范围,并使用有效大小更新 PVC。

扩展失败:内部错误

症状VolumeResizeFailed ... rpc error: code = Internal

解决方法:重新应用 PVC,重试扩容操作。如果该操作反复失败,请与 Cloud Customer Care 联系。

已超出截止期限

症状VolumeResizeFailed,搭配 DEADLINE_EXCEEDED

原因:操作所用的时间超出预期,但可能仍在进行中。

解决方法: 等待操作完成。调整大小工具会自动重试。如果长时间卡在某个状态(例如,> 90 分钟),请与支持团队联系。

超出配额

症状:由于配额限制,扩展失败。

解决方法:申请增加配额或申请增加较小的容量。

VPC 网络问题

以下部分介绍了常见的 VPC 网络问题。

无法从对等互连的项目访问 Managed Lustre

如需从对等互连的 VPC 网络中的虚拟机访问 Managed Lustre 实例,您必须使用 Network Connectivity Center (NCC)。借助 NCC,您可以将多个 VPC 网络和本地网络连接到中央 hub,从而在它们之间建立连接。

如需了解如何设置 NCC,请参阅 Network Connectivity Center 文档

在多 NIC 虚拟机上装载 Lustre 失败

当虚拟机具有多个网络接口控制器 (NIC),并且受管 Lustre 实例位于连接到辅助 NIC(例如eth1),装载实例可能会失败。如需解决此问题,请按照说明使用辅助网卡进行装载

无法从 172.17.0.0/16 子网范围进行连接

IP 地址在 172.17.0.0/16 子网范围内的 Compute Engine 和 GKE 客户端无法挂载受管 Lustre 实例。

无法为服务 servicenetworking.googleapis.com 添加对等互连

ERROR: (gcloud.services.vpc-peerings.connect) User [$(USER)] does not have
permission to access services instance [servicenetworking.googleapis.com]
(or it may not exist): Permission denied to add peering for service
'servicenetworking.googleapis.com'.

此错误表示您的用户账号没有 servicenetworking.services.addPeering IAM 权限。

如需了解如何向您的账号添加以下角色,请参阅使用 IAM 进行访问权限控制

  • roles/compute.networkAdmin
  • roles/servicenetworking.networksAdmin

无法在 CreateConnection 中修改分配的范围

ERROR: (gcloud.services.vpc-peerings.connect) The operation
"operations/[operation_id]" resulted in a failure "Cannot modify allocated
ranges in CreateConnection. Please use UpdateConnection."

如果您已在此网络上创建了具有不同 IP 范围的 vpc-peering,则会返回此错误。有两个可能的解决方案:

替换现有 IP 范围:

gcloud services vpc-peerings update \
  --network=NETWORK_NAME \
  --ranges=IP_RANGE_NAME \
  --service=servicenetworking.googleapis.com \
  --force

或者,将新 IP 范围添加到现有连接:

  1. 检索对等互连的现有 IP 范围列表:

    EXISTING_RANGES="$(
      gcloud services vpc-peerings list \
        --network=NETWORK_NAME \
        --service=servicenetworking.googleapis.com \
        --format="value(reservedPeeringRanges.list())" \
        --flatten=reservedPeeringRanges
    )
    
  2. 然后,将新范围添加到对等互连中:

    gcloud services vpc-peerings update \
      --network=NETWORK_NAME \
      --ranges="${EXISTING_RANGES}",IP_RANGE_NAME \
      --service=servicenetworking.googleapis.com
    

IP 地址范围用尽

如果实例创建失败并显示范围耗尽错误,请执行以下操作:

ERROR: (gcloud.alpha.Google Cloud Managed Lustre.instances.create) FAILED_PRECONDITION: Invalid
resource state for "NETWORK_RANGES_NOT_AVAILABLE": IP address range exhausted

按照 VPC 指南修改现有专用连接以添加 IP 地址范围。

我们建议前缀长度至少为 /20(1024 个地址)。