重新创建AKS集群后挂载现有StorageClass的SonarQube PVC遇错求助
解决方案:重新绑定现有Azure文件共享到新AKS集群的PVC
当AKS集群销毁重建后,原StorageClass对应的Azure文件共享因处于单独资源组得以保留,但新集群中无对应PersistentVolume(PV)记录,需手动创建PV关联现有存储,再让PVC绑定该PV,具体步骤如下:
步骤1:确认现有存储资源状态
登录Azure控制台进入AKS-STORAGECLASS资源组,找到对应存储账户及两个文件共享(分别对应原sonarqube-data和sonarqube-extensions PVC),确认资源存在且数据完好,记录存储账户名称、文件共享名称、存储账户密钥。
步骤2:在新集群中重新创建StorageClass
直接应用你提供的StorageClass配置,确保参数完全一致:
apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: sonar-azurefile provisioner: file.csi.azure.com allowVolumeExpansion: true reclaimPolicy: Retain volumeBindingMode: WaitForFirstConsumer mountOptions: - dir_mode=0777 - file_mode=0777 - uid=1000 - gid=1000 - mfsymlinks - cache=strict - actimeo=30 parameters: skuName: Standard_LRS resourceGroup: AKS-STORAGECLASS
执行命令:
kubectl apply -f storageclass.yaml -n inf-core
步骤3:手动创建PersistentVolume(PV)
针对每个文件共享创建PV,替换以下示例中的占位符为你的实际信息:
对应sonarqube-data的PV
apiVersion: v1 kind: PersistentVolume metadata: name: sonarqube-data-pv spec: capacity: storage: 5Gi accessModes: - ReadWriteMany persistentVolumeReclaimPolicy: Retain csi: driver: file.csi.azure.com volumeHandle: <存储账户名称>/<sonarqube-data文件共享名称> volumeAttributes: resourceGroup: AKS-STORAGECLASS storageAccount: <存储账户名称> shareName: <sonarqube-data文件共享名称> nodeStageSecretRef: name: azure-secret namespace: inf-core storageClassName: sonar-azurefile
对应sonarqube-extensions的PV
apiVersion: v1 kind: PersistentVolume metadata: name: sonarqube-extensions-pv spec: capacity: storage: 5Gi accessModes: - ReadWriteMany persistentVolumeReclaimPolicy: Retain csi: driver: file.csi.azure.com volumeHandle: <存储账户名称>/<sonarqube-extensions文件共享名称> volumeAttributes: resourceGroup: AKS-STORAGECLASS storageAccount: <存储账户名称> shareName: <sonarqube-extensions文件共享名称> nodeStageSecretRef: name: azure-secret namespace: inf-core storageClassName: sonar-azurefile
执行命令创建PV:
kubectl apply -f sonarqube-data-pv.yaml -f sonarqube-extensions-pv.yaml -n inf-core
步骤4:创建访问存储账户的Secret
在inf-core命名空间创建包含存储账户密钥的Secret:
kubectl create secret generic azure-secret --from-literal=azurestorageaccountname=<存储账户名称> --from-literal=azurestorageaccountkey=<存储账户密钥> -n inf-core
步骤5:修改PVC并绑定到PV
修改PVC配置,添加volumeName字段关联手动创建的PV,确保存储请求、访问模式与PV完全匹配:
sonarqube-data PVC
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: sonarqube-data namespace: inf-core spec: accessModes: - ReadWriteMany storageClassName: sonar-azurefile volumeName: sonarqube-data-pv resources: requests: storage: 5Gi
sonarqube-extensions PVC
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: sonarqube-extensions namespace: inf-core spec: accessModes: - ReadWriteMany storageClassName: sonar-azurefile volumeName: sonarqube-extensions-pv resources: requests: storage: 5Gi
执行命令应用PVC:
kubectl apply -f sonarqube-data-pvc.yaml -f sonarqube-extensions-pvc.yaml -n inf-core
步骤6:部署SonarQube并验证
应用你提供的Deployment配置,检查资源状态:
kubectl apply -f sonarqube-deployment.yaml -n inf-core # 查看Pod运行状态 kubectl get pods -n inf-core # 查看PVC绑定状态 kubectl get pvc -n inf-core
关键注意事项
- 确保新AKS集群的服务主体/托管标识拥有
AKS-STORAGECLASS资源组存储账户的Storage File Data SMB Share Contributor权限,若权限不足需在Azure IAM中配置。 - PV的
volumeHandle格式必须为<存储账户名称>/<文件共享名称>,不可出错。 - PVC存储请求大小需与原文件共享容量一致,或不超过其最大限制。
内容的提问来源于stack exchange,提问作者Lahmar Oussama
相关产品推荐
相关产品推荐

