【问题标题】:How to configure a manually provisioned Azure Managed Disk to use as a Kubernetes persistent volume?如何配置手动预配的 Azure 托管磁盘以用作 Kubernetes 持久卷?
【发布时间】:2018-07-24 05:58:35
【问题描述】:

我正在尝试运行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”失败,compute.VirtualMachinesClient#CreateOrUpdate:响应请求失败:StatusCode=409 - - 原始错误:autorest/azure:服务返回错误。 Status=409 Code="OperationNotAllowed" Message="不支持将基于 blob 的磁盘添加到具有托管磁盘的 VM。"

【问题讨论】:

    标签: azure kubernetes persistent-volumes


    【解决方案1】:

    我向 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
    

    【讨论】:

    • 非常感谢您!我想肯定不会有太多人在 Azure 上实际使用带有 K8s 的 Azure 磁盘 - 我认为有关设置生产系统的这个非常基本的细节将是最重要的,或者至少在文档中明确列出。很高兴我找到了这篇文章!
    • @DanNissenbaum,很高兴人们仍然觉得它有用——让我开心。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-03
    • 1970-01-01
    • 2017-05-18
    • 2016-09-02
    • 2017-11-26
    • 2018-03-28
    相关资源
    最近更新 更多