我正在尝试在Windows AKS pod上挂载azureFile卷,但出现错误:
kubelet,MountVolume.SetUp对于卷“文件共享”失败: New-SmbGlobalMapping失败:fork / exec C:\ windows \ System32 \ WindowsPowerShell \ v1.0 \ powershell.exe: 参数不正确。,输出:“”
我的pod.yml看起来像:
apiVersion: v1
kind: Pod
metadata:
name: q-pod-sample-03
namespace: mq
spec:
containers:
- image: test.azurecr.io/q/p:01
name: q-ctr-sample-03
imagePullPolicy: "IfNotPresent"
volumeMounts:
- name: azfileshare
mountPath: 'c:/app/app-data'
nodeSelector:
"beta.kubernetes.io/os": windows
volumes:
- name: azfs
azureFile:
secretName: qastapv-share-01-secret
shareName: qastapv-share-01
readOnly: false
我的secret.yml如下:
apiVersion: v1
kind: Secret
metadata:
name: qastapv-share-01-secret
namespace: mq
type: Opaque
data:
azurestorageaccountname: <Base64Str>
azurestorageaccountkey: <Base64Str>
我的PV如下:
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv-azfs-q-01
namespace: mq
spec:
capacity:
storage: 5Gi
accessModes:
- ReadWriteMany
azureFile:
secretName: qastapv-share-01-secret
shareName: qastapv-share-01
readOnly: false
mountOptions:
- dir_mode=0777
- file_mode=0777
- uid=1000
- gid=1000
我在这里想念的是什么? 我正在使用AKS 1.14。
答案 0 :(得分:1)
如我所见,您的yaml文件中有问题。首先,在您的pod yaml文件中:
apiVersion: v1
kind: Pod
metadata:
name: q-pod-sample-03
namespace: mq
spec:
containers:
- image: test.azurecr.io/q/p:01
name: q-ctr-sample-03
imagePullPolicy: "IfNotPresent"
volumeMounts:
- name: azfileshare
mountPath: 'c:/app/app-data'
nodeSelector:
"beta.kubernetes.io/os": windows
volumes:
- name: azfileshare # this name should be the same with the name in volumeMounts
azureFile:
secretName: qastapv-share-01-secret
shareName: qastapv-share-01
readOnly: false
我不知道如何将存储帐户名和密钥转换为base64。因此,我还将展示两种在AKS中创建机密的方法。
一种方法是使用以下命令进行创建:
kubectl create secret generic azure-secret --from-literal=azurestorageaccountname=$AKS_PERS_STORAGE_ACCOUNT_NAME --from-literal=azurestorageaccountkey=$STORAGE_KEY
第二个方法是使用yaml文件,并将存储帐户名和密钥转换为base64,然后将它们输入到yaml文件中,如下所示:
echo 'storageAccountName' | base64
echo 'storageAccountKey' | base64
显示的yaml文件并输入上述命令的输出。
按照上述步骤,您无需创建PV个人。
有关更多详细信息,请参见Manually create and use a volume with Azure Files share in Azure Kubernetes Service (AKS)。如果要使用PV / PVC,请查看Mount volumes via PV and PVC。
更新:
如果使用yaml文件创建密钥,则还需要注意将字符串转换为base64的操作系统。不同的操作系统对于base64可能具有不同的规则。对于您来说,您使用Windows节点,因此需要在Windows系统上将存储帐户名和密钥转换为base64。以下是要转换的PowerShell命令:
$Name= [System.Text.Encoding]::UTF8.GetBytes("storageAccountName ")
[System.Convert]::ToBase64String($Name )
$Key = [System.Text.Encoding]::UTF8.GetBytes("storageAccountKey")
[System.Convert]::ToBase64String($Key)