如何使用AWS EFS和ReadWriteMany配置持久卷索赔?

13

我有以下持久化卷和卷索赔:

kind: PersistentVolume
apiVersion: v1
metadata:
  name: kloud
spec:
  capacity:
    storage: 100Gi
  accessModes:
    - ReadWriteMany
  persistentVolumeReclaimPolicy: Retain
  nfs:
    server: 172.21.51.42
    path: /
    readOnly: false

和:

kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: kloud
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 100Gi

nfs服务器是AWS EFS。我特意ssh到k8s的主节点并检查,确认我可以手动挂载NFS卷。但是当我使用kubectl创建该卷和claim时,它一直处于“挂起”状态:


$ kubectl get pvc
NAME      STATUS    VOLUME    CAPACITY   ACCESSMODES   STORAGECLASS   AGE
kloud     Pending                                      gp2            8s

如果我将模式更改为 ReadWriteOnce,它将按预期工作并且不会挂起。
$ kubectl get pvc
NAME      STATUS    VOLUME                                     CAPACITY   ACCESSMODES   STORAGECLASS   AGE
kloud     Bound     pvc-c9a01bff-94d0-11e7-8ed4-0aec4a0f734a   100Gi      RWO           gp2       

我有些遗漏了吗?如何在k8s和EFS上创建RWX声明?

1个回答

14

您需要在集群中设置EFS-provisioner。默认的Kubernetes发行版仍不支持挂载EFS,因此您需要这个扩展:https://github.com/kubernetes-incubator/external-storage/tree/master/aws/efs

您需要设置它的存储类:

    kind: StorageClass
apiVersion: storage.k8s.io/v1beta1
metadata:
  name: aws-efs
provisioner: example.com/aws-efs

然后编写以下类型的PVC:

kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: efs
  annotations:
    volume.beta.kubernetes.io/storage-class: "aws-efs"
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 1Mi

不要在意存储大小,虽然它并不被EFS所使用,但Kubernetes需要你在那里设置一些内容才能正常工作。


我应该将 example.com 替换为我的主机名吗?例如 k8s-master.mydomain.cloud?这是用来做什么的? - oz123
它可以是任何你想要的,只是为了让资源在想要使用这个存储类时有一个参考。 - vascop
嗨vascop,感谢您的回答。我正在使用链接:https://github.com/kubernetes-incubator/external-storage/tree/master/aws/efs来创建PVC,但是我遇到了超时错误,有任何想法为什么会出现此错误?完整的错误消息如下:timeout expired waiting for volumes to attach or mount for pod "default"/"efs-provisioner-55dcf9f58d-r547q". MountVolume.SetUp failed for volume "pv-volume" : mount failed: exit status 32 - Pruthviraj

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接