在k8s中部署seaweedfs,上传文件到seaweedfs方法

在 Kubernetes 中部署 SeaweedFS 后,上传文件的方式取决于你部署的组件(如 Filer、S3 Gateway 等),以下是几种常用方法,可根据部署架构选择:

前提:确认 SeaweedFS 服务暴露方式

首先需确认 SeaweedFS 的核心服务(Filer 或 S3 Gateway)在 K8s 中是否已通过 Service 暴露(ClusterIP、NodePort、LoadBalancer 等),以便外部或集群内访问。

例如,若 Filer 部署为 StatefulSet,对应的 Service 可能类似:

bash 复制代码
kubectl get svc -n seaweedfs  # 假设部署在 seaweedfs 命名空间
# 输出可能包含:seaweedfs-filer   ClusterIP   10.96.xx.xx   <none>        8888/TCP   ...

方法 1:通过 Filer 的 HTTP API 上传(推荐)

SeaweedFS Filer 提供 HTTP 接口,支持直接上传文件,适合集群内 Pod 或外部通过 Service 访问。

步骤:
  1. 获取 Filer 访问地址

    • 集群内访问:直接使用 Service 域名 seaweedfs-filer.seaweedfs.svc.cluster.local:8888(格式:<service-name>.<namespace>.svc.cluster.local:<port>)。
    • 外部访问:若使用 NodePort,可通过 节点IP:NodePort 访问(如 192.168.xx.xx:30088,需提前在 Service 中配置 nodePort: 30088)。
  2. 上传文件(集群内/外均可)

    使用 curl 或工具调用 HTTP API:

    bash 复制代码
    # 示例:上传本地文件 test.txt 到 Filer 的 /data 目录下
    curl -X POST -F "file=@test.txt" "http://<filer-address>/data/"
    • 上传成功后,可通过 curl http://<filer-address>/data/test.txt 验证文件是否存在。

方法 2:通过 S3 Gateway 兼容接口上传

若部署了 SeaweedFS 的 S3 Gateway(兼容 AWS S3 API),可使用 s3cmdaws cli 等工具上传,适合习惯 S3 操作的场景。

步骤:
  1. 部署并暴露 S3 Gateway

    确保 S3 Gateway 已部署(通常作为 Deployment 或 StatefulSet),并通过 Service 暴露端口(默认 8333)。

  2. 配置 S3 客户端

    使用 aws cli 时,需先配置访问密钥(SeaweedFS 默认可用空密钥,或在 Filer 中配置):

    bash 复制代码
    aws configure --profile seaweedfs
    # 输入:
    # AWS Access Key ID: any (如 "AKIAEXAMPLE")
    # AWS Secret Access Key: any (如 "secret")
    # Default region name: us-east-1 (任意)
    # Default output format: json
  3. 上传文件

    bash 复制代码
    # 示例:上传 test.txt 到名为 "mybucket" 的桶(需先创建桶)
    aws --profile seaweedfs --endpoint-url http://<s3-gateway-address>:8333 s3 mb s3://mybucket
    aws --profile seaweedfs --endpoint-url http://<s3-gateway-address>:8333 s3 cp test.txt s3://mybucket/

方法 3:通过 FUSE 挂载到 Pod 中上传

在 K8s Pod 中通过 FUSE 挂载 SeaweedFS 目录,直接像操作本地文件一样上传,适合应用需要直接读写文件系统的场景。

