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

时间:2018-02-13 19:14:14

标签: azure kubernetes persistent-volumes

我正在尝试运行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卷“jenkins-home”失败:将卷“jenkins-home”附加到实例“aks-agentpool-40897452-0”失败,计算失败.VirtualMachinesClient#CreateOrUpdate:响应请求失败:StatusCode = 409 - - 原始错误:autorest / azure:服务返回错误。 Status = 409 Code =“OperationNotAllowed”Message =“不支持向托管磁盘添加基于blob的磁盘。”

1 个答案:

答案 0 :(得分:3)

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

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

之前我曾尝试过使用托管磁盘资源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