не удается подключить том только для чтения в модуле kubernetes (с помощью драйвера EFS CSI в AWS EKS) - PullRequest
1 голос
/ 12 января 2020

Я установил EFS-драйвер EFS и получил Stati c Provisioning пример для работы: я смог запустить модуль, добавленный в файл на томе EFS. Я мог бы удалить модуль и запустить другой, чтобы проверить этот файл и подтвердить, что данные, записанные первым модулем, все еще были там. Но на самом деле мне нужно смонтировать том только для чтения, и мне там не повезло.

Обратите внимание, что после успешного запуска этого примера я запустил экземпляр EC2 и в нем смонтировал Затем в файловую систему EFS были добавлены данные, к которым мои модули должны обращаться только для чтения. Затем я размонтировал файловую систему EFS и завершил работу экземпляра.

Используя приведенную ниже конфигурацию, основанную на приведенном выше примере подготовки Stati c, мой модуль не запускается Running; он остается в ContainerCreating.

Класс хранения:

$ kubectl get sc efs-sc -o yaml
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  annotations:
    kubectl.kubernetes.io/last-applied-configuration: |
      {"apiVersion":"storage.k8s.io/v1","kind":"StorageClass","metadata":{"annotations":{},"name":"efs-sc"},"provisioner":"efs.csi.aws.com"}
  creationTimestamp: "2020-01-12T05:36:13Z"
  name: efs-sc
  resourceVersion: "809880"
  selfLink: /apis/storage.k8s.io/v1/storageclasses/efs-sc
  uid: 71ecce62-34fd-11ea-8a5f-124f4ee64e8d
provisioner: efs.csi.aws.com
reclaimPolicy: Delete
volumeBindingMode: Immediate

Постоянный том (это единственный PV в кластере, который использует класс хранения EFS):

$ kubectl get pv efs-pv-ro -o yaml
apiVersion: v1
kind: PersistentVolume
metadata:
  annotations:
    kubectl.kubernetes.io/last-applied-configuration: |
      {"apiVersion":"v1","kind":"PersistentVolume","metadata":{"annotations":{},"name":"efs-pv-ro"},"spec":{"accessModes":["ReadOnlyMany"],"capacity":{"storage":"5Gi"},"csi":{"driver":"efs.csi.aws.com","volumeHandle":"fs-26120da7"},"persistentVolumeReclaimPolicy":"Retain","storageClassName":"efs-sc","volumeMode":"Filesystem"}}
    pv.kubernetes.io/bound-by-controller: "yes"
  creationTimestamp: "2020-01-12T05:36:59Z"
  finalizers:
  - kubernetes.io/pv-protection
  name: efs-pv-ro
  resourceVersion: "810231"
  selfLink: /api/v1/persistentvolumes/efs-pv-ro
  uid: 8d54a80e-34fd-11ea-8a5f-124f4ee64e8d
spec:
  accessModes:
  - ReadOnlyMany
  capacity:
    storage: 5Gi
  claimRef:
    apiVersion: v1
    kind: PersistentVolumeClaim
    name: efs-claim-ro
    namespace: default
    resourceVersion: "810229"
    uid: e0498cae-34fd-11ea-8a5f-124f4ee64e8d
  csi:
    driver: efs.csi.aws.com
    volumeHandle: fs-26120da7
  persistentVolumeReclaimPolicy: Retain
  storageClassName: efs-sc
  volumeMode: Filesystem
status:
  phase: Bound

