Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
sample Nginx configuration on Kubernetes using ConfigMap to configure nginx.
apiVersion: v1
kind: ConfigMap
metadata:
name: nginx-conf
data:
nginx.conf: |
user nginx;
worker_processes 3;
error_log /var/log/nginx/error.log;
events {
worker_connections 10240;
}
http {
log_format main
'remote_addr:$remote_addr\t'
'time_local:$time_local\t'
'method:$request_method\t'
'uri:$request_uri\t'
'host:$host\t'
'status:$status\t'
'bytes_sent:$body_bytes_sent\t'
'referer:$http_referer\t'
'useragent:$http_user_agent\t'
'forwardedfor:$http_x_forwarded_for\t'
'request_time:$request_time';
access_log /var/log/nginx/access.log main;
server {
listen 80;
server_name _;
location / {
root html;
index index.html index.htm;
}
}
include /etc/nginx/virtualhost/virtualhost.conf;
}
virtualhost.conf: |
upstream app {
server localhost:8080;
keepalive 1024;
}
server {
listen 80 default_server;
root /usr/local/app;
access_log /var/log/nginx/app.access_log main;
error_log /var/log/nginx/app.error_log;
location / {
proxy_pass http://app/;
proxy_http_version 1.1;
}
}
---
apiVersion: apps/v1beta1
kind: Deployment
metadata:
name: nginx
spec:
replicas: 1
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80
volumeMounts:
- mountPath: /etc/nginx # mount nginx-conf volumn to /etc/nginx
readOnly: true
name: nginx-conf
- mountPath: /var/log/nginx
name: log
volumes:
- name: nginx-conf
configMap:
name: nginx-conf # place ConfigMap `nginx-conf` on /etc/nginx
items:
- key: nginx.conf
path: nginx.conf
- key: virtualhost.conf
path: virtualhost/virtualhost.conf # dig directory
- name: log
emptyDir: {}
---
apiVersion: v1
kind: Service
metadata:
name: nginx
spec:
type: LoadBalancer
ports:
- port: 80
targetPort: 80
selector:
app: nginx
@Nj-kol

This comment has been minimized.

Copy link

@Nj-kol Nj-kol commented Feb 26, 2020

Not able to mount under /etc/nginx. Pod goes into CrashLoopBackOff. Permissions issue?

@vacar

This comment has been minimized.

Copy link

@vacar vacar commented Feb 28, 2020

@Nj-kol its mostly the permission issue but you check the logs of your nginx pod for more informations.

~$ kubectl get pods
~$ kubectl logs {POD_NAME}
or
~$ kubectl describe pod {POD_NAME}

@Nj-kol

This comment has been minimized.

Copy link

@Nj-kol Nj-kol commented Feb 28, 2020

@vacar Thanks for your reply, I was able to resolve the issue. The problem was not actually the mount, there was some config issue in nginx.conf which prevented nginx from starting up. Because by default, nginx write log under /var/log/nginx and not standard out, kubectl logs did not produce any output, hence rendering it very difficult to debug. Once I change nginx.conf to debug to standard out, things became clear

@therzv

This comment has been minimized.

Copy link

@therzv therzv commented Jul 29, 2020

i have some issue, all files under /etc/nginx is erased

@gmichaeljaison

This comment has been minimized.

Copy link

@gmichaeljaison gmichaeljaison commented Aug 14, 2020

i have some issue, all files under /etc/nginx is erased

Only mount specific file instead of entire directory.

          volumeMounts:
            - name: nginx-conf-volume
              mountPath: /etc/nginx/nginx.conf
              subPath: nginx.conf
              readOnly: true
@sravan-kumard

This comment has been minimized.

Copy link

@sravan-kumard sravan-kumard commented Oct 12, 2020

apiVersion: apps/v1beta1 deployment version should be changed to apiVersion: apps/v1

@rajibdas909

This comment has been minimized.

Copy link

@rajibdas909 rajibdas909 commented Dec 23, 2020

I need help to optimize the Nginx

  1. What should be the worker_Processes configuration? I thought it should be a number per core. So for example, if we are giving the 1000m CPU ( request ) to the POD, what should be worker_processes in this case - I think 1?
  2. Similarly what should be the memory request I should give that to Pod?
  3. What should be a number of worker_connections?

Thanks

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment