我正在尝试使用通过 terraform(准确地说是文件共享)创建的存储帐户并创建持久卷和持久卷声明并使用 pvc 存储来自 Apache Airflow 的 dag 日志,但是,看起来 pvc 无法绑定到 pv 作为我可以在日志中看到以下消息:
volume "daglogs-pv" already bound to a different claim.
当我检查 pv 时,我看到它处于失败状态:
❯ kubectl get pv daglogs-pv -A
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
daglogs-pv 10Gi RWX Delete Failed airflow-sandbox/daglogs-pvc azurefile-csi 47m
然后我检查 PV,它抱怨没有匹配的可删除卷插件:
❯ kubectl describe pv daglogs-pv -n airflow-sandbox
Name: daglogs-pv
Labels: app.kubernetes.io/managed-by=Helm
Annotations: meta.helm.sh/release-name: airflow
meta.helm.sh/release-namespace: airflow-sandbox
pv.kubernetes.io/bound-by-controller: yes
Finalizers: [kubernetes.io/pv-protection]
StorageClass: azurefile-csi
Status: Failed
Claim: airflow-sandbox/daglogs-pvc
Reclaim Policy: Delete
Access Modes: RWX
VolumeMode: Filesystem
Capacity: 10Gi
Node Affinity: <none>
Message: error getting deleter volume plugin for volume "daglogs-pv": no deletable volume plugin matched
Source:
Type: CSI (a Container Storage Interface (CSI) volume source)
Driver: file.csi.azure.com
FSType:
VolumeHandle: airflow-sandbox
ReadOnly: false
VolumeAttributes: resourceGroup=testrg11
shareName=testairflowdaglogs
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Warning VolumeFailedDelete 40m persistentvolume-controller error getting deleter volume plugin for volume "daglogs-pv": no deletable volume plugin matched
存储类:
❯ kubectl describe sc azurefile-csi
Name: azurefile-csi
IsDefaultClass: No
Annotations: <none>
Provisioner: file.csi.azure.com
Parameters: skuName=Standard_LRS
AllowVolumeExpansion: True
MountOptions:
mfsymlinks
actimeo=30
ReclaimPolicy: Delete
VolumeBindingMode: Immediate
Events: <none>
我迷路了。试图解决这个问题,但我做不到。供应商或驱动程序有问题吗?
我正在从以下链接关注 MS 指南:
https://learn.microsoft.com/en-us/azure/aks/azure-csi-blob-storage-provision?tabs=mount-nfs%2Csecret#statically-provision-a-volume.
我正在使用 helm 部署整个东西,pvc/pv 被创建为模板。这是代码:
pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: daglogs-pvc
spec:
accessModes:
- ReadWriteMany
storageClassName: azurefile-csi
volumeName: daglogs-pv
resources:
requests:
storage: 10Gi
pv.yaml 代码
apiVersion: v1
kind: PersistentVolume
metadata:
name: daglogs-pv
namespace: {{ .Release.Namespace }}
spec:
capacity:
storage: 10Gi
accessModes:
- ReadWriteMany
persistentVolumeReclaimPolicy: Delete
storageClassName: azurefile-csi
csi:
driver: file.csi.azure.com
readOnly: false
volumeHandle: {{ .Release.Namespace }} #unique-volumeid12
volumeAttributes:
resourceGroup: {{ .Values.resource_group_name }}
shareName: testairflowdaglogs
nodeStageSecretRef:
name: dag-logs-storage
namespace: {{ .Release.Namespace }}
mountOptions:
- dir_mode=0777
- file_mode=0777
- uid=0
- gid=0
- mfsymlinks
- cache=strict
- nosharesock
- nobrl
最后,secret.yaml
apiVersion: v1
kind: Secret
metadata:
namespace: {{ .Release.Namespace }}
name: dag-logs-storage
data:
azurestorageaccountname: {{ .Values.daglogscred.storageaccountname | b64enc | quote }}
azurestorageaccountkey: {{ .Values.daglogscred.storageaccountkey | b64enc | quote }}
type: Opaque
创建 PV 和 PVC 时出现此错误的原因可能有很多。以下是您可以执行的几项检查以确定问题。
确保您已使用在存储类别中指定的正确 SKU 创建了存储帐户。如果你使用的是 azure 提供的内置存储类,请使用命令查看详细信息
kubectl describe sc <storage-class-name>
如果您将 Standard_LRS 指定为 skuName,请创建具有相同配置的存储帐户。
验证清单文件中使用的 CSI 驱动程序。使用
kubectl get csidrivers
并检查您在清单文件中使用的驱动程序。
如果之前没有启用,请使用以下命令启用 CSI 驱动程序。
az aks update -n cluster-name -g resource-group-name --enable-disk-driver --enable-file-driver --enable-blob-driver --enable-snapshot-controller
有关驱动程序的更多详细信息,请参阅此链接。
此外,帖子中提供的链接适用于 Azure Blob 存储。请点击此链接Azure Fileshare PV 和 PVC | Microsoft 文档 作为创建 PV 和 PVC 的参考。我能够按照上述检查创建 PV 和 PVC。