步骤:
  1. 在 Pod 中部署 FUSE 客户端

    编写 Pod 配置(示例),通过 seaweedfs mount 命令挂载 Filer 目录:

    yaml 复制代码
    apiVersion: v1
    kind: Pod
    metadata:
      name: seaweedfs-fuse-demo
    spec:
      containers:
      - name: fuse-client
        image: chrislusf/seaweedfs:latest
        command: ["/bin/sh", "-c"]
        args:
          - |
            seaweedfs mount -filer=seaweedfs-filer.seaweedfs.svc.cluster.local:8888 /mnt/seaweed
            sleep infinity
        volumeMounts:
        - name: fuse-mount
          mountPath: /mnt/seaweed
      volumes:
      - name: fuse-mount
        emptyDir: {}

    (注意:需确保容器有 privileged 权限或 CAP_SYS_ADMIN 能力,否则 FUSE 挂载可能失败)

  2. 进入 Pod 上传文件

    bash 复制代码
    kubectl exec -it seaweedfs-fuse-demo -- /bin/sh
    # 在容器内执行:
    echo "hello seaweedfs" > /mnt/seaweed/test.txt  # 直接写入文件

方法 4:通过 Kubernetes 存储卷(PV/PVC)上传

若已通过 SeaweedFS CSI 驱动创建了 PV/PVC,可将卷挂载到 Pod 中,直接在 Pod 内读写文件(文件会自动存储到 SeaweedFS)。

步骤:
  1. 创建 PVC(使用 SeaweedFS 的 StorageClass)

    yaml 复制代码
    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: seaweedfs-pvc
    spec:
      accessModes:
      - ReadWriteOnce
      storageClassName: seaweedfs-storage  # 对应 SeaweedFS 的 StorageClass
      resources:
        requests:
          storage: 1Gi
  2. 部署 Pod 挂载 PVC

    yaml 复制代码
    apiVersion: v1
    kind: Pod
    metadata:
      name: seaweedfs-pvc-demo
    spec:
      containers:
      - name: app
        image: busybox
        command: ["sleep", "infinity"]
        volumeMounts:
        - name: seaweedfs-volume
          mountPath: /data
      volumes:
      - name: seaweedfs-volume
        persistentVolumeClaim:
          claimName: seaweedfs-pvc
  3. 进入 Pod 上传文件

    bash 复制代码
    kubectl exec -it seaweedfs-pvc-demo -- /bin/sh
    echo "data from pvc" > /data/file.txt  # 写入的文件会存储到 SeaweedFS

验证文件是否上传成功

  • 通过 Filer 接口查看:curl http://<filer-address>/dir/ls?path=/data(列出 /data 目录下的文件)。
  • 通过 S3 客户端查看:aws --endpoint-url <s3-address> s3 ls s3://mybucket
  • 在 FUSE 或 PVC 挂载的 Pod 中直接查看文件。

根据你的使用场景选择合适的方式:简单测试用 HTTP API兼容 S3 生态用 S3 Gateway应用直接读写用 FUSE 或 PVC 挂载。如果需要具体部署 YAML 或客户端配置细节,可以告诉我,我会进一步补充。

相关推荐
栗子~~2 小时前
shell-基于k8s/docker管理容器、监控模型训练所消耗的最大CPU与最大内存脚本
docker·容器·kubernetes
半梦半醒*2 小时前
k8s——pod详解2
linux·运维·docker·容器·kubernetes·负载均衡
AAA小肥杨2 小时前
K8s从Docker到Containerd的迁移全流程实践
docker·容器·kubernetes
DARLING Zero two♡2 小时前
云原生基石的试金石:基于 openEuler 部署 Docker 与 Nginx 的全景实录
nginx·docker·云原生
阿里云云原生2 小时前
云效「AI 智能评审」,先锋体验官招募活动正式启动,赢取极客专属好礼!
云原生
小猪咪piggy2 小时前
【微服务】(3) 服务注册与发现
微服务·云原生·架构
容器魔方4 小时前
KCD 杭州站 x OpenInfra Days China首次联手!华为云云原生团队与您共探Karmada多模板工作负载多集
云原生·容器·云计算
xx.ii5 小时前
k8s:pod-1
云原生·容器·kubernetes
weixin_307779135 小时前
利用 AWS Lambda 与 EventBridge 优化低频 Java 作业的云计算成本
java·开发语言·云原生·云计算·aws