You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

重新创建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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 04:36:06