Как настроить «efs-провайдера» для Kubernetes? - PullRequest
0 голосов
/ 06 июля 2019

Я выполнил шаги из этого руководства этого руководства , чтобы развернуть efs-provider для Kubernetes и связать файловую систему EFS.Я не преуспел.

Я внедряю Kubernetes с Amazon EKS и использую экземпляры 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-provider работает без ошибок, и состояние PVC равно Pending.Что это может быть?Как я могу настроить efs-provider для использования файловой системы EFS?Сколько нужно ждать, чтобы получить PVC статус в Bound?


Обновление

Что касается конфигурации веб-сервисов Amazon, вот что я сделал:

  • После создания файловой системы 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 Logs

Выводкоманда 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!

StorageClass

Вывод команды 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 filesysИдентификатор tem, правильно настроенный для вашего efs-provisioner?

    • Да, оба (из фс и настроенного) совпадают.
  2. У вас есть надлежащие учетные данные IAM для доступа к этой EFS?

    • Да, у меня есть пользователь, а также инструмент eksctl настраивает его.
  3. Существует ли указанный EFS-путь для вашего провайдера?

    • Да, это только корневой (/) путь.
  4. Вы добавили конечную точку EFS в подсеть, в которой работают ваши рабочие узлы, или убедитесь, что к вашим подсетям EFS подключен интернет-шлюз?

    • Да, я добавил конечные точки EFS в подсеть, в которой работают мои рабочие узлы.
  5. Вы установили свою безопасностьразрешить входящий порт (ы) для NFS?

    • Да.

1 Ответ

2 голосов
/ 08 июля 2019

Я решил мою проблему, заменив имя провайдера моего StorageClass с kubernetes.io/aws-efs на aws-efs.

Как мы можем прочитать комментарий к этому вопросу на Github, опубликованный wongma7 :

Проблема в том, что инициатором является kubernetes.io/aws-efs. Не может начинаются с kubernetes.io, поскольку это зарезервировано kubernetes.

Это решает ProvisioningFailed на Событиях, произведенных на PersistentVolumeClaim с помощью persistentvolume-controller.

...