I have an application that relies on 4 docker data containers for the data it needs to run some tests. At the moment I have their docker-compose file and their images but I don't have access to the data containers Dockerfile or actual data.
How this application works in docker-compose is as below: The application is called rtsp_server
and it loads different volumes from the data containers such as st-andries4
(I just wrote one of them).
This is their docker-compose:
# The application
rtsp_server:
image: rtsp_server_image
volumes_from:
- rtsp_data_st_andries4:ro
ports:
- "8554:8554"
command: python ./rtsp-server.py /rtsp_data/st-andries-4 st_andries_4
# Data container
rtsp_data_st_andries4:
image: st_andries_4:1
volumes:
- /rtsp_data/st-andries-4
command: /bin/true
mem_limit: 10000000000
I already brought the application, rtsp_server
, to Kubernetes and it works fine but I need to also bring the data containers to k8s but I don't know how to do it.
I'm not exactly sure if you want to create a Persistent Volume on Kubernetes or move date from existing Docker data containers.
Here is a Kubernetes documentation on how to Configure a Pod to Use a PersistentVolume for Storage.
First you should create a PersistentVolume
:
apiVersion: v1
kind: PersistentVolume
metadata:
name: task-pv-volume
labels:
type: local
spec:
storageClassName: manual
capacity:
storage: 10Gi
accessModes:
- ReadWriteOnce
hostPath:
path: "/mnt/data"
Then PersistentVolumeClaim
because this is was pod
uses to request physical storage.
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: task-pv-claim
spec:
storageClassName: manual
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 3Gi
And finally you can add a volumeMounts
inside your pod that might look like the following:
apiVersion: v1
kind: Pod
metadata:
name: task-pv-pod
spec:
volumes:
- name: task-pv-storage
persistentVolumeClaim:
claimName: task-pv-claim
containers:
- name: task-pv-container
image: nginx
ports:
- containerPort: 80
name: "http-server"
volumeMounts:
- mountPath: "/usr/share/nginx/html"
name: task-pv-storage
Update
To share PVC between many pods you would have to set up:
spec:
accessModes:
- ReadWriteMany
I would also recommend checking this blog Create ReadWriteMany PersistentVolumeClaims on your Kubernetes Cluster and choosing which solution fits your needs.
You might be also interested in project Rook which is Open-Source, Cloud-Native Storage for Kubernetes.