如何将手动配置的 Azure 托管磁盘配置为用作 Kubernetes 持久卷?

How to configure a manually provisioned Azure Managed Disk to use as a Kubernetes persistent volume?

我正在尝试 运行 Jenkins Helm chart。作为此设置的一部分,我想传入一个我提前配置的持久卷(或者可能在迁移期间从另一个集群导出)。

我正在尝试设置持久卷 (PV) 和持久卷声明 (PVC),以便 Jenkins 启动时使用我预定义的 PV 和 PVC。

我认为问题源于 Azure 磁盘的持久存储定义指向我的存储帐户中的 VHD。有什么方法可以将它指向现有的托管磁盘 - 而不是 blob?

这就是我使用 Azure 托管磁盘设置持久存储的方式

apiVersion: v1
kind: PersistentVolume
metadata:
  name: jenkins-home
spec:
  capacity:
    storage: 10Gi
  storageClassName: default
  azureDisk:
    diskName: jenkins-home
    diskURI: https://<storageaccount>.blob.core.windows.net/jenkins-data/jenkins-home.vhd
    fsType: ext4
  accessModes:
  - ReadWriteOnce
  persistentVolumeReclaimPolicy: Retain
  claimRef:
    name: jenkins-home-pvc
    namespace: default
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: jenkins-home-pvc
spec:
  accessModes:
  - ReadWriteOnce
  resources:
    requests:
      storage: 10Gi
  storageClassName: default

然后我像这样开始掌舵...

helm install --name jenkins stable/jenkins --values=values.yaml

我的 values.yaml 文件看起来像

Persistence:
  ExistingClaim: jenkins-home-pvc

这是我在 Jenkins 的 pod 启动时收到的错误。

AttachVolume.Attach failed for volume "jenkins-home" : Attach volume "jenkins-home" to instance "aks-agentpool-40897452-0" failed with compute.VirtualMachinesClient#CreateOrUpdate: Failure responding to request: StatusCode=409 -- Original Error: autorest/azure: Service returned an error. Status=409 Code="OperationNotAllowed" Message="Addition of a blob based disk to VM with managed disks is not supported."

我向 Azure 团队提出了这个问题 here

通过他们的帮助,我得出了以下解决方案...

我之前曾尝试使用托管磁盘资源 ID,但它对我大喊大叫,说它需要一个 .vhd 文件。但是加了'kind: Managed'之后,拿来托管磁盘资源id就完美了。

创建一个空的且格式化的托管磁盘当然是 pre-requisite 才能正常工作。还需要将托管磁盘复制到与 AKS 群集相同的资源组中。

所以现在我的 PV 和 PVC 看起来像这样并且正在运行...

apiVersion: v1
kind: PersistentVolume
metadata:
  name: jenkins-home
spec:
  capacity:
    storage: 10Gi
  storageClassName: default
  azureDisk:
    kind: Managed
    diskName: jenkins-home
    diskURI: /subscriptions/{subscription-id}/resourceGroups/{aks-controlled-resource-group-name}/providers/Microsoft.Compute/disks/jenkins-home
    fsType: ext4
  accessModes:
  - ReadWriteOnce
  persistentVolumeReclaimPolicy: Retain
  claimRef:
    name: jenkins-home-pvc
    namespace: default
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: jenkins-home-pvc
  annotations:
    volume.beta.kubernetes.io/storage-class: default
spec:
  accessModes:
  - ReadWriteOnce
  resources:
    requests:
      storage: 10Gi
  storageClassName: default