首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >错误- pod失败时将s3fs与kubernetes一起使用时出现错误-“传输端点未连接”

错误- pod失败时将s3fs与kubernetes一起使用时出现错误-“传输端点未连接”
EN

Stack Overflow用户
提问于 2020-11-06 15:16:55
回答 2查看 895关注 0票数 1

我有一个EKS集群,其中有一个守护进程,它将s3存储桶挂载到所有pods。

每当出现问题或pod重新启动时,挂载卷就无法访问,并抛出以下错误。

代码语言:javascript
运行
复制
Transport endpoint is not connected

为了解决这个错误,我必须手动卸载卷并重新启动守护进程。

代码语言:javascript
运行
复制
umount /mnt/data-s3-fuse

这个问题的永久解决方案是什么?

我的守护进程文件

代码语言:javascript
运行
复制
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

我的pod yaml是

代码语言:javascript
运行
复制
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 fuse使用了以下代码。

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

EN

回答 2

Stack Overflow用户

发布于 2021-04-26 16:57:49

好了,我想我已经解决了。似乎有时pod会松开连接,导致"Transport not connected“。我发现解决这个问题的办法是添加一个初始化容器,它会尝试卸载之前的文件夹。这似乎解决了问题。请注意,您希望挂载更高级别的文件夹,因此您可以访问该节点。将让它运行,看看它是否会回来,它似乎已经修复了这里的问题一次:

代码语言:javascript
运行
复制
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
票数 0
EN

Stack Overflow用户

发布于 2021-06-24 19:59:54

对我来说,解决方案是在pod退出之前使用preStop钩子事件卸载路径:

代码语言:javascript
运行
复制
    containers:
      - name: aws-sync
        lifecycle:
          preStop:
            exec:
              command: ['bash', '-c', 'umount -l /mounted/path; true']
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64710309

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档