Azure Aks 挂载 Azure 存储账户(Storage Account) 磁盘的几种方式
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中创建磁盘