我遵循了这个guideguide的步骤,为Kubernetes部署了efs-provider并绑定(bind)了EFS文件系统。我没有成功。

我正在使用Amazon EKS实现Kubernetes,并且将EC2实例用作工作程序节点,所有实例均使用eksctl进行部署。

应用此调整后的manifest file之后,结果是:

$ kubectl get pods
NAME                               READY   STATUS    RESTARTS
efs-provisioner-#########-#####   1/1     Running   0

$ kubectl get pvc
NAME       STATUS    VOLUME
test-pvc   Pending   efs-storage

无论等待多少时间,PVC的状态都会停留在Pending中。

在创建Kubernetes集群和工作程序节点并配置了EFS文件系统之后,我将efs-provider list 与指向EFS文件系统的所有变量一起应用。在StorageClass配置文件中,将spec.AccessModes字段指定为ReadWriteMany

此时,我的efs-provider容器正在运行,没有错误,并且PVC的状态为Pending。会是什么如何配置efs-provider以使用EFS文件系统?我应该等待多少时间才能获得PVC中的Bound状态?

更新资料

关于Amazon Web Services的配置,这些是我所做的:
  • 创建EFS文件系统后,我为节点所在的每个子网创建了一个安装点
  • 向每个安装点附加了安全组和一个入站规则,以授予从每个节点组的安全组对NFS端口(2049)的访问权限。

  • 我的EFS安全组的描述是:
    {
        "Description": "Communication between the control plane and worker nodes in cluster",
        "GroupName": "##################",
        "IpPermissions": [
            {
            "FromPort": 2049,
            "IpProtocol": "tcp",
            "IpRanges": [],
            "Ipv6Ranges": [],
            "PrefixListIds": [],
            "ToPort": 2049,
            "UserIdGroupPairs": [
                {
                "GroupId": "sg-##################",
                "UserId": "##################"
                }
            ]
            }
        ],
        "OwnerId": "##################",
        "GroupId": "sg-##################",
        "IpPermissionsEgress": [
            {
            "IpProtocol": "-1",
            "IpRanges": [
                {
                "CidrIp": "0.0.0.0/0"
                }
            ],
            "Ipv6Ranges": [],
            "PrefixListIds": [],
            "UserIdGroupPairs": []
            }
        ],
        "VpcId": "vpc-##################"
    }
    

    部署方式
    kubectl describe deploy ${DEPLOY_NAME}命令的输出为:
    $ DEPLOY_NAME=efs-provisioner; \
    > kubectl describe deploy ${DEPLOY_NAME}
    Name:               efs-provisioner
    Namespace:          default
    CreationTimestamp:  ####################
    Labels:             app=efs-provisioner
    Annotations:        deployment.kubernetes.io/revision: 1
    kubectl.kubernetes.io/last-applied-configuration:
    {"apiVersion":"extensions/v1beta1","kind":"Deployment","metadata":{"annotations":{},"name":"efs-provisioner","namespace":"default"},"spec"...
    Selector:           app=efs-provisioner
    Replicas:           1 desired | 1 updated | 1 total | 1 available | 0 unavailable
    StrategyType:       Recreate
    MinReadySeconds:    0
    Pod Template:
    Labels:           app=efs-provisioner
    Service Account:  efs-provisioner
    Containers:
    efs-provisioner:
    Image:      quay.io/external_storage/efs-provisioner:latest
    Port:       <none>
    Host Port:  <none>
    Environment:
    FILE_SYSTEM_ID:    <set to the key 'file.system.id' of config map 'efs-provisioner'>    Optional: false
    AWS_REGION:        <set to the key 'aws.region' of config map 'efs-provisioner'>        Optional: false
    DNS_NAME:          <set to the key 'dns.name' of config map 'efs-provisioner'>          Optional: true
    PROVISIONER_NAME:  <set to the key 'provisioner.name' of config map 'efs-provisioner'>  Optional: false
    Mounts:
    /persistentvolumes from pv-volume (rw)
    Volumes:
    pv-volume:
    Type:      NFS (an NFS mount that lasts the lifetime of a pod)
    Server:    fs-#########.efs.##########.amazonaws.com
    Path:      /
    ReadOnly:  false
    Conditions:
    Type           Status  Reason
    ----           ------  ------
    Available      True    MinimumReplicasAvailable
    OldReplicaSets:  <none>
    NewReplicaSet:   efs-provisioner-576c67cf7b (1/1 replicas created)
    Events:
    Type    Reason             Age   From                   Message
    ----    ------             ----  ----                   -------
    Normal  ScalingReplicaSet  106s  deployment-controller  Scaled up replica set efs-provisioner-576c67cf7b to 1
    

    pods 日志
    kubectl logs ${POD_NAME}命令的输出为:
    $ POD_NAME=efs-provisioner-576c67cf7b-5jm95; \
    > kubectl logs ${POD_NAME}
    E0708 16:03:46.841229       1 efs-provisioner.go:69] fs-#########.efs.##########.amazonaws.com
    I0708 16:03:47.049194       1 leaderelection.go:187] attempting to acquire leader lease  default/kubernetes.io-aws-efs...
    I0708 16:03:47.061830       1 leaderelection.go:196] successfully acquired lease default/kubernetes.io-aws-efs
    I0708 16:03:47.062791       1 controller.go:571] Starting provisioner controller kubernetes.io/aws-efs_efs-provisioner-576c67cf7b-5jm95_f7c5689f-a199-11e9-a152-def1285e1be5!
    I0708 16:03:47.062877       1 event.go:221] Event(v1.ObjectReference{Kind:"Endpoints", Namespace:"default", Name:"kubernetes.io-aws-efs", UID:"f7c682cd-a199-11e9-80bd-1640944916e4", APIVersion:"v1", ResourceVersion:"3914", FieldPath:""}): type: 'Normal' reason: 'LeaderElection' efs-provisioner-576c67cf7b-5jm95_f7c5689f-a199-11e9-a152-def1285e1be5 became leader
    I0708 16:03:47.162998       1 controller.go:620] Started provisioner controller kubernetes.io/aws-efs_efs-provisioner-576c67cf7b-5jm95_f7c5689f-a199-11e9-a152-def1285e1be5!
    

    存储类
    kubectl describe sc ${STORAGE_CLASS_NAME}命令的输出为:
    $ STORAGE_CLASS_NAME=aws-efs; \
    > kubectl describe sc ${STORAGE_CLASS_NAME}
    Name:            aws-efs
    IsDefaultClass:  No
    Annotations:     kubectl.kubernetes.io/last-applied-configuration={"apiVersion":"storage.k8s.io/v1","kind":"StorageClass","metadata":{"annotations":{},"name":"aws-efs"},"provisioner":"aws-efs"}
    Provisioner:           aws-efs
    Parameters:            <none>
    AllowVolumeExpansion:  <unset>
    MountOptions:          <none>
    ReclaimPolicy:         Delete
    VolumeBindingMode:     Immediate
    Events:                <none>
    

    持久卷声明
    kubectl describe pvc ${PVC_NAME}命令的输出为:
    $ PVC_NAME=efs; \
    > kubectl describe pvc ${PVC_NAME}
    Name:          efs
    Namespace:     default
    StorageClass:  aws-efs
    Status:        Pending
    Volume:
    Labels:        <none>
    Annotations:   kubectl.kubernetes.io/last-applied-configuration:
    {"apiVersion":"v1","kind":"PersistentVolumeClaim","metadata":{"annotations":{"volume.beta.kubernetes.io/storage-class":"aws-efs"},"name":"...
    volume.beta.kubernetes.io/storage-class: aws-efs
    Finalizers:    [kubernetes.io/pvc-protection]
    Capacity:
    Access Modes:
    Events:
    Type       Reason              Age                 From                         Message
    ----       ------              ----                ----                         -------
    Warning    ProvisioningFailed  43s (x12 over 11m)  persistentvolume-controller  no volume plugin matched
    Mounted By:  <none>
    

    最佳答案

    我已通过将StorageClass的供应者名称从kubernetes.io/aws-efs替换为aws-efs来解决了我的问题。

    正如我们在this issue comment发布的Github上的wongma7上看到的那样:



    这解决了ProvisioningFailedPersistentVolumeClaim上生成的事件上的persistentvolume-controller

    关于kubernetes - 如何为Kubernetes配置 'efs-provider'?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56910002/

    10-13 08:52