Persistent Volume Claim (это единственный PV C в кластере, пытающийся использовать класс хранения EFS:

$ kubectl get pvc efs-claim-ro -o yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  annotations:
    kubectl.kubernetes.io/last-applied-configuration: |
      {"apiVersion":"v1","kind":"PersistentVolumeClaim","metadata":{"annotations":{},"name":"efs-claim-ro","namespace":"default"},"spec":{"accessModes":["ReadOnlyMany"],"resources":{"requests":{"storage":"5Gi"}},"storageClassName":"efs-sc"}}
    pv.kubernetes.io/bind-completed: "yes"
    pv.kubernetes.io/bound-by-controller: "yes"
  creationTimestamp: "2020-01-12T05:39:18Z"
  finalizers:
  - kubernetes.io/pvc-protection
  name: efs-claim-ro
  namespace: default
  resourceVersion: "810234"
  selfLink: /api/v1/namespaces/default/persistentvolumeclaims/efs-claim-ro
  uid: e0498cae-34fd-11ea-8a5f-124f4ee64e8d
spec:
  accessModes:
  - ReadOnlyMany
  resources:
    requests:
      storage: 5Gi
  storageClassName: efs-sc
  volumeMode: Filesystem
  volumeName: efs-pv-ro
status:
  accessModes:
  - ReadOnlyMany
  capacity:
    storage: 5Gi
  phase: Bound

А вот Pod. Он остается в ContainerCreating и не переключиться на Running:

$ kubectl get pod efs-app -o yaml
apiVersion: v1
kind: Pod
metadata:
  annotations:
    kubectl.kubernetes.io/last-applied-configuration: |
      {"apiVersion":"v1","kind":"Pod","metadata":{"annotations":{},"name":"efs-app","namespace":"default"},"spec":{"containers":[{"args":["infinity"],"command":["sleep"],"image":"centos","name":"app","volumeMounts":[{"mountPath":"/data","name":"persistent-storage","subPath":"mmad"}]}],"volumes":[{"name":"persistent-storage","persistentVolumeClaim":{"claimName":"efs-claim-ro"}}]}}
    kubernetes.io/psp: eks.privileged
  creationTimestamp: "2020-01-12T06:07:08Z"
  name: efs-app
  namespace: default
  resourceVersion: "813420"
  selfLink: /api/v1/namespaces/default/pods/efs-app
  uid: c3b8421b-3501-11ea-b164-0a9483e894ed
spec:
  containers:
  - args:
    - infinity
    command:
    - sleep
    image: centos
    imagePullPolicy: Always
    name: app
    resources: {}
    terminationMessagePath: /dev/termination-log
    terminationMessagePolicy: File
    volumeMounts:
    - mountPath: /data
      name: persistent-storage
      subPath: mmad
    - mountPath: /var/run/secrets/kubernetes.io/serviceaccount
      name: default-token-z97dh
      readOnly: true
  dnsPolicy: ClusterFirst
  enableServiceLinks: true
  nodeName: ip-192-168-254-51.ec2.internal
  priority: 0
  restartPolicy: Always
  schedulerName: default-scheduler
  securityContext: {}
  serviceAccount: default
  serviceAccountName: default
  terminationGracePeriodSeconds: 30
  tolerations:
  - effect: NoExecute
    key: node.kubernetes.io/not-ready
    operator: Exists
    tolerationSeconds: 300
  - effect: NoExecute
    key: node.kubernetes.io/unreachable
    operator: Exists
    tolerationSeconds: 300
  volumes:
  - name: persistent-storage
    persistentVolumeClaim:
      claimName: efs-claim-ro
  - name: default-token-z97dh
    secret:
      defaultMode: 420
      secretName: default-token-z97dh
status:
  conditions:
  - lastProbeTime: null
    lastTransitionTime: "2020-01-12T06:07:08Z"
    status: "True"
    type: Initialized
  - lastProbeTime: null
    lastTransitionTime: "2020-01-12T06:07:08Z"
    message: 'containers with unready status: [app]'
    reason: ContainersNotReady
    status: "False"
    type: Ready
  - lastProbeTime: null
    lastTransitionTime: "2020-01-12T06:07:08Z"
    message: 'containers with unready status: [app]'
    reason: ContainersNotReady
    status: "False"
    type: ContainersReady
  - lastProbeTime: null
    lastTransitionTime: "2020-01-12T06:07:08Z"
    status: "True"
    type: PodScheduled
  containerStatuses:
  - image: centos
    imageID: ""
    lastState: {}
    name: app
    ready: false
    restartCount: 0
    state:
      waiting:
        reason: ContainerCreating
  hostIP: 192.168.254.51
  phase: Pending
  qosClass: BestEffort
  startTime: "2020-01-12T06:07:08Z"

Я не уверен, будет ли subPath работать с этой конфигурацией или нет, но такая же проблема возникает независимо от того, находится ли subPath в конфигурации Pod.

Проблема, похоже, связана с громкостью. Если я закомментирую раздел volumes и volumeMounts, модуль запускается.

Похоже, что PV C связан с правильный PV, но модуль не запускается. Я не вижу подсказки ни в одном из вышеприведенных выводов, но, возможно, я что-то упускаю?

Версия Kubernetes:

Client Version: version.Info{Major:"1", Minor:"14", GitVersion:"v1.14.8", GitCommit:"211047e9a1922595eaa3a1127ed365e9299a6c23", GitTreeState:"clean", BuildDate:"2019-10-15T12:11:03Z", GoVersion:"go1.12.10", Compiler:"gc", Platform:"darwin/amd64"}
Server Version: version.Info{Major:"1", Minor:"14+", GitVersion:"v1.14.9-eks-c0eccc", GitCommit:"c0eccca51d7500bb03b2f163dd8d534ffeb2f7a2", GitTreeState:"clean", BuildDate:"2019-12-22T23:14:11Z", GoVersion:"go1.12.12", Compiler:"gc", Platform:"linux/amd64"}

aws -efs-csi-версия драйвера: v.0.2.0.

1 Ответ

0 голосов
/ 22 января 2020

Обратите внимание, что одним из требований является установка Golang в версии 1.13.4 + , но у вас есть go1.12.12 . Таким образом, вы должны обновить его. Если вы обновляете старую версию Go, вы должны сначала удалить существующую версию. Посмотрите здесь: upgrade- golang.

Этот драйвер поддерживается в Kubernetes версии 1.14 и более поздних версиях кластеров Amazon EKS и рабочих узлов. Альфа-функции драйвера Amazon EFS CSI не поддерживаются в кластерах Amazon EKS. Не удается смонтировать том только для чтения в модуле kubernetes (с помощью драйвера EFS CSI в AWS EKS). Попробуйте изменить режим доступа на:

accessModes:
 - ReadWriteMany

Более подробную информацию можно найти здесь: efs-csi-driver .

Убедитесь, что при создании файловой системы EFS она доступен из кластера Kuberenetes. Этого можно достичь, создав файловую систему внутри того же VP C, что и кластер Kubernetes, или используя пиринг VP C.

Stati c инициализация - сначала необходимо вручную создать файловую систему EFS, а затем быть установленным внутри контейнера как постоянный объем (PV), используя драйвер. Параметры монтирования - параметры монтирования могут быть указаны в постоянном томе (PV), чтобы определить способ монтирования тома. Помимо обычных параметров монтирования, вы также можете указать tls в качестве опции монтирования для включения шифрования при передаче файловой системы EFS.

Поскольку Amazon EFS является файловой системой elasti c, она не применяет файловую систему. пределы мощности. Фактическое значение емкости хранилища в постоянных томах и утверждениях о постоянных томах не используется при создании файловой системы. Однако, поскольку емкость хранилища является обязательным полем в Kubernetes, необходимо указать допустимое значение, например, 5Gi в этом примере. Это значение не ограничивает размер вашей файловой системы Amazon EFS

...