You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何将手动预配Azure Managed Disk设为K8s持久卷并适配Jenkins Helm Chart?

问题1:如何将手动预配的Azure Managed Disk配置为Kubernetes持久卷?

其实步骤很清晰,只要确保磁盘和K8s集群的基础环境匹配(同区域、同资源组或集群有权限访问),跟着下面的步骤来就行:

  • 第一步:获取Azure Managed Disk的资源标识
    先通过Azure CLI拿到磁盘的资源ID,这个是K8s用来识别磁盘的关键:

    az disk show --name <你的磁盘名称> --resource-group <磁盘所在资源组> --query id -o tsv
    

    执行后会输出一串类似/subscriptions/xxx/resourceGroups/xxx/providers/Microsoft.Compute/disks/xxx的字符串,记下来。

  • 第二步:创建Persistent Volume(PV)配置文件
    新建一个pv-azure-managed-disk.yaml,内容如下,注意替换占位符:

    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: azure-managed-disk-pv
    spec:
      capacity:
        storage: 10Gi # 要和你的磁盘实际容量匹配
      accessModes:
        - ReadWriteOnce
      persistentVolumeReclaimPolicy: Retain # 可选:Retain/Delete/Recycle,根据你的需求选
      storageClassName: "managed-disk-sc" # 自定义存储类名称,后面PVC要对应
      azureDisk:
        kind: Managed
        diskURI: <第一步拿到的磁盘资源ID>
        diskName: <你的磁盘名称>
        fsType: ext4 # 磁盘的文件系统类型,提前格式化过的话要对应
    
  • 第三步:部署PV并验证
    执行命令创建PV:

    kubectl apply -f pv-azure-managed-disk.yaml
    

    kubectl get pv查看状态,应该显示Available

  • 第四步:创建匹配的Persistent Volume Claim(PVC)
    新建pvc-azure-managed-disk.yaml

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: azure-managed-disk-pvc
    spec:
      accessModes:
        - ReadWriteOnce
      resources:
        requests:
          storage: 10Gi # 和PV的容量一致
      storageClassName: "managed-disk-sc" # 和PV的存储类名称完全匹配
    

    部署后用kubectl get pvc检查,状态变成Bound就说明绑定成功了,之后就能在Pod里引用这个PVC了。


问题2:Jenkins Helm Chart使用预配的PV/PVC的解决方法

你提到的问题大概率是因为直接引用了存储账户里的VHD文件,而没有通过Managed Disk的方式来配置PV。K8s的azureDisk插件更推荐用Managed Disk而非直接指向VHD,下面是具体的解决步骤:

  • 第一步:把VHD转换成Managed Disk(如果还没转的话)
    如果你的磁盘目前只是存储账户里的VHD文件,先通过Azure CLI转换成Managed Disk,这样K8s才能更好地管理:

    az disk create --name <新的Managed Disk名称> --resource-group <资源组名称> --source <VHD的完整URL> --sku Standard_LRS # 可根据需求替换SKU,比如Premium_LRS
    

    转换完成后,按照问题1的步骤创建对应的PV和PVC。

  • 第二步:配置Jenkins Helm Chart使用已有的PVC
    Jenkins的Helm Chart默认会自动创建PVC,你需要禁用这个行为,指定你预配好的PVC名称。有两种方式:

    1. 安装时通过参数指定:
      helm install jenkins jenkins/jenkins \
        --set persistence.enabled=true \
        --set persistence.existingClaim=<你的PVC名称> \
        --set persistence.storageClass="" # 留空表示使用PVC绑定的PV的存储类
      
    2. 自定义values.yaml文件:
      在values.yaml里修改以下配置:
      persistence:
        enabled: true
        existingClaim: "<你的PVC名称>"
        storageClass: ""
      
      然后执行helm install jenkins jenkins/jenkins -f values.yaml
  • 第三步:验证部署
    部署完成后,用kubectl get pods查看Jenkins Pod的状态,等它变成Running后,检查磁盘是否正确挂载:

    kubectl exec -it <jenkins-pod-name> -- df -h
    

    如果你之前的Jenkins数据在VHD里,转换成Managed Disk后挂载进去,数据应该会保留。

如果还是有问题,可以查看Jenkins Pod的日志排查:

kubectl logs <jenkins-pod-name>

内容的提问来源于stack exchange,提问作者anschoewe

火山引擎 最新活动