8

I have one own nginx configuration /home/ubuntu/workspace/web.conf generated by script. I prefer to have it under /etc/nginx/conf.d besides default.conf

Below is the nginx.yaml

apiVersion: v1
kind: Pod
metadata:
    name: nginx
spec:
    volumes:
      - name: webconf
        hostPath:
          path: /home/ubuntu/workspace/web.conf
    containers:
      - image:  nginx
        name: nginx
        ports:
          - containerPort: 18001
            protocol: TCP                               
        volumeMounts:
          - mountPath: /etc/nginx/conf.d/web.conf
            name: web

While it is mapped as folder only

$ kubectl create -f nginx.yaml
pod "nginx" created
$ kubectl exec -it nginx -- bash
root@nginx:/app# ls -al /etc/nginx/conf.d/
total 12
drwxr-xr-x 1 root root 4096 Aug  3 12:27 .
drwxr-xr-x 1 root root 4096 Aug  3 11:46 ..
-rw-r--r-- 2 root root 1093 Jul 11 13:06 default.conf
drwxr-xr-x 2 root root    0 Aug  3 11:46 web.conf

It works for docker container -v hostfile:containerfile.

How can I do this in kubernetes ?

BTW: I use minikube 0.21.0 on Ubuntu 16.04 LTS with kvm

1
  • volume names dont match web vs webconf Commented Apr 21, 2020 at 19:47

2 Answers 2

12

Try using the subPath key on your volumeMounts like this:

apiVersion: v1
kind: Pod
metadata:
  name: singlefile
spec:
  containers:
  - image: ubuntu
    name: singlefiletest
    command:
      - /bin/bash
      - -c
      - ls -la /singlefile/ && cat /singlefile/hosts
    volumeMounts:
    - mountPath: /singlefile/hosts
      name: etc
      subPath: hosts
  volumes:
  - name: etc
    hostPath:
      path: /etc

Example:

$ kubectl apply -f singlefile.yaml
pod "singlefile" created
$ kubectl logs singlefile
total 24
drwxr-xr-x. 2 root root 4096 Aug  3 12:50 .
drwxr-xr-x. 1 root root 4096 Aug  3 12:50 ..
-rw-r--r--. 1 root root 1213 Apr 26 21:25 hosts
# /etc/hosts: Local Host Database
#
# This file describes a number of aliases-to-address mappings for the for 
# local hosts that share this file.
...
Sign up to request clarification or add additional context in comments.

1 Comment

thank for quick response, it actually works without subPath
1

Actually it is caused by kvm which is used by minikube.

path: /home/ubuntu/workspace/web.conf

If I login to minikube, it is folder in vm.

$ ls -al /home/ubuntu/workspace # in minikube host
total 12
drwxrwxr-x 2 ubuntu ubuntu 4096 Aug  3 12:11 .
drwxrwxr-x 5 ubuntu ubuntu 4096 Aug  3 19:28 ..
-rw-rw-r-- 1 ubuntu ubuntu 1184 Aug  3 12:11 web.conf
$ minikube ssh
$ ls -al /home/ubuntu/workspace # in minikube vm
total 0
drwxr-xr-x 3 root root 0 Aug  3 19:41 .
drwxr-xr-x 4 root root 0 Aug  3 19:41 ..
drwxr-xr-x 2 root root 0 Aug  3 19:41 web.conf

I don't know exactly why kvm host folder sharing behalf like this.

Therefore instead I use minikube mount command, see host_folder_mount.md, then it works as expected.

1 Comment

Link is broken, do you mind to add the actual code here, if it's still available?

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.