How to mounts a directory from container into the host

10/9/2021

I create a deployment yaml for a microservice. I am using hostpath volume type for persistentVolume and I have to copy data to a path in host. But I want to mount a directory from container into the host because data is in the container and I need this data in host.

My deployment yaml:

#create persistent volume
---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv-vol
spec:
  storageClassName: manual
  capacity:
    storage: 10Gi
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: /opt/storage/app

#create persistent volume clame
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: app-pv-claim
spec:
  storageClassName: manual
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 10Gi
#create Deployment
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: app-deployment
spec:
  replicas: 1
  selector:
    matchLabels:
      deploy: app
  template:
    metadata:
      labels:
        deploy: app
    spec:
      hostname: app
      hostNetwork: false
      containers:
        - name: app
          image: 192.168.10.10:2021/project/app:latest
          volumeMounts:
            - mountPath: /opt/app
              name: project-volume
      volumes:
        - name: project-volume
          persistentVolumeClaim:
            claimName: app-pv-claim
-- Jcyber1
deployment
kubernetes
persistent-volume-claims
persistent-volumes

1 Answer

11/4/2021

Due to information gaps, I am writing a general answer.

First of all you should know:

HostPath volumes present many security risks, and it is a best practice to avoid the use of HostPaths when possible. When a HostPath volume must be used, it should be scoped to only the required file or directory, and mounted as ReadOnly.

But the use of hostPath also offers a powerful escape hatch for some applications.

If you still want to use it, firstly you should check if both pods (the one that created the data and the second one that want to access the data) are on the same node. The following command will show you that.

kubectl get pods -o wide 

All data created by any of pods should stay in hostPath directory and be available for every pod as long as they are running on the same node.

See also this documentation about hostPath.

-- kkopczak
Source: StackOverflow