k8s之使用statefulset部署FastDFs

      FastDFS是一个开源的分布式文件系统,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,解决了大容量存储和负载均衡的问题。特别适合以文件为载体的在线服务,如相册网站、视频网站等等。

      FastDFS服务端有两个角色:跟踪器(tracker)和存储节点(storage)。跟踪器主要做调度工作,在访问上起负载均衡的作用。

       

Statefulset简介:

        应用程序与用户、设备、其他应用程序或外部组件进行通信时,根据其是否需要记录前一次或多次通信中的相关信息以作为下一次通信的分类标准,可以将那些需要记录信息的应用程序称为有状态(stateful)应用,而无须记录的则称为无状态(stateless)应用。

        无状态意味着一个进程不必跟踪过去的交互操作,各个请求对于服务器来说统一无差别处理,请求自身携带了所有服务端所需要的所有参数(服务端自身不存储跟请求相关的任何数据,不包括数据库存储信息)本质上可以说它是一个纯粹的功能性行为。相应地,有状态则意味着进程存储了以前交互过程的记录,并且可以基于它对新的请求进行响应。至于状态信息被保存在内存中。

      由StatefulSet控制器创建的pod资源拥有固定、唯一的标识符和专用存储卷,即便重新调度或终止后重建,其名称也依然保持不变,且此前的存储卷及其数据不会丢失。

       使用statefulset部署的服务svc会有个“服务名-hs”,全称为headless Service也叫无头服务,对这 headless Service 并不会分配 Cluster IP,kube-proxy 不会处理它们,而且平台也不会为它们进行负载均衡和路由而是直接走 DNS 记录。

        Headless Services 应用场景

       第一种:自主选择权,有时候 client 想自己来决定使用哪个Real Server,可以通过查询DNS来获取 Real Server 的信息。

       第二种:Headless Service 的对应的每一个 Endpoints,即每一个Pod,都会有对应的DNS域名,这样Pod之间就可以互相访问。

Kem部署FastDFs:

       部署使用的是hostpath,所以需要先把配置文件放到对应的主机目录下,本次实例使用的目录为/apps/fdfs-conf,配置文件只需要修改storage.conf中的tracker地址,根据实例数进行配置。  

#部署需要注意事项,部署服务的时候使用的hostpath,并且已经给主机打上标签,所以pod只会部署在这几台主机上,tracker和storage部署在相同主机上。

tracker.yaml

appName: tracker
version: v2
notes: tracker
services:
  - version: v2
    name: tracker
    serviceMesh: 'false'
    serviceMeshType: istio
    type: StatefulSet
    updateStrategy: RollingUpdate
    describe: ''
    replica: '2'
    proxyMode: None
    hostNetwork: 'false'
    terminationGracePeriodSecond: '30'
    logCollect: false
    labels: {}
    hostAlias: []
    volumes:
      - name: tracker-persistent-storage
        path: /tracker
        type: hostPath
    servicePorts:
      - port: 22122
        targetPort: 22122
        name: http-c-0-p-0-auto
        protocol: TCP
    containers:
      - selectedImageName: fastdfs
        selectedImageVersion: '6.04'
        imagePullPolicy: Always
        containerPorts:
          - containerPort: 22122
            name: http-c-0-p-0
            protocol: TCP
        quotas_cpu: ''
        quotas_memory: ''
        request_cpu: ''
        request_memory: ''
        confmaps: []
        secrets: []
        volumes:
          - name: tracker-persistent-storage
            path: /var/fdfs/
            subPath: ''
            logCollect: false
            readOnly: 'false'
        envVariables:
          - name: TZ
            value: Asia/Shanghai
        command: []
        lifecyclePreStopCommand: []
    initContainers: []

storage.yaml

appName: storage
version: v2
notes: storage
services:
  - version: v2
    name: storage
    serviceMesh: 'false'
    serviceMeshType: istio
    type: StatefulSet
    updateStrategy: RollingUpdate
    describe: ''
    replica: '3'
    proxyMode: None
    hostNetwork: 'false'
    terminationGracePeriodSecond: '30'
    logCollect: false
    labels: {}
    hostAlias: []
    volumes:
      - name: storage-persistent-storage
        path: /storage
        type: hostPath
      - name: storage-conf
        path: /fdfs-conf
        type: hostPath
    servicePorts:
      - port: 23000
        targetPort: 23000
        name: http-c-0-p-0-auto
        protocol: TCP
      - port: 8888
        targetPort: 8888
        name: http-c-1-p-0
        protocol: TCP
    containers:
      - selectedImageName: fastdfs
        selectedImageVersion: '6.04'
        imagePullPolicy: Always
        containerPorts:
          - containerPort: 23000
            name: http-c-0-p-0
            protocol: TCP
        quotas_cpu: ''
        quotas_memory: ''
        request_cpu: ''
        request_memory: ''
        confmaps: []
        secrets: []
        volumes:
          - name: storage-persistent-storage
            path: /var/fdfs/
            subPath: ''
            logCollect: false
            readOnly: 'false'
          - name: storage-conf
            path: /etc/fdfs
            subPath: ''
            logCollect: false
            readOnly: 'false'
        envVariables:
          - name: TZ
            value: Asia/Shanghai
          - name: GROUP_NAME
            value: group1
        command:
          - /bin/sh
          - '-c'
          - /usr/bin/start.sh storage
        lifecyclePreStopCommand: []
      - selectedImageName: fastdfs-nginx
        selectedImageVersion: '6.04'
        imagePullPolicy: Always
        containerPorts:
          - containerPort: 8888
            name: http-c-1-p-0
            protocol: TCP
        quotas_cpu: ''
        quotas_memory: ''
        request_cpu: ''
        request_memory: ''
        confmaps: []
        secrets: []
        volumes:
          - name: storage-persistent-storage
            path: /var/fdfs/
            subPath: ''
            logCollect: false
            readOnly: 'false'
          - name: storage-conf
            path: /etc/fdfs
            subPath: ''
            logCollect: false
            readOnly: 'false'
        envVariables:
          - name: TZ
            value: Asia/Shanghai
        command: []
        lifecyclePreStopCommand: []
    initContainers: []

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以按照以下步骤来部署 FastDFS: 1. 下载 FastDFS Docker 镜像:`docker pull season/fastdfs` 2. 创建一个容器网络:`docker network create fastdfs` 3. 启动 FastDFS Tracker 服务器容器: ``` docker run -d --name tracker --net=fastdfs --ip 172.18.0.2 \ -v {local_path}/tracker:/fastdfs/tracker/storage \ -e TRACKER_PORT=22122 \ season/fastdfs sh tracker.sh ``` 其中: - `{local_path}` 是本地路径,需要将其替换为宿主机上的实际路径。 - `TRACKER_PORT` 是 Tracker 服务器的端口号,默认为 22122。 4. 启动 FastDFS Storage 服务器容器: ``` docker run -d --name storage --net=fastdfs --ip 172.18.0.3 \ -v {local_path}/storage:/fastdfs/storage/data \ -e TRACKER_SERVER=tracker:22122 \ -e GROUP_NAME=group1 \ -e STORAGE_PORT=23000 \ -e STORAGE_HTTP_PORT=8888 \ season/fastdfs sh storage.sh ``` 其中: - `{local_path}` 是本地路径,需要将其替换为宿主机上的实际路径。 - `TRACKER_SERVER` 是 Tracker 服务器地址和端口号,格式为 `ip:port` 或者 `hostname:port`。 - `GROUP_NAME` 是存储组的名称,默认为 `group1`。 - `STORAGE_PORT` 是 Storage 服务器的端口号,默认为 23000。 - `STORAGE_HTTP_PORT` 是 Storage 服务器的 HTTP 端口号,默认为 8888。 5. 在 FastDFS Web 界面中查看文件存储情况: 访问 `http://{ip}:8888/groupName`,其中 `{ip}` 是 Storage 服务器的 IP 地址,`groupName` 是存储组的名称。 以上就是部署 FastDFS 的基本步骤,需要注意的是,启动 Storage 服务器容器的时候需要指定 Tracker 服务器的地址和端口号,否则 Storage 服务器无法加入到 FastDFS 集群中。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值