Skip to main content
BeeGFS on NetApp with E-Series Storage
简体中文版经机器翻译而成,仅供参考。如与英语版出现任何冲突,应以英语版为准。

BeeGFS CSI 驱动程序部署故障排除

贡献者 mcwhiteside

在排查 BeeGFS CSI 驱动程序部署问题时,请确保:

  • 所有先决条件均已满足,包括 BeeGFS 客户端的安装和配置。

  • BeeGFS CSI 驱动程序已使用正确的覆盖层进行部署。

  • 部署已验证,任何错误(例如节点污点或启用交换分区)均已解决。

  • 已部署并验证示例应用程序,以确认其功能正常。

如需深入排查故障,请参阅"BeeGFS CSI 驱动程序 GitHub"

Kubernetes 配置 - 常见错误场景

尝试检索节点上所有当前正在运行的 Pod 时出现的示例错误:

kubectl get pods

错误输出示例:

root@node@1:~# kubectl get pods
E0829 14:30:28.644318 5617 memcache.go:265)] "Unhandled Error" err="couldn't get current server API group list: Get \"https://XX.YYY.ZZ.CC:644
3: connect: connection refused"
...
 The connection to the server XX.YYY.ZZ.CC:6443 was refused - did you specify the right host or port?

解决这类问题时,有几个关键领域需要调查。建议首先检查以下列出的各个方面。

containerd 出错

检查 containerd 守护进程的状态:

systemctl status containerd

预期输出:

root@node01:/home/user_id/beegfs-csi-driver# systemctl status containerd
o containerd.service - containerd container runtime
     Loaded: loaded (/lib/systemd/system/containerd.service; enabled; vendor preset: enabled)
     Active: inactive (dead)
     Docs: https://containerd.io

如果守护进程未运行(Active: inactive (dead)),重新启动它。如果重启后仍然无法运行,请检查系统日志是否存在错误:

systemctl restart containerd
journalctl -u containerd

kubelet 出错

检查 kubelet 服务的状态:

systemctl status kubelet

预期输出:

root@node01:/home/user_id/beegfs-csi-driver# systemctl status kubelet
o kubelet.service - kubelet: The Kubernetes Node Agent
    Loaded: loaded (/lib/systemd/system/kubelet.service; enabled; vendor preset: enabled)
    Drop-In: /usr/lib/systemd/system/kubelet.service.d
             └─10-kubeadm.conf
    Active: activating (auto-restart) (Result: exit-code) since Fri 2025-08-29 14:34:25 CDT; 6s ago
      Docs: https://kubernetes.io/docs/
     Process: 6636 ExecStart=/usr/bin/kubelet $KUBELET_KUBECONFIG ARGS $KUBELET CONFIG ARGS $KUBELET KUBEADM ARGS
     $KUBELET_EXTRA ARGS (code=exited, status=1/FAILURE)
     Main PID: 6636 (code=exited, status=1/FAILURE)

如果服务未运行,请重新启动它:

systemctl restart kubelet

如果问题仍然存在,请检查系统日志中的错误:

tail -f /var/log/syslog | grep kubelet

互换发行

如果遇到与“swap”相关的错误,请禁用 swap 并重新启动 kubelet。

swapoff -a
systemctl restart kubelet

预期输出:

root@node01:/home/user_id/beegfs-csi-driver# systemctl status kubelet
● kubelet.service - kubelet: The Kubernetes Node Agent
    Loaded: loaded (/lib/systemd/system/kubelet.service; enabled; vendor preset: enabled)
    Drop-In: /usr/lib/systemd/system/kubelet.service.d
             └─10-kubeadm.conf
     Active: active (running) since Tue 2025-10-07 18:11:05 CDT; 5 days ago
       Docs: https://kubernetes.io/docs/
   Main PID: 1302401 (kubelet)
      Tasks: 58 (limit: 231379)
     Memory: 63.0M
     CGroup: /system.slice/kubelet.service
             └─1302401 /usr/bin/kubelet --bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf --kubeconfig=/etc/kubernetes/kubelet.conf --config=/var/lib/kubelet/config.yaml conta>
备注 交换分区通常在操作系统安装过程中默认启用,并列在以下位置: /etc/fstab Kubernetes 不支持启用交换分区运行。为防止重启后重新启用交换分区,请注释掉所有交换分区条目。 /etc/fstab

