Azure Aks 挂载 Azure 存储账户(Storage Account) 磁盘的几种方式

momo314相同方式共享非商业用途署名转载



azure file (File Share 文件共享) 在 kubernetes 中的挂载

非常简单,只需要创建如下 StorageClass 即可

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: StorageClass名称
provisioner: kubernetes.io/azure-file
mountOptions:
  - dir_mode=0777
  - file_mode=0777
allowVolumeExpansion: true
parameters:
  skuName: Standard_LRS  # available values: Standard_LRS, Standard_GRS, Standard_ZRS, Standard_RAGRS, Premium_LRS
  storageAccount: 存储账户
  resourceGroup: 存储账户所在的资源组
reclaimPolicy: Delete
volumeBindingMode: Immediate

这种挂载方式在文件的读取速度上没什么问题,但貌似在大量写入时,会存在性能问题,但这是由于 azure 的 File Share 文件共享特性所决定的,在应用层面应该不太容易改进或提升。


azure blob container 在 kubernetes 中的挂载

pv和pvc的yaml配置文件也很简单,如下:

apiVersion: v1
kind: PersistentVolume
metadata:
  name: azure-blob-nfs-pv
spec:
  capacity:
    storage: 1024Gi
  accessModes:
    - ReadWriteMany
  persistentVolumeReclaimPolicy: Delete  # If set as "Delete" container would be removed after pvc deletion
  storageClassName: azureblob-nfs-premium
  csi:
    driver: blob.csi.azure.com
    readOnly: false
    # make sure this volumeid is unique in the cluster
    # `#` is not allowed in self defined volumeHandle
    volumeHandle: k8s集群内唯一
    volumeAttributes:
      resourceGroup: 存储账户所在的资源组
      storageAccount: 存储账户
      containerName: 存储账户中BlobContainer名
      protocol: nfs
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: azure-blob-nfs-pvc
  namespace: k8s命名空间
spec:
  storageClassName: azureblob-nfs-premium # 这个StorageClassName在aks集群内是默认集成的
  volumeName: azure-blob-nfs-pv
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 1Gi

这种方式可以使用 azure 存储账户内提供的 blob container 作为网络磁盘,按需创建pv和pvc,但对于存储账号的一些属性是有要求的(有一些属性在存储账户创建之后是无法更改的):

  • 启用分层命名空间
  • 启用网络文件系统 v3 (nfsv3)

这种挂载方式与直接使用azuredisk-csi-driver挂载静态或动态azure disk相比:

  • 支持 ReadWriteMany, 且不需要受MaxShares最大共享数量限制
  • 可以通过存储账户管理磁盘,而不需要在azure portal中创建磁盘
✎﹏ 本文来自于 momo314和他们家的猫,文章原创,转载请注明作者并保留原文链接。