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

时间:2020-08-20 10:43:50

标签: azure kubernetes azure-aks azure-files kubernetes-statefulset

我在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文件动态来获得单个文件共享吗?还是我必须做静态的?

1 个答案:

答案 0 :(得分:2)

结果发现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