2

我已按照本指南中的步骤为Kubernetes部署efs-provider绑定 EFS 文件系统。我没有成功。

我正在使用 Amazon EKS 实施 Kubernetes,并且我使用 EC2 实例作为工作节点,所有这些都使用eksctl.

在我应用这个调整后的清单文件后,结果是:

$ 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清单,其中包含指向 EFS 文件系统的所有变量。在StorageClass配置文件中将该spec.AccessModes字段指定为ReadWriteMany.

此时我的efs-providerpod 正在运行且没有错误,并且状态PVCPending. 会是什么?如何配置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

Pod 日志

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>

PersistentVolumeClaim

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>

关于问题

  1. 您是否正确配置了 EFS 文件系统 ID efs-provisioner

    • 是的,两者(来自 fs 和配置的)都匹配。
  2. 您是否具有访问此 EFS 的正确 IAM 凭证?

    • 是的,我的用户拥有并且该eksctl工具也对其进行了配置。
  3. 为您的供应商指定的 EFS 路径是否存在?

    • 是的,只是根 (/) 路径。
  4. 您是否将 EFS 端点添加到运行工作程序节点的子网,或者确保您的 EFS 子网连接了 Internet 网关?

    • 是的,我已将 EFS 端点添加到运行工作程序节点的子网中。
  5. 您是否将安全组设置为允许 NFS 端口的入站?

    • 是的。
4

1 回答 1

3

我通过将我的StorageClassfrom kubernetes.io/aws-efsto only的配置者名称替换为解决了我的问题aws-efs

正如我们在wongma7发布的 Github上的这个问题评论中看到的那样:

问题是供应商是kubernetes.io/aws-efs. 它不能kubernetes.io以 Kubernetes 保留的开头。

这解决ProvisioningFailed PersistentVolumeClaimpersistentvolume-controller.

于 2019-07-08T18:46:59.887 回答