Azure AKS中CSI快照控制器导致存储账户请求超限问题分析
AKS Azure Kubernetes Service 项目地址: https://gitcode.com/gh_mirrors/ak/AKS
问题背景
在Azure Kubernetes服务(AKS)环境中使用CSI(容器存储接口)快照功能时,当针对单个持久卷(PVC)创建超过200个快照时,会出现一个严重的系统问题。快照控制器会持续不断地尝试创建新快照,最终导致存储账户的API请求达到Azure资源管理器的限制阈值(800次请求/5分钟),进而影响整个订阅下所有存储账户的正常操作。
问题现象
当用户为单个PVC创建大量快照请求时,会触发Azure文件共享的快照数量上限(200个)。此时CSI快照控制器不会正确识别这一限制,而是持续重试创建快照操作。由于控制器运行在AKS控制平面内部,用户无法直接获取其日志,只能通过存储账户的监控指标观察到异常请求激增的情况。
技术原理分析
-
Azure文件共享快照限制:Azure文件服务对单个文件共享支持最多200个快照,超过此限制会返回"ShareSnapshotCountExceeded"错误。
-
CSI控制器重试机制:默认情况下,CSI快照控制器采用指数退避算法进行重试,最大重试间隔为5分钟。当遇到可重试错误时,控制器会不断尝试操作。
-
Azure资源管理器限制:Azure对存储资源提供商的API调用有严格限制(800次/5分钟),频繁的快照创建请求会快速耗尽这一配额。
解决方案演进
-
临时缓解方案:
- 在VolumeSnapshotClass中设置
useDataPlaneAPI: "true"
参数,使用数据平面API替代管理平面API,可显著提高调用限额 - 注意:此方案不适用于配置了网络限制("Selected network")的私有存储账户
- 在VolumeSnapshotClass中设置
-
长期优化方案:
- AKS在0406版本中已将快照控制器的最大重试间隔从5分钟延长至30分钟,显著降低了重试频率
- Azure团队正在开发DataPlaneAPI的OAuth支持,未来将大幅提升API调用限额
最佳实践建议
- 对于生产环境,建议监控PVC快照数量,避免接近200个的限制阈值
- 如果使用私有存储账户,目前建议控制快照创建频率或考虑其他备份方案
- 关注AKS版本更新,及时升级到包含优化修复的版本
- 对于关键业务系统,建议实施快照生命周期管理策略,定期清理旧快照
技术展望
随着Azure不断完善其服务集成,未来有望将AKS控制平面加入Azure可信服务列表,从根本上解决私有存储账户的访问限制问题。同时,DataPlaneAPI的功能增强将为容器存储操作提供更稳定、高效的基础设施支持。
AKS Azure Kubernetes Service 项目地址: https://gitcode.com/gh_mirrors/ak/AKS
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考