AKS节点镜像中Azure CLI缺失问题分析与解决方案
AKS Azure Kubernetes Service 项目地址: https://gitcode.com/gh_mirrors/ak/AKS
问题背景
在Azure Kubernetes Service(AKS)的最新节点镜像AKSUbuntu-2204gen2containerd-202406.19.0中,用户发现Azure CLI工具缺失,这导致依赖azure-blob-fuse存储类的Pod无法正常启动。具体表现为Pod卡在"ContainerCreating"状态,并报错"Azure CLI not found on path"。
问题根源分析
经过深入调查,该问题源于blobfuse 2.3.0版本的一个重大变更。当使用AzureStorageIdentityObjectID参数时,blobfuse现在需要依赖Azure CLI来完成身份验证流程。这一变更在之前的版本中并不存在,因此当节点镜像移除了Azure CLI后,就导致了兼容性问题。
影响范围
该问题影响所有满足以下条件的AKS集群:
- 使用AKSUbuntu-2204gen2containerd-202406.19.0或更新版本的节点镜像
- 部署了使用azure-blob-fuse-premium存储类的Pod
- 在存储类配置中使用了AzureStorageIdentityObjectID参数
临时解决方案
对于需要立即解决问题的用户,可以考虑以下两种临时方案:
方案一:节点安装Azure CLI
通过创建DaemonSet在集群所有节点上自动安装Azure CLI:
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: azure-cli-installer
namespace: kube-system
spec:
selector:
matchLabels:
app: azure-cli-installer
template:
metadata:
labels:
app: azure-cli-installer
spec:
containers:
- name: installer
image: ubuntu:20.04
command: ["/bin/sh", "-c"]
args:
- apt-get update && apt-get install -y curl &&
curl -sL https://aka.ms/InstallAzureCLIDeb | bash
securityContext:
privileged: true
方案二:修改存储类配置
将存储类配置中的AzureStorageIdentityObjectID参数替换为AzureStorageIdentityClientID:
parameters:
AzureStorageAuthType: MSI
AzureStorageIdentityClientID: "<your-client-id>"
长期解决方案
Azure blobfuse团队正在评估是否移除对Azure CLI的依赖,但这可能需要数月时间。因此,建议用户采用方案二作为长期解决方案,原因如下:
- 更安全:不需要在节点上安装额外的工具
- 更稳定:不受未来节点镜像变更的影响
- 性能更好:减少了身份验证流程中的外部依赖
最佳实践建议
- 对于新部署的存储类,建议始终使用AzureStorageIdentityClientID参数
- 对于现有部署,应尽快迁移到使用ClientID的方案
- 定期检查AKS发行说明,了解节点镜像的变更情况
- 在测试环境中验证新版本节点镜像的兼容性,再应用到生产环境
总结
AKS节点镜像中Azure CLI的缺失暴露了应用程序对特定工具的依赖问题。通过理解问题根源并采用正确的身份验证参数,可以有效解决这一问题,同时提高应用程序的健壮性。建议用户尽快评估和更新现有配置,以避免未来可能出现的中断。
AKS Azure Kubernetes Service 项目地址: https://gitcode.com/gh_mirrors/ak/AKS
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考