Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Docker 环境下,FastDFS Tracker 必须使用 Host 网络 #224

Open
thisisgpy opened this issue Aug 18, 2018 · 6 comments
Open

Docker 环境下,FastDFS Tracker 必须使用 Host 网络 #224

thisisgpy opened this issue Aug 18, 2018 · 6 comments

Comments

@thisisgpy
Copy link

制作了 FastDFS 镜像,里面包含 Tracker 和 Storage 以及 Nginx。启动 FastDFS 容器后,将其注册到和业务系统相同的网络上,业务系统无法使用 容器名称或容器 IP 连上 Tracker。只有将 FastDFS 容器设置为使用宿主机网络,然后让业务系统使用宿主机 IP 才能连上 Tracker。我参考了多个 dockerhub 上高 stars 的镜像,都是要求容器使用宿主机网络,请问这是为什么?

@v8v6
Copy link

v8v6 commented Aug 29, 2018

我也遇见一样的问题,请问您是这么解决的 谢谢

@jingjingxyk
Copy link

jingjingxyk commented Sep 25, 2018

使用服务名称访问即可

  • docker-compose , kubernetes 服务发发现 概念了解一下!
  • 需要跨主机需要考虑docker volume 共享卷数据持久化问题
  • Tracker 和 Storage 分开部署在不同的容器里.

配置里的例子

  • 比如下面 k8s 里如下配置里服务名是: fastdfs-tracker-service
  • 比如下面docker-compose配置的服务名分别是: fastdfs-tracker, fastdfs-storage-image

docker-compose 配置


version: "3.4"
services:
  fastdfs-tracker:
      image: registry.cn-hangzhou.aliyuncs.com/jingjingxyk/fastdfs:latest
      volumes:   #docker持久存储使用的是hostPath模式
        - /data/fastdfs-data/fdfs:/etc/fdfs:rw
        - /data/fastdfs-data/tracker:/www/tracker:rw
      networks:
        - default
        - app_net
      expose:
        - 22122
      command:
        - /bin/sh
        - -c
        - |
            /usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf && tail -f /dev/null

  fastdfs-storage-image:
    image: registry.cn-hangzhou.aliyuncs.com/jingjingxyk/fastdfs:latest
    volumes:
      - /data/fastdfs-data/fdfs:/etc/fdfs:rw
      - /data/fastdfs-image1:/www/fastdfs-image1:rw
    external_links:
      - fastdfs-tracker
    networks:
      - default
      - app_net
    expose:
      - 23003
    command:
      - /bin/sh
      - -c
      - |
          /usr/bin/fdfs_storaged /etc/fdfs/image-storage.conf && tail -f /dev/null

networks:
  app_net: #  手动创建网络
    external: true

@jingjingxyk
Copy link

jingjingxyk commented Sep 25, 2018

kubernetes nfs(提供持久化) fastdfs

要是改造一下fastdfs 和把配置文件放入ETCD 里,这样会更方便!
nfs 换成hostPath就会方便很多

k8s 里部署在fastdfs

注意: 这里缺少 服务依赖检查 和 服务可用性探测 (能跑起来,他们是不必要的)

fastdfs-tracker-nfs-pv

apiVersion: v1
kind: PersistentVolume
metadata:
  name: fastdfs-tracker-nfs-pv
  labels:
    pv: fastdfs-tracker-nfs-pv
spec:
  capacity:
    storage: 5Gi
  volumeMode: Filesystem
  accessModes:
  - ReadWriteMany
  persistentVolumeReclaimPolicy: Retain
  storageClassName: ""
  mountOptions:
  - soft
  - nfsvers=4.1
  nfs:
    server: 192.168.1.10
    path: "/data/jingjingxyk/fastdfs-data/"

fastdfs-tracker-nfs-pvc

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: fastdfs-tracker-nfs-pvc
spec:
  accessModes:
  - ReadWriteMany
  storageClassName: ""
  selector:
    matchLabels:
      pv: fastdfs-tracker-nfs-pv
  resources:
    requests:
      storage: 5Gi

fastdfs-tracker-service

kind: Service
apiVersion: v1
metadata:
  name: fastdfs-tracker-service
