k8s环境部署fstdfs单机
1、环境
k8s版本1.18.6
2、部署tracker服务
(1)tracker-statefulset.yaml
apiVersion: apps/v1 kind: StatefulSet metadata: labels: app: fastdfs-tracker #statefulset名为tracker创建的pod名以该名为基础按顺序为tacker-0 1 2 3... name: fastdfs-tracker namespace: uat-app spec: replicas: 1 selector: matchLabels: app: fastdfs-tracker #serviceName名为tracker不要与statefulset名混淆,pod的解析需要在pod名后加该名例如tracker-0.tracker.default即$pod名.$serviceName.$命名空间 serviceName: "fastdfs-tracker" template: metadata: labels: app: fastdfs-tracker spec: containers: - image: 172.16.43.156/app/fastdfs:1.2 name: fastdfs-tracker #容器启动命令本次为使用tracker command: ["/entrypoint.sh","tracker"] #track数据挂载在pvc上默认容器的数据目录为/var/fdfs volumeMounts: - name: tracker-data mountPath: /fastdfs/tracker/data #创建挂载pvc claimName对应名称需要与创建pvc配置文件的名称相同 volumeClaimTemplates: - metadata: name: tracker-data annotations: volume.beta.kubernetes.io/storage-class: "uat-nfs-storage" spec: accessModes: [ "ReadWriteMany" ] resources: requests: storage: 1Gi
(2)tracker-cluster-svc.yaml
apiVersion: v1 kind: Service metadata: labels: app: fastdfs-tracker name: fastdfs-tracker namespace: uat-app spec: ports: - port: 22122 protocol: TCP targetPort: 22122 clusterIP: None selector: app: fastdfs-tracker --- apiVersion: v1 kind: Service metadata: labels: app: fastdfs-tracker name: fastdfs-tracker-client namespace: uat-app spec: ports: - port: 22122 protocol: TCP targetPort: 22122 nodePort: 42122 selector: app: fastdfs-tracker type: NodePort
执行shell命令
kubectl apply -f tracker-statefulset.yaml
kubectl apply -f tracker-cluster-svc.yaml
2、部署storage、nginx服务
(1)mod_fastdfs.conf
#include http.conf connect_timeout=2 network_timeout=30 base_path=/tmp load_fdfs_parameters_from_tracker=true storage_sync_file_max_delay = 86400 use_storage_id = false storage_ids_filename = storage_ids.conf tracker_server=fastdfs-tracker-0.fastdfs-tracker.uat-app:22122 storage_server_port=23000 group_name=group1 url_have_group_name=true store_path_count=1 store_path0=/fastdfs/store_path log_level=info log_filename= response_mode=proxy if_alias_prefix= flv_support = true flv_extension = flv group_count = 0
(2)nginx.conf
worker_processes 1; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; # upstream fastdfs { # server fastdfs-storage-0.fastdfs-storage.uat-app:8888; # } server { listen 8888; server_name localhost; location /group1/M00 { root /fastdfs/store_path/data; # proxy_pass http://fastdfs; ngx_fastdfs_module; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } }
执行shell,创建cm
kubectl create cm fastdfs-nginx-config --from-file=nginx.conf -n uat-app kubectl create cm mod-fastdfs --from-file=mod_fastdfs.conf -n uat-app
(3)storage-statefulset.yaml
apiVersion: apps/v1 kind: StatefulSet metadata: labels: app: fastdfs-storage name: fastdfs-storage namespace: uat-app spec: replicas: 1 selector: matchLabels: app: fastdfs-storage serviceName: "fastdfs-storage" template: metadata: labels: app: fastdfs-storage spec: volumes: - name: fastdfs-nginx-config configMap: name: fastdfs-nginx-config - name: mod-fastdfs configMap: name: mod-fastdfs containers: - image: 172.16.43.156/app/fastdfs:1.2 name: fastdfs-storage #该容器启动为storage服务 command: ["/entrypoint.sh","storage"] # args: ["storage","nginx"] # - '/entrypoint.sh storage' # - '/entrypoint.sh nginx' env: #定义环境变量 - name: TRACKER_SERVER #tracker服务器地址及IP DNS解析地址为$pod名.$serviceName.$命名空间 value: fastdfs-tracker-0.fastdfs-tracker.uat-app:22122 #定义存储组名 - name: GROUP_NAME value: group1 volumeMounts: - name: storage-data mountPath: /fastdfs/storage/data subPath: data - name: storage-data mountPath: /fastdfs/store_path subPath: store - name: fastdfs-nginx image: 172.16.43.156/app/fastdfs:1.2 #该容器启动为storage服务 command: ["/entrypoint.sh","nginx"] env: #定义环境变量 - name: TRACKER_SERVER #tracker服务器地址及IP DNS解析地址为$pod名.$serviceName.$命名空间 value: fastdfs-tracker-0.fastdfs-tracker.uat-app:22122 #定义存储组名 # - name: GROUP_NAME # value: group1 volumeMounts: - name: storage-data mountPath: /fastdfs/store_path subPath: store - name: fastdfs-nginx-config mountPath: /etc/nginx/conf/nginx.conf subPath: nginx.conf - name: mod-fastdfs # mountPath: /etc/fdfs/mod_fastdfs.conf mountPath: /fdfs_conf/mod_fastdfs.conf subPath: mod_fastdfs.conf volumeClaimTemplates: - metadata: name: storage-data annotations: volume.beta.kubernetes.io/storage-class: "uat-nfs-storage" spec: accessModes: [ "ReadWriteMany" ] resources: requests: storage: 10Gi
(4) storage-cluster-svc.yaml
apiVersion: v1 kind: Service metadata: labels: app: fastdfs-storage name: fastdfs-storage namespace: uat-app spec: ports: - port: 23000 protocol: TCP targetPort: 23000 clusterIP: None selector: app: fastdfs-storage type: ClusterIP --- apiVersion: v1 kind: Service metadata: labels: app: fastdfs-nginx name: fastdfs-nginx namespace: uat-app spec: ports: - port: 8888 protocol: TCP targetPort: 8888 nodePort: 48888 selector: app: fastdfs-storage type: NodePort
执行shell脚本,创建storage
kubectl apply -f storage-statefulset.yaml
kubectl apply -f storage-cluster-svc.yaml
3、验证可用性
1、准备client.conf文件,进入容器并执行
cat << EOF > client.conf > connect_timeout=30 > network_timeout=60 > base_path=/fastdfs/tracker > tracker_server=fastdfs-tracker-0.fastdfs-tracker.uat-app:22122 > log_level=info > use_connection_pool = false > connection_pool_max_idle_time = 3600 > load_fdfs_parameters_from_tracker=false > use_storage_id = false > storage_ids_filename = storage_ids.conf > http.tracker_server_port=80 > EOF
2、上传文件测试
# echo testtestetsttets > 1.txt # fdfs_upload_file client.conf 1.txt group1/M00/00/00/CvQA4mJT-ROAG3tiAAAAEQsEHlw303.txt
3、浏览器访问
http://172.16.43.156:48888/group1/M00/00/00/CvQA4mJT-ROAG3tiAAAAEQsEHlw303.txt