修复在 AKS Arc 中管理存储时的已知问题和错误

使用本文可帮助你排查和解决 AKS Arc 中的存储相关问题。

配置永久性卷声明会导致错误:“无法初始化代理。 错误:mkdir /var/log/agent: 权限被拒绝”

权限被拒绝错误表示默认存储类可能不适合你的工作负载,该错误发生在运行 Kubernetes 版本 1.19.x 或更高版本的 Linux 工作负载中。 为遵循安全最佳做法,许多 Linux 工作负载都为 Pod 指定 securityContext fsGroup 设置。 由于默认存储类未指定 fstype (=ext4) 参数,因此工作负荷无法在 Azure Local 上的 AKS 上启动,因此 Kubernetes 无法根据 fsGroup 工作负荷请求更改文件和永久性卷的所有权。

要解决此问题,请定义自定义存储类以用于预配 PVC。

容器存储接口 Pod 停滞在“ContainerCreating”状态

使用 Kubernetes 版本 1.16.10 创建新的 Kubernetes 工作负荷群集,然后更新为 1.16.15。 更新后,csi-msk8scsi-node-9x47m Pod 停滞在“ContainerCreating”状态,而 kube-proxy-qqnkr Pod 停滞在“Terminating”状态,如以下输出所示

Error: kubectl.exe get nodes  
NAME              STATUS     ROLES    AGE     VERSION 
moc-lf22jcmu045   Ready      <none>   5h40m   v1.16.15 
moc-lqjzhhsuo42   Ready      <none>   5h38m   v1.16.15 
moc-lwan4ro72he   NotReady   master   5h44m   v1.16.15

\kubectl.exe get pods -A 

NAMESPACE     NAME                        READY   STATUS              RESTARTS   AGE 
    5h38m 
kube-system   csi-msk8scsi-node-9x47m     0/3     ContainerCreating   0          5h44m 
kube-system   kube-proxy-qqnkr            1/1     Terminating         0          5h44m  

由于 kubelet 最终状态有误,并且无法再与 API 服务器通信,因此唯一的解决方案是重启 kubelet 服务。 重启后,群集进入 运行 状态。

从故障转储日志中填充的磁盘存储

可以从创建的故障转储日志中填充磁盘存储。 这是因为 Geneva 代理客户端证书已过期。 症状可能如下所示:

  • 服务无法启动。
  • Kubernetes Pod、部署等由于资源不足而无法启动。

重要

此问题可能会影响在 2023 年 4 月 18 日至 2023 年 3 月发布的 2023 年 4 月之后创建的所有新的 Mariner 管理和目标群集节点。 此问题已在 2023-05-09 版本及更高版本中修复。

此问题可能会影响涉及分配磁盘空间或写入新文件的任何操作,因此任何“磁盘空间/资源不足”错误都是一个很好的提示。 若要检查给定节点上是否存在此问题,请运行以下 shell 命令:

clouduser@moc-lwm2oudnskl $ sudo du -h /var/lib/systemd/coredump/

此命令报告诊断文件使用的存储空间。

根本原因

用于向服务终结点对日内瓦代理进行身份验证的客户端证书过期会导致代理崩溃,从而导致故障转储。 在初始启动时,代理的崩溃/重试循环大约为 5 秒,并且没有超时。 这意味着,每隔几秒钟在节点的文件系统上创建一个新文件(大约 330MB),这会快速消耗磁盘存储。

缓解措施

首选缓解措施是升级到具有更新证书的最新版本版本 1.10.18.10425。 为此,请先将工作负荷群集手动升级到任何受支持的次要版本,然后再更新 Azure 本地主机。

有关 AKS Arc 版本以及 Azure 本地新闻上所有最新 AKS 的详细信息,请 订阅 AKS 发布页

如果升级不是选项,则可以关闭 mdsd 服务。 对于每个 Mariner 节点:

  1. 使用以下 shell 命令关闭日内瓦代理:

    sudo systemctl disable --now mdsd
    
  2. 验证是否已成功禁用日内瓦代理:

    sudo systemctl status mdsd
    
  3. 使用以下命令删除累积文件:

    sudo find /var/lib/systemd/coredump/ -type f -mmin +1 -exec rm -f {} \;
    sudo find /run/systemd/propagate -name 'systemd-coredump@*' -delete
    sudo journalctl --rotate && sudo journalctl --vacuum-size=500M
    
  4. 重新启动节点:

    sudo reboot
    

存储 Pod 崩溃,日志显示“createSubDir”参数无效

如果在部署中安装了 SMB 或 NFS CSI 驱动程序,并且从旧版本升级到 May 内部版本,则可能会出现错误。 不再接受其中一个参数(称为 createSubDir)。。 如果这适用于部署,请按照以下说明解决存储类故障。

如果遇到此错误,存储 Pod 崩溃,日志指示 createSubDir 参数无效。

重新创建存储类。

创建永久性卷时,尝试装载卷失败

在 AKS Arc 环境中删除永久性卷或永久性卷声明后,会创建一个新的永久性卷以映射到同一共享。 但在尝试装载该卷时,装载将失败,并且 Pod 超时并显示错误 NewSmbGlobalMapping failed

若要解决装载新卷失败的问题,可以通过 SSH 连接到 Windows 节点并运行 Remove-SMBGlobalMapping 并提供与卷对应的共享。 运行此命令后,尝试装载卷应成功。