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

6
我正在尝试运行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...
helm install --name jenkins stable/jenkins --values=values.yaml

我的values.yaml文件看起来像这样

Persistence:
  ExistingClaim: jenkins-home-pvc

当Jenkins的Pod启动时,我收到以下错误:

AttachVolume.Attach失败,卷为“jenkins-home”:将卷“jenkins-home”附加到实例“aks-agentpool-40897452-0”失败,使用compute.VirtualMachinesClient#CreateOrUpdate:响应请求失败:StatusCode = 409--原始错误:autorest / azure:服务返回错误。 Status = 409 Code =“OperationNotAllowed” Message =“不支持向具有托管磁盘的VM添加基于blob的磁盘。”

1个回答

9
我将这个问题提交给Azure团队(这里)。通过他们的帮助,我找到了以下解决方案...
我之前尝试使用托管磁盘资源ID,但它告诉我期望.vhd文件。但是添加“kind: Managed”后,它可以接受托管磁盘资源ID。
当然,创建一个空的和格式化的托管磁盘是这个工作的先决条件。还需要将托管磁盘复制到与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

非常感谢您!我猜在Azure上使用K8s的人不是太多,否则我认为设置生产系统的这些基本细节应该是最重要的,或者至少在文档中清晰地列出。很高兴我找到了这篇文章! - Dan Nissenbaum
@DanNissenbaum,很高兴看到人们仍然发现它有用——这让我很开心。 - anschoewe

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接