spec:
  selector:
    app: fastdfs-tracker-pod
  ports:
  - name: fastdfs-tracker
    protocol: TCP
    port: 22122
    targetPort: 22122
#  clusterIP: None

fastdfs-tracker-satefulset

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: fastdfs-tracker-satefulset
spec:
  selector:
    matchLabels:
      app: fastdfs-tracker-pod
  serviceName: "fastdfs-tracker-service"
  replicas: 1
  template:
    metadata:
      labels:
        app: fastdfs-tracker-pod
    spec:
      terminationGracePeriodSeconds: 10
      containers:
      -   name: fastdfs-tracker
          image: registry.cn-hangzhou.aliyuncs.com/jingjingxyk/fastdfs:latest
          ports:
          - containerPort: 22122
          command: #[ "echo", "SUCCESS" ]
          - /bin/sh
          - -c
          - |
            /usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf && tail -f /dev/null
          volumeMounts:
          - name: fastdfs-config
            mountPath: "/etc/fdfs"
          - name: fastdfs-data
            mountPath: "/www/"

      volumes: #卷配置
      - name: fastdfs-config
        persistentVolumeClaim:
          claimName: fastdfs-nfs-pvc
      - name: fastdfs-data
        persistentVolumeClaim:
          claimName: fastdfs-tracker-nfs-pvc

      imagePullSecrets:
      - name: jingjingxyk-docker-secret


fastdfs 导入 k8s 使用作为一个服务使用, 使用 Endpoints资源

kind: Endpoints
apiVersion: v1
metadata:
  name: fastdfs-tracker-endpoint
  namespace: default
subsets:
- addresses:
  - ip: 192.168.1.156 #fastdfs-tracker的ip
  ports:
  - port: Endpoints


@kostark
Copy link

kostark commented Oct 25, 2018

使用服务名称访问即可

  • docker-compose , kubernetes 服务发发现 概念了解一下!
  • 需要跨主机需要考虑docker volume 共享卷数据持久化问题
  • Tracker 和 Storage 分开部署在不同的容器里.

配置里的例子

  • 比如下面 k8s 里如下配置里服务名是: fastdfs-tracker-service
  • 比如下面docker-compose配置的服务名分别是: fastdfs-tracker, fastdfs-storage-image

docker-compose 配置


version: "3.4"
services:
  fastdfs-tracker:
      image: registry.cn-hangzhou.aliyuncs.com/jingjingxyk/fastdfs:latest
      volumes:   #docker持久存储使用的是hostPath模式
        - /data/fastdfs-data/fdfs:/etc/fdfs:rw
        - /data/fastdfs-data/tracker:/www/tracker:rw
      networks:
        - default
        - app_net
      expose:
        - 22122
      command:
        - /bin/sh
        - -c
        - |
            /usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf && tail -f /dev/null

  fastdfs-storage-image:
    image: registry.cn-hangzhou.aliyuncs.com/jingjingxyk/fastdfs:latest
    volumes:
      - /data/fastdfs-data/fdfs:/etc/fdfs:rw
      - /data/fastdfs-image1:/www/fastdfs-image1:rw
    external_links:
      - fastdfs-tracker
    networks:
      - default
      - app_net
    expose:
      - 23003
    command:
      - /bin/sh
      - -c
      - |
          /usr/bin/fdfs_storaged /etc/fdfs/image-storage.conf && tail -f /dev/null

networks:
  app_net: #  手动创建网络
    external: true

我试过自己创建网络的方式,但是只要不是 host 模式,容器内 ip 始终是 172 开头的。最终都将是同一个问题:宿主机不能访问 172 的节点。

@antimoth
Copy link

antimoth commented Nov 2, 2018

容器内获取到的是本机docker0的网段,跨机docker集群需要overlay网络来使各机的docker0网段连通。而host参数使用本机网络和路由,从而可以使用宿主机的网络连通。

@whithen
Copy link

whithen commented Nov 10, 2018

当storage和tracker在不同宿主机时,storage通过外网ip链接tracker,此时文件上传返回storage外网地址,无需使用host模式也可使用。
当storage和tracker在同宿主机时,必须使用host模式,否则文件上传返回storage内部地址,外部访问无法使用。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

6 participants