我尝试为我的 AKS 集群使用 Azure Blob 存储。首先,我通过在 Azure 云 shell 中运行以下命令来启用集群中的 Blob CSI 驱动程序:
az aks update --enable-blob-driver -n mycluster -g mygp
然后我通过运行检查了它:
kubectl get sc
结果如下:
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE
azureblob-fuse-premium blob.csi.azure.com Delete Immediate true 39m
azureblob-nfs-premium blob.csi.azure.com Delete Immediate true 39m
然后我应用此 .yaml 创建了一个持久卷声明 (PVC):
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: azure-blob-storage
spec:
accessModes:
- ReadWriteMany
storageClassName: azureblob-nfs-premium
resources:
requests:
storage: 1Gi
PVC创建成功,命令
kubectl get pvc
显示:
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
azure-blob-storage Bound pvc-7156b751-644c-4d21-829e-037ddf7528c4 1Gi RWX azureblob-nfs-premium 24m
然后我使用这个 .yaml 将 PVC 安装到我的 Pod:
apiVersion: apps/v1
kind: Deployment
metadata:
name: mongo2-deployment
labels:
app: mongo2
spec:
replicas: 1
selector:
matchLabels:
app: mongo2
template:
metadata:
labels:
app: mongo2
spec:
volumes:
- name: volume
persistentVolumeClaim:
claimName: azure-blob-storage
containers:
- name: mongo2db
image: mongo:latest
ports:
- containerPort: 27017
env:
- name: MONGO_INITDB_ROOT_USERNAME
valueFrom:
secretKeyRef:
name: mongo2-secret
key: mongo-user
- name: MONGO_INITDB_ROOT_PASSWORD
valueFrom:
secretKeyRef:
name: mongo2-secret
key: mongo-password
- name: MONGO_INITDB_DATABASE
valueFrom:
configMapKeyRef:
name: mongo2-config
key: mongo-dbase
volumeMounts:
- mountPath: "/data/db"
name: volume
readOnly: false
但是当我应用上面的 .yaml 时,pod 停留在“Creating”状态。当我运行命令
kubectl describe pod/<pod_name>
时,显示以下消息:
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled 95s default-scheduler Successfully assigned default/mongo2-deployment-7b9ddbf54b-6p2wr to aks-userpool-13168364-vmss00000j
Warning FailedMount 32s (x8 over 95s) kubelet MountVolume.MountDevice failed for volume "pvc-527cc87f-b369-41c5-a571-ed2c57fd4c3f" : kubernetes.io/csi: attacher.MountDevice failed to create newCsiDriverClient: driver name blob.csi.azure.com not found in the list of registered CSI drivers
然后我尝试查看节点是否有 Blob 驱动程序,我通过运行
kubectl describe csinodes aks-agentpool-13168364-vmss00000c
: 发现了这一点
Spec:
Drivers:
disk.csi.azure.com:
Node ID: aks-agentpool-13168364-vmss00000c
Allocatables:
Count: 4
Topology Keys: [topology.disk.csi.azure.com/zone topology.kubernetes.io/zone]
file.csi.azure.com:
Node ID: aks-agentpool-13168364-vmss00000c
blob.csi.azure.com:
Node ID: aks-agentpool-13168364-vmss00000c
但是当我运行
kubectl describe csinodes aks-userpool-13168364-vmss00000j
时,我发现blob.csi.azure.com不在用户节点池中:
Spec:
Drivers:
disk.csi.azure.com:
Node ID: aks-userpool-13168364-vmss00000j
Allocatables:
Count: 4
Topology Keys: [topology.disk.csi.azure.com/zone topology.kubernetes.io/zone]
file.csi.azure.com:
Node ID: aks-userpool-13168364-vmss00000j
我相信这就是我的 Pod 无法启动的原因。但是如何将 blob.csi.azure.com 注册到用户节点池中呢?
附注我的 AKS 集群是 Linux 集群,既用于代理节点池,又用于用户节点池。
事实证明,Blob Driver 还没有出现在用户节点池中(但至少在我启用驱动程序后大约半小时内没有出现,这可以证明,因为 pvc 存在了 24 分钟,如问题所示)显示)。我停止了集群并在第二天重新启动它,然后 Blob 驱动程序出现,如
kubectl describe csinodes aks-userpool-13168364-vmss00000j
命令的输出所示:
Spec:
Drivers:
disk.csi.azure.com:
Node ID: aks-userpool-13168364-vmss00000k
Allocatables:
Count: 4
Topology Keys: [topology.disk.csi.azure.com/zone topology.kubernetes.io/zone]
file.csi.azure.com:
Node ID: aks-userpool-13168364-vmss00000k
blob.csi.azure.com:
Node ID: aks-userpool-13168364-vmss00000k
Events: <none>
MongoDB Pod 重新启动后即可工作。