在AKS上使用Statefulset共享Azure文件存储

问题描述

我在Azure Kubernetes 1.16上有一个包含3个实例的Statefulset,在这里我尝试使用Azure文件存储为这3个实例创建单个文件共享。

我使用Azure Files dynamic来声明所有内容,即自动创建存储帐户,秘密,pvc和pv。

通过VolumeClaimTemplate进行显示

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: xxx
spec:
  replicas: 3
  ...
  volumeClaimTemplates:
  - metadata:
      name: xxx-data-shared
    spec:
      accessModes: [ ReadWriteMany ]
      storageClassName: azfile-zrs-sc
      resources:
        requests:
            storage: 1Gi

StorageClass:

kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
  name: azfile-zrs-sc
provisioner: kubernetes.io/azure-file
reclaimPolicy: Retain
volumeBindingMode: WaitForFirstConsumer
mountOptions:
  - dir_mode=0777
  - file_mode=0777
  - uid=0
  - gid=0
  - mfsymlinks
  - cache=strict
parameters:
  resourceGroup: xxx
  skuName: Standard_ZRS
  shareName: data

我最终得到了3个pv,而不是一个共享,它们分别指向一个单独创建的Azure存储帐户,每个共享都有data

问题:我可以在清单中进行其他配置的情况下使用Azure文件动态来获得单个文件共享吗?还是我必须做静态的?

解决方法

结果发现volumeClaimTemplates不是正确的位置(reference)。

请改为使用persistentVolumeClaim

对于Azure文件存储,它变为:

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: data-shared-claim
spec:
  accessModes:
    - ReadWriteMany
  storageClassName: azfile-zrs-sc
  resources:
    requests:
      storage: 1Gi  

并在清单中引用它:

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: xxx
spec:
  replicas: 3
  ...
  template: 
    spec:
      containers:
      ...
        volumeMounts:
        - name: data-shared
          mountPath: /data
      volumes:
        - name: data-shared
          persistentVolumeClaim:
            claimName: data-shared-claim

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...