How to bring a docker data container to Kubernetes?

10/14/2019

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.

-- AVarf
docker
docker-compose
kubernetes

1 Answer

10/14/2019

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.

-- Crou
Source: StackOverflow