Kubernetes - easy way to declaratively include a config file?

5/16/2018

Trying to copy over a nginx conf file for my pod to use (lives at <project>/nginx.conf). With Docker compose I'd simply do the following...

image: "nginx:alpine"
ports:
- "80:80"
volumes:
- ./nginx.conf:/etc/nginx/conf.d/default.conf

Best practice? Unsure as this is new-ish to me. It did seemingly work well. I'd like to accomplish the same with a kubernetes deployment but am not finding a straightforward way to do this declaratively. I came across a bit on ConfigMap, but was a little resistant when immediately met with the following...

Use the kubectl create configmap command to create configmaps from directories, files, or literal values

I don't want a lot of remember-these-commands-down-the-roads' scattered in text files and much prefer the file approach as shown with compose. Is this achievable? My spec so far looks as such...

spec:
  containers:
  - name: nginx
    image: nginx:alpine
    ports:
    - containerPort: 80
      name: http

Help me the get config in here?

-- scniro
containers
docker
kubernetes

1 Answer

5/16/2018

ConfigMaps are absolutely the way to go. You can create a configmap using a spec like the following:

apiVersion: v1
kind: ConfigMap
metadata:
  name: nginx
  namespace: default
data:
  nginx.conf: |-
     user www;
     worker_processes 5; 
     ...
     # all nginx.conf file contents goes here

Once you applied your configmap using kubectl, you can mount it in your container, by specifying the following in the PodSpec:

containers:
- name: ...
  ...
  volumeMounts:
  - name: nginx-volume
    mountPath: <path where you want to put nginx.conf>
volumes:
- name: nginx-volume
  configMap:
    name: nginx

Please note that the directory you will choose as a mount point for your nginx.conf file will contain only that file (hiding all other files already present in that directory), exactly as it happens when mounting a device on a non empty directory in linux.

A lot more details on configmaps here: https://kubernetes.io/docs/tasks/configure-pod-container/configure-pod-configmap/

-- whites11
Source: StackOverflow