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: []

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