BeeGFS客户端和辅助配置故障排除

  1. 查看配置 /etc/beegfs/beegfs-client.conf

    默认情况下,对于安全环境,BeeGFS 连接身份验证应启用。确保 `connDisableAuthentication`标志位已设置为 `false`以及正确的路径 `connAuthFile`已指定:

    connDisableAuthentication = false
    connAuthFile=/etc/beegfs/XXX.X.XX.X_connAuthFile
    备注 如果您有意允许 BeeGFS 文件系统在无需身份验证的情况下连接,请进行如下设置 `connDisableAuthentication = true`并删除或注释掉 `connAuthFile`范围。
  2. 验证管理服务的 IP 地址。 `sysMgmtdHost`参数设置正确。

  3. 更新路径 connRDMAInterfacesFile`和 `connInterfacesFile。这些文件指定用于存储或节点间通信的网络接口。例如:

    ibs1f0
    ibs1f1
  4. 更新路径 `connAuthFile`参数(如果启用身份验证)。

    配置示例:

    connDisableAuthentication = false
    connAuthFile=/etc/beegfs/XXX.X.XX.X_connAuthFile
    connClientPortUDP=8004
    connMaxInternodeNum=128
    connMaxConcurrentAttempts=4
    connRDMABufNum=36
    connRDMABufSize=65536
    tuneFileCacheType=native
    tuneFileCacheBufSize=2097152
    connFallbackExpirationSecs=90
    connCommRetrySecs=600
    sysSessionChecksEnabled=False
    connRDMAInterfacesFile=/etc/beegfs/XXX.X.XX.X_8004_connInterfaces.conf
    sysMountSanityCheckMS=11000
    connRDMAKeyType=dma
    sysMgmtdHost=XXX.X.XX.X
    connInterfacesFile=/etc/beegfs/XXX.X.XX.X_8004_connInterfaces.conf
  5. 查看配置 /etc/beegfs/beegfs-helperd.conf

    与客户端配置一样,连接身份验证默认情况下应该启用。确保 `connDisableAuthentication`标志位已设置为 `false`以及正确的路径 `connAuthFile`已指定:

    connDisableAuthentication = false
    connAuthFile=/etc/beegfs/XXX.X.XX.X_connAuthFile
    备注 如果您有意允许 BeeGFS 文件系统在无需身份验证的情况下连接,请进行如下设置 `connDisableAuthentication = true`并删除或注释掉 `connAuthFile`范围。

    辅助配置示例:

    # --- Section 1: [Settings] ---
    #
    connDisableAuthentication     = false
    connAuthFile                  = /etc/beegfs/XXX.X.XX.X_connAuthFile
    connHelperdPortTCP            = 8006
    connPortShift                 = 0
    logNoDate                     = false
    logNumLines                   = 50000
    logNumRotatedFiles            = 5
    logStdFile                    = /var/log/beegfs-client.log
    runDaemonized                 = true
    tuneNumWorkers                = 2

BeeGFS 控制器问题排查

部署覆盖层后,您可能会在 kubectl get all 的输出中看到一些资源处于 PENDING 状态。

root@node01:/home/user_id/beegfs-csi-driver# kubectl get all -n beegfs-csi
NAME                          READY   STATUS    RESTARTS   AGE
pod/csi-beegfs-controller-0   0/3     Pending   0          59s

豆荚 `Pending`状态异常可能是由节点污点、资源限制、镜像缺失或调度需求未满足引起的。查看 pod 事件和日志以获取更多详细信息。如果状态如上所示,请使用 describe 命令检查已创建的 pod。

kubectl describe pod csi-beegfs-controller-0 -n beegfs-csi

如果您看到镜像拉取错误或 pod 卡住, `ImagePullBackOff`验证所有必需的镜像是否都存在于 containerd 中(离线)或可从注册表访问(在线)。请与以下人员联系:

kubectl describe pod <pod-name> -n beegfs-csi | grep -i image

检查 Pod 日志

如果一个 pod 无法启动或处于以下状态 `CrashLoopBackOff`状态,请查看其日志了解更多详情:

kubectl logs <pod-name> -n beegfs-csi

如果您遇到与“无法容忍的污点”相关的错误(可在 kubectl describe 的输出中看到),如下所示:

Events:
  Type     Reason            Age   From               Message
  ----     ------            ----  ----               -------
  Warning  FailedScheduling  84s   default-scheduler  0/1 nodes are available: 1 node(s) had untolerated taint {node.kubernetes.io/disk-pressure: }. preemption: 0/1 nodes are available: 1 Preemption is not helpful for scheduling.

使用以下命令从节点中移除污点:

kubectl taint nodes node01 node-role.kubernetes.io/control-plane:NoSchedule-

预期输出:

root@node01:/home/user_id/beegfs-csi-driver# kubectl taint nodes node01 node-role.kubernetes.io/control-plane:NoSchedule-
error: taint "node-role.kubernetes.io/control-plane:NoSchedule" not found

清除污点后,重新应用叠加层。这样应该可以解决问题:

kubectl apply -k deploy/k8s/overlays/default