使用UAMI在Kubernetes中挂载Azure文件共享时遇到问题:“无法从CSI获取帐户名”错误

wecizke3  于 12个月前  发布在  Kubernetes
关注(0)|答案(1)|浏览(147)

我在使用用户管理的身份(UAMI)在Kubernetes集群中挂载Azure文件共享时遇到问题。虽然我已经安装了Azure File CSI驱动程序并且它正在正确运行,但我仍然遇到错误:

Events:
  Type     Reason       Age                From               Message
  ----     ------       ----               ----               -------
  Normal   Scheduled    45s                default-scheduler  Successfully assigned default/mypod to aks-agentpool-xxxx
  Warning  FailedMount  14s (x7 over 46s)  kubelet            MountVolume.SetUp failed for volume "azure" : rpc error: code = InvalidArgument desc = failed to get account name from csi-xxx

字符串
以下是我迄今为止尝试的方法:
1.已验证的UAMI权限:UAMI在Azure存储帐户上具有“存储帐户贡献者”角色。
1.在Kubernetes中配置AzureIdentity和AzureIdentityBinding:确保这些资源配置正确。AzureIdentity有正确的clientIDresourceIDAzureIdentityBinding的选择器匹配我的pod中的aadpodidbinding标签。

  1. Pod配置:我的Pod有正确的aadpodidbinding标签。pod.yaml配置为使用SMB协议
  2. CSI驾驶员姓名:我无法从Azure File CSI驱动程序Pod中检索日志。运行kubectl logs -l app=csi-azurefile -n kube-system将返回“No resources found in kube-system namespace,",即使Pod存在并正在运行。
  3. Pod事件:查看了Pod的事件,但没有找到指向问题根本原因的具体线索。
    我认为这个问题可能与UAMI身份验证或Azure File CSI驱动程序配置有关,但我无法确定确切的原因。我无法访问CSI驱动程序日志的事实也令人困惑。
    任何关于如何解决这个问题或进一步诊断这个问题的见解或建议将不胜感激。
5kgi1eie

5kgi1eie1#

要使用用户名管理的身份在Kubernetes群集上装载Azure文件共享,您应该首先使用user assigned managed identity.创建AKS群集
这可以使用以下Azure CLI命令来实现-

az aks create -g <YourResourceGroup> -n <YourManagedClusterName> --enable-managed-identity

字符串
x1c 0d1x的数据
您可以使用az identity show --ids

进行验证
或从门户

接下来是Azure文件共享挂载部分。

转到您的群集,使用带有--query nodeResourceGroup参数的az aks show命令确定群集的资源组名称。

az aks show --resource-group YourResourceGroup --name YourManagedAKSClusterName --query nodeResourceGroup -o tsv

  • 输出 *:

接下来,创建一个存储帐户:

az storage account create -n <YourAKSStorageAccountName> -g <YournodeResourceGroupName> -l <yourchoiceOflocation> --sku Standard_LRS


x1c4d 1x接下来,将存储帐户连接字符串声明为环境变量,以便将来在创建文件共享时使用:

export AZURE_STORAGE_CONNECTION_STRING=$(az storage account show-connection-string -n storageAccountName -g resourceGroupName -o tsv)


继续创建文件共享,将shareName替换为您选择的名称:

az storage share create -n shareName --connection-string $AZURE_STORAGE_CONNECTION_STRING

  • 输出 *

导出存储帐户密钥:

STORAGE_KEY=$(az storage account keys list --resource-group nodeResourceGroupName --account-name <youraksstorageaccountname> --query "[0].value" -o tsv)


使用这些凭据创建Kubernetes secret。创建Kubernetes卷时需要这些值。kubectl create secret
输出

将文件共享挂载为永久卷,fileModedirMode的默认值为 0777
接下来,通过应用相应的配置来设置持久卷和声明。

apiVersion: v1
kind: PersistentVolume
metadata:
  annotations:
    pv.kubernetes.io/provisioned-by: file.csi.azure.com
  name: azurefile
spec:
  capacity:
    storage: 5Gi
  accessModes:
    - ReadWriteMany
  persistentVolumeReclaimPolicy: Retain
  storageClassName: azurefile-csi
  csi:
    driver: file.csi.azure.com
    volumeHandle: unique-volumeid  # make sure this volumeid is unique for every identical share in the cluster
    volumeAttributes:
      resourceGroup: resourceGroupName  # optional, only set this when storage account is not in the same resource group as node
      shareName: aksshare
    nodeStageSecretRef:
      name: azure-secret
      namespace: default
  mountOptions:
    - dir_mode=0777
    - file_mode=0777
    - uid=0
    - gid=0
    - mfsymlinks
    - cache=strict
    - nosharesock
    - nobrl
kubectl create -f azurefiles-pv.yaml

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: azurefile
spec:
  accessModes:
    - ReadWriteMany
  storageClassName: azurefile-csi
  volumeName: azurefile
  resources:
    requests:
      storage: 5Gi
kubectl apply -f azurefiles-mount-options-pvc.yaml

确认PVC的创建和绑定:

kubectl get pvc azurefile


输出

更新您的容器规格以整合PVC。

参考文档:Ms DocMs DocMount File share guideSimilar thread

相关问题