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

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

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

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

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

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

已使用 Kubernetes 版本 1.16.10 创建新的 Kubernetes 工作负载群集,然后更新到 1.16.15。 更新后,csi-msk8scsi-node-9x47m pod 停滞在 ContainerCreating 状态,并且 kube-proxy-qqnkr pod 停滞在“正在终止”状态,如以下输出所示 :

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 服务。 重启后,群集将进入“正在运行”状态。

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

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

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

重要

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

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

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

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

根本原因

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

缓解措施

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

有关 AKS Arc 版本以及所有最新的 AKS-HCI 新闻的详细信息,请订阅 AKS 版本页面

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

  1. 使用以下 shell 命令关闭 Geneva 代理:

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

    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 驱动程序,并且从旧版本升级到 5 月版本,则可能会出现错误。 不再接受其中一个名为 createSubDir的参数。 如果这适用于你的部署,请按照以下说明解决存储类故障。

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

重新创建存储类。

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

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

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