
FastDFS是一个开源的轻量级分布式文件系统,由跟踪服务器(tracker server)、存储服务器(storage server)和客户端(client)三个部分组成,主要解决了海量数据存储问题,特别适合以中小文件(建议范围:4KB < file_size <500MB)为载体的在线服务。
1. 创建命名空间
cat fastdfs.yaml
---
apiVersion: v1
kind: Namespace
metadata:
# 创建命名空间的名
name: fastdfs
labels:
name: fastdfs
# kubectl apply -f fastdfs.yaml
2. 给fastdfs分配持久存储卷并且分配存储卷大小。
# cat fastdfs-pvc.yaml
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: fastdfs-pvc
namespace: fastdfs
spec:
accessModes:
- ReadWriteMany
storageClassName: jyy-cephfs-sc
resources:
requests:
storage: 2Gi
# kubectl apply -f fastdfs-pvc.yaml
三、fastdfs部署分为两部分,一个是tracker一个是storage,下面我们先部署tracker
1. 创建tracker deployment以及创建tracker-service
# cat tracker.yaml
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
namespace: fastdfs
labels:
app: tracker
#statefulset名为tracker创建的pod名以该名为基础按顺序为tacker-0 1 2 3...
name: tracker
spec:
replicas: 1
selector:
matchLabels:
app: tracker
#serviceName名为tracker不要与statefulset名混淆,pod的解析需要在pod名后加该名例如tracker-0.tracker.default即$pod名.$serviceName.$命名空间
serviceName: "tracker"
template:
metadata:
labels:
app: tracker
spec:
containers:
- image: jinyuyun.top/fastdfs:v6
name: fastdfs
#容器启动命令本次为使用tracker
command: ["/bin/bash", "/usr/bin/start.sh","tracker"]
volumeMounts:
- name: tracker-oss-pvc
#mountPath: "/dfsfile"
mountPath: /dfsfile
subPath: dfsfile
volumes:
- name: tracker-oss-pvc
persistentVolumeClaim:
claimName: fastdfs-pvc
---
apiVersion: v1
kind: Service
metadata:
namespace: fastdfs
labels:
app: tracker
name: tracker
spec:
ports:
- port: 22122
protocol: TCP
targetPort: 22122
clusterIP: None
selector:
app: tracker
---
# kubectl apply -f tracker.yaml
2. 创建storage deployment以及创建storage-service
# cat storage.yaml
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
namespace: fastdfs
labels:
app: storage
name: storage
spec:
replicas: 1
selector:
matchLabels:
app: storage
serviceName: "storage"
template:
metadata:
labels:
app: storage
spec:
containers:
- image: jinyuyun.top/fastdfs:v6
name: fastdfs
#该容器启动为storage服务
command: ["/bin/bash", "/usr/bin/start.sh","storage"]
env:
#定义环境变量
- name: TRACKER_SERVER
#tracker服务器地址及IP DNS解析地址为$pod名.$serviceName.$命名空间
value: tracker-0.tracker.fastdfs:22122
#定义存储组名
- name: GROUP_NAME
value: group1
volumeMounts:
- name: storage-oss-pvc
mountPath: /dfsfile
subPath: dfsfile
#- name: storage-oss-pvc
#mountPath: /etc/fdfs
#subPath: fdfs
volumes:
- name: storage-oss-pvc
persistentVolumeClaim:
claimName: fastdfs-pvc
---
apiVersion: v1
kind: Service
metadata:
namespace: fastdfs
labels:
app: storage
name: storage
spec:
ports:
- port: 23000
name: storage # 指定端口的名称
protocol: TCP
targetPort: 23000
- port: 80
name: nginx # 指定端口的名称
protocol: TCP
targetPort: 80
clusterIP: None
selector:
app: storage
type: ClusterIP
---
# kubectl apply -f storage.yaml
4. 查看deployment和pod部署状态
[root@master fastdfs]# kubectl get pod -n fastdfs NAME READY STATUS RESTARTS AGE storage-0 1/1 Running 4 5h38m tracker-0 1/1 Running 0 5h56m
5. 创建Ingress服务在外部访问
# cat fastdfs-ingress.yaml
---
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: fastdfs-nginx
namespace: fastdfs #命名空间 接下来的部署都会使用这个命名空间
spec:
rules:
- host: jyy.ldky.com #外部访问的域名
http:
paths:
- path: /group1
backend:
serviceName: storage #服务对应的service名称
servicePort: 80 #对应service的端口
# kubectl apply -f fastdfs-ingress.yaml
# 查看fastdfs-ingress部署状态
[root@master fastdfs]# kubectl get ingress -n fastdfs
Warning: extensions/v1beta1 Ingress is deprecated in v1.14+, unavailable in v1.22+; use networking.k8s.io/v1 Ingress
NAME CLASS HOSTS ADDRESS PORTS AGE
fastdfs-nginx jyy.ldky.xyz 10.106.253.180 80 6h12m
四、fastdfs上传文件以及测试
1. 进入storage-0查看服务运行。命令:kubectl exec -it storage-0 -n kgf-dev /bin/sh
[root@master fastdfs]# kubectl exec -it storage-0 -n fastdfs /bin/sh kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead. sh-4.2# ps -ef UID PID PPID C STIME TTY TIME CMD root 1 0 0 02:49 ? 00:00:00 /bin/bash /usr/bin/start.sh storage root 14 1 0 02:49 ? 00:00:05 fdfs_storaged /etc/fdfs/storage.conf start root 18 1 0 02:49 ? 00:00:00 nginx: master process /usr/local/nginx/sbin/nginx root 21 1 0 02:49 ? 00:00:04 /bin/bash /usr/bin/start.sh storage root 23 1 0 02:49 ? 00:00:00 tail -f /var/fdfs/logs/storaged.log root 46 0 0 02:50 pts/0 00:00:00 /bin/sh nobody 398 18 0 03:01 ? 00:00:00 nginx: worker process nobody 399 18 0 03:01 ? 00:00:00 nginx: worker process root 10292 0 0 08:31 pts/1 00:00:00 /bin/sh root 10303 21 0 08:31 ? 00:00:00 sleep 10 root 10304 10292 0 08:31 pts/1 00:00:00 ps -ef
2. 查看storage是否和tracker通信。 命令:fdfs_monitor /etc/fdfs/storage.conf
3. 测试文件上传
sh-4.2# echo 20200926 > today.txt sh-4.2# cat today.txt 20200926 sh-4.2# fdfs_upload_file /etc/fdfs/client.conf today.txt group1/M00/00/00/ZELRyGFP4OeARNO8AAAACfH9icw880.txt sh-4.2# curl 127.0.0.1/group1/M00/00/00/ZELRyGFP4OeARNO8AAAACfH9icw880.txt 20210926
4.访问刚刚上传的文件
5. 参考
GitHub happyfish100/fastdfs
nginx官方包
k8s部署fastdfs