Ошибка: конечная точка транспорта не подключена при использовании s3fs с kubernetes при сбое модуля

У меня есть кластер EKS, в котором есть один демон, который монтирует ведро s3 ко всем модулям.

Всякий раз, когда возникает какая-либо проблема или модуль перезапускается, том монтирования недоступен и выдает следующую ошибку.

Transport endpoint is not connected

Чтобы устранить эту ошибку, мне нужно вручную размонтировать том и перезапустить демон.

umount /mnt/data-s3-fuse

Что может быть постоянным решением этой проблемы?

Мой файл демона

apiVersion: extensions/v1beta1
kind: DaemonSet
metadata:
  labels:
    app: s3-provider
  name: s3-provider
  namespace: airflow
spec:
  template:
    metadata:
      labels:
        app: s3-provider
    spec:
      containers:
      - name: s3fuse
        image: image
        lifecycle:
          preStop:
            exec:
              command: ["/bin/sh","-c","umount -f /opt/airflow/dags"]
        securityContext:
          privileged: true
          capabilities:
            add:
            - SYS_ADMIN
        # use ALL  entries in the config map as environment variables
        envFrom:
        - configMapRef:
            name: s3-config
        volumeMounts:
        - name: devfuse
          mountPath: /dev/fuse
        - name: mntdatas3fs
          mountPath: /opt/airflow/dags:shared
      volumes:
      - name: devfuse
        hostPath:
          path: /dev/fuse
      - name: mntdatas3fs
        hostPath:
          path: /mnt/data-s3-fuse

и мой стручок yaml

apiVersion: v1
kind: Pod
metadata:
  name: test-pd
  namespace: airflow
spec:
  containers:
  - image: nginx
    name: s3-test-container
    securityContext:
      privileged: true
    volumeMounts:
    - name: mntdatas3fs
      mountPath: /opt/airflow/dags:shared
    livenessProbe:
      exec:
        command: ["ls", "/opt/airflow/dags"]
      failureThreshold: 3
      initialDelaySeconds: 10
      periodSeconds: 5
      successThreshold: 1
      timeoutSeconds: 1
  volumes:
  - name: mntdatas3fs
    hostPath:
      path: /mnt/data-s3-fuse

Я использую приведенный ниже код для предохранителя s3 kubernetes.

https://github.com/freegroup/kube-s3


person Lijo Abraham    schedule 06.11.2020    source источник
comment
s3fs работает? Конечная точка транспорта не подключена, предполагает непредвиденный выход. Вы можете получить некоторое представление, просмотрев журналы отладки через -f -d.   -  person Andrew Gaul    schedule 19.11.2020
comment
Получив ту же проблему, открыл ее на трекере здесь: github.com/freegroup/kube- s3/вопросы/10   -  person GuySoft    schedule 26.04.2021


Ответы (2)


Хорошо, я думаю, что решил это. Иногда кажется, что модуль теряет соединение, в результате чего транспорт не подключается. Обходной путь, который я нашел, чтобы исправить это, состоит в том, чтобы добавить контейнер инициализации, который пытается размонтировать папку раньше. Кажется, это решает проблему. Обратите внимание: вы хотите смонтировать папку более высокого уровня, чтобы у вас был доступ к узлу. Пусть он запустится и посмотрит, вернется ли он, похоже, проблема была исправлена ​​​​однажды здесь:

apiVersion: apps/v1
kind: DaemonSet
metadata:
  labels:
    app: s3-provider
  name: s3-provider
spec:
  selector:
    matchLabels:
      app: s3-provider
  template:
    metadata:
      labels:
        app: s3-provider
    spec:
      initContainers:
      - name: init-myservice
        image: bash
        command: ['bash', '-c', 'umount -l /mnt/data-s3-fs/root ; true']
        securityContext:
          privileged: true
          capabilities:
            add:
            - SYS_ADMIN
        # use ALL  entries in the config map as environment variables
        envFrom:
        - configMapRef:
            name: s3-config
        volumeMounts:
        - name: devfuse
          mountPath: /dev/fuse
        - name: mntdatas3fs-init
          mountPath: /mnt:shared
      containers:
      - name: s3fuse
        image: 963341077747.dkr.ecr.us-east-1.amazonaws.com/kube-s3:1.0
        imagePullPolicy: Always
        lifecycle:
          preStop:
            exec:
              command: ["bash", "-c", "umount -f /srv/s3-mount/root"]
        securityContext:
          privileged: true
          capabilities:
            add:
            - SYS_ADMIN
        # use ALL  entries in the config map as environment variables
        envFrom:
        - configMapRef:
            name: s3-config
        env:
        - name: S3_BUCKET
          value: s3-mount
        - name: MNT_POINT
          value: /srv/s3-mount/root
        - name: IAM_ROLE
          value: none
        volumeMounts:
        - name: devfuse
          mountPath: /dev/fuse
        - name: mntdatas3fs
          mountPath: /srv/s3-mount/root:shared
      volumes:
      - name: devfuse
        hostPath:
          path: /dev/fuse
      - name: mntdatas3fs
        hostPath:
          type: DirectoryOrCreate
          path: /mnt/data-s3-fs/root
      - name: mntdatas3fs-init
        hostPath:
          type: DirectoryOrCreate
          path: /mnt
person GuySoft    schedule 26.04.2021

Для меня решение состояло в том, чтобы иметь событие перехватчика preStop для размонтирования пути перед выходом модуля:

    containers:
      - name: aws-sync
        lifecycle:
          preStop:
            exec:
              command: ['bash', '-c', 'umount -l /mounted/path; true']
person John    schedule 24.06.2021