你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

Azure 容器存储预览版排除故障

Azure 容器存储是一项基于云的卷管理、部署和业务流程服务,专为容器原生构建。 使用本文排查 Azure 容器存储的常见问题,并查找问题的解决方法。

安装问题疑难解答

Azure 容器存储安装失败

运行 az aks create 后,可能会看到“Azure 容器存储安装失败。AKS 群集已创建。请运行 az aks update--enable-azure-container-storage 来启用 Azure 容器存储”消息。

此消息表示未安装 Azure 容器存储,但已正确创建你的 AKS 群集。

若要再群集上安装 Azure 容器存储和创建存储池,请运行以下命令。 将 <cluster-name><resource-group> 替换为自己的值。 将 <storage-pool-type> 替换为 azureDiskephemeraldiskelasticSan

az aks update -n <cluster-name> -g <resource-group> --enable-azure-container-storage <storage-pool-type>

无法将存储池类型设置为 NVMe

如果尝试使用临时磁盘安装 Azure 容器存储,特别是虚拟机 (VM) SKU 没有 NVMe 驱动器的群集上的本地 NVMe,你会收到以下错误消息:无法将 --storage-pool-option 设置为 NVMe,因为节点池均不支持临时 NVMe 磁盘。

若要修正,请使用具有 NVMe 驱动器的 VM SKU 创建节点池,然后重试。 请参阅存储优化 VM

排查存储池问题

若要检查存储池的状态,请运行 kubectl describe sp <storage-pool-name> -n acstor。 下面是可能会遇到的一些问题。

弹性 SAN 创建失败

如果尝试创建弹性 SAN 存储池,可能会看到“Azure 弹性 SAN 创建失败: 已创建的订阅的最大弹性 SAN 数”消息。 这意味着,你已达到每个订阅可在一个区域中部署的弹性 SAN 资源数限制。 可在此处查看限制:弹性 SAN 可伸缩性和性能目标。 请考虑删除不再使用的订阅上的所有现有弹性 SAN 资源,或者尝试在其他区域中创建存储池。

找不到块设备

如果看到此消息,则表示你可能尝试在 VM SKU 没有 NVMe 驱动器的群集上创建临时磁盘存储池。

若要修正,请使用具有 NVMe 驱动器的 VM SKU 创建节点池,然后重试。 请参阅存储优化 VM

已启用存储池类型

如果尝试启用已启用的存储池类型,将收到“--enable-azure-container-storage 值无效。已在群集中为存储池类型 <storage-pool-type> 启用 Azure 容器存储”消息。 可运行 kubectl get sp -n acstor 来检查现在是否已经创建了任何存储池。

禁用存储池类型

通过 az aks update --disable-azure-container-storage <storage-pool-type> 禁用存储池类型或通过 az aks update --disable-azure-container-storage all 卸载 Azure 容器存储时,如果现在有该类型的存储池,你会收到以下消息:

如果禁用存储池类型 <storage-pool-type> 的 Azure 容器存储,将强制删除同一类型的所有存储池,并对使用这些存储池的应用程序产生影响。 强制删除存储池还可能导致正在使用的存储资源泄漏。 是否要在禁用 Azure 容器存储之前验证是否使用了 <storage-pool-type> 类型的存储池? (是/否)

如果选择“是”,则运行自动验证来确保没有从存储池创建的永久性卷。 如果选择“否”,会绕过此验证并禁用存储池类型,从而删除任何现有存储池并可能影响应用程序。

无法删除包含 AKS 群集的资源组

如果创建了弹性 SAN 存储池,可能无法删除 AKS 群集所在的资源组。

为了解决此问题,请登录到 Azure 门户,然后选择“资源组”。 找到 AKS 创建的资源组(资源组名称以 MC_ 开头)。 选择该资源组中的 SAN 资源对象。 手动删除所有卷和卷组。 然后重试删除包含 AKS 群集的资源组。

排查永久性卷的问题

无法从临时磁盘存储池创建永久性卷

由于临时磁盘(本地 NVMe 和临时 SSD)是临时性的而不是持久性的,因此我们强制使用 Kubernetes 通用临时卷。 如果你尝试使用临时磁盘池创建永久性卷声明,你将看到以下错误:服务器出错(禁止):创建“eph-pvc.yaml”时出错:许可 webhook“pvc.acstor.azure.com”拒绝了请求:未复制的 ephemeralDisk 存储池中只允许通用临时卷

如果需要永久性卷(该卷的生命周期独立于使用该卷的任何单个 Pod),则 Azure 容器存储支持 NVMe 复制。 可以通过复制创建存储池,并从中创建永久性卷。 有关指导,请参阅通过卷复制创建存储池。 请注意,由于临时磁盘存储池会占用所有可用的 NVMe 磁盘,因此必须先删除任何现有的临时磁盘存储池,然后再创建启用了复制的新存储池。 如果不需要持久性,则可以创建通用临时卷。

由于临时卷大小超出可用容量,Pod 创建处于挂起状态

在单个节点上分配临时卷。 为 Pod 配置临时卷的大小时,大小应小于单个节点临时磁盘的可用容量。 否则,Pod 创建将处于挂起状态。

使用以下命令检查 Pod 创建是否处于挂起状态。

$ kubectl get pods
NAME     READY   STATUS    RESTARTS   AGE
fiopod   0/1     Pending   0          17s

在此示例中,pod fiopod 处于“Pending”状态。

使用以下命令检查 Pod 是否具有关于创建 persistentvolumeclaim 的警告事件。

$ kubectl describe pod fiopod
...
Events:
  Type     Reason            Age   From               Message
  ----     ------            ----  ----               -------
  Warning  FailedScheduling  40s   default-scheduler  0/3 nodes are available: waiting for ephemeral volume controller to create the persistentvolumeclaim "fiopod-ephemeralvolume". preemption: 0/3 nodes are available: 3 Preemption is not helpful for scheduling..

在此示例中,Pod 显示有关创建永久性卷声明 fiopod-ephemeralvolume 的警告事件。

使用以下命令检查永久性卷声明是否由于容量不足而无法预配。

$ kubectl describe pvc fiopod-ephemeralvolume
...
  Warning  ProvisioningFailed    107s (x13 over 20m)  containerstorage.csi.azure.com_aks-nodepool1-29463073-vmss000000_7f5bd88d-be76-40d2-a59e-e51ce000e35e  failed to provision volume with StorageClass "acstor-ephemeraldisk-temp": rpc error: code = Internal desc = Operation failed: GenericOperation("error in response: status code '507 Insufficient Storage', content: 'RestJsonError { details: \"Operation failed due to insufficient resources: Not enough suitable pools available, 0/1\", message: \"SvcError :: NotEnoughResources\", kind: ResourceExhausted }'")

在此示例中,Insufficient Storage 显示为卷配置失败的原因。

运行以下命令,检查单个节点临时磁盘的可用容量。

$ kubectl get diskpool -n acstor
NAME                                CAPACITY      AVAILABLE     USED        RESERVED    READY   AGE
ephemeraldisk-temp-diskpool-jaxwb   75660001280   75031990272   628011008   560902144   True    21h
ephemeraldisk-temp-diskpool-wzixx   75660001280   75031990272   628011008   560902144   True    21h
ephemeraldisk-temp-diskpool-xbtlj   75660001280   75031990272   628011008   560902144   True    21h

在此示例中,单个节点临时磁盘的可用容量为 75031990272 字节或 69 GiB。

将卷存储大小调整到可用容量以下,然后重新部署Pod。 请参阅使用通用临时卷部署 Pod

另请参阅