使用本文可帮助你排查和解决 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 节点:
使用以下 shell 命令关闭 Geneva 代理:
sudo systemctl disable --now mdsd
验证是否已成功禁用 Geneva 代理:
sudo systemctl status mdsd
使用以下命令删除累积的文件:
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
重新启动节点:
sudo reboot
存储 Pod 崩溃,日志显示“createSubDir”参数无效
如果在部署中安装了 SMB 或 NFS CSI 驱动程序,并且从旧版本升级到 5 月版本,则可能会出现错误。 不再接受其中一个名为 createSubDir
的参数。 如果这适用于你的部署,请按照以下说明解决存储类故障。
如果遇到此错误,则存储 Pod 崩溃,日志指示 createSubDir
参数无效。
重新创建存储类。
创建永久性卷时,装载卷的尝试会失败
在 AKS Arc 环境中删除永久性卷或永久性卷声明后,将创建一个新的永久性卷以映射到同一共享。 但在尝试装载该卷时,装载将失败,并且 Pod 超时并显示错误 NewSmbGlobalMapping failed
。
若要绕过装载新卷失败的问题,可通过 SSH 连接到 Windows 节点并运行 Remove-SMBGlobalMapping
,然后提供与该卷对应的共享。 运行此命令后,装载卷的尝试应该会成功。