Add nginx.conf to Kubernetes cluster
You can create a ConfigMap object and then mount the values as files where you need them:
apiVersion: v1kind: ConfigMapmetadata: name: nginx-configdata: nginx.conf: | your config comes here like this other.conf: | second file contents
And in you pod spec:
spec: containers: - name: nginx image: nginx volumeMounts: - name: nginx-config mountPath: /etc/nginx/nginx.conf subPath: nginx.conf - name: other.conf mountPath: /etc/nginx/other.conf subPath: other.conf volumes: - name: nginx-config configMap: name: nginx-config
(Take note of the duplication of the filename in mountPath and using the exact same subPath; same as bind mounting files.)
For more information about ConfigMap see:https://kubernetes.io/docs/user-guide/configmap/
Note: A container using a ConfigMap as a subPath volume will not receive ConfigMap updates.
I haven't found a good way to escape the nginx configuration contents in the ConfigMap. The best recourse for me was to use ConfigMap creation using files
Save the following as ./data/nginx.conf
user nginx;worker_processes 1;error_log /var/log/nginx/error.log warn;pid /var/run/nginx.pid;events { worker_connections 1024;}http { include /etc/nginx/mime.types; default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; sendfile on; #tcp_nopush on; keepalive_timeout 65; #gzip on; include /etc/nginx/conf.d/*.conf;}
Now create the configMapkubectl create configmap confnginx --from-file=./data/nginx.conf
Save the following deployment and pod yaml as nginx.yaml
apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2kind: Deploymentmetadata: name: nginx labels: app: nginx spec: selector: matchLabels: app: nginx replicas: 1 # tells deployment to run 2 pods matching the template template: # create pods using pod definition in this template metadata: # unlike pod-nginx.yaml, the name is not included in the meta data as a unique name is # generated from the deployment name labels: app: nginx spec: containers: - name: nginx image: nginx:alpine ports: - containerPort: 80 volumeMounts: - name: nginx-config mountPath: /etc/nginx/nginx.conf subPath: nginx.conf volumes: - name: nginx-config configMap: name: confnginx
Now create it in k8kubectl apply -f nginx.yaml