Adding a basic kubernetes example.

This commit is contained in:
Brandon Wulf 2018-04-11 13:43:23 -07:00
parent c231aa97a1
commit df9bc3886a
4 changed files with 301 additions and 0 deletions

View File

@ -108,6 +108,26 @@ Please also consider [the advice about running NetBox in production](#production
[k8s-secrets]: https://kubernetes.io/docs/concepts/configuration/secret/ [k8s-secrets]: https://kubernetes.io/docs/concepts/configuration/secret/
[k8s-config]: https://kubernetes.io/docs/tasks/configure-pod-container/configure-pod-configmap/ [k8s-config]: https://kubernetes.io/docs/tasks/configure-pod-container/configure-pod-configmap/
#### Example Kubernetes Deployment
Check out the project:
```
git clone https://github.com/ninech/netbox-docker.git
cd netbox-docker/kubernetes
```
Fill in the configuration parameters:
* In `netbox.yaml`,
* Set environment variables in the `netbox-netbox-env` ConfigMap and the `netbox-netbox-secrets` Secret. Secrets must be base64 encoded first (see the inline comments).
* Change the `DB_HOST` environment parameter to be the DNS name (from inside the cluster) for the postgres db. This probably just involves adding the namespace.
* Set the `storageClassName` if required in your cluster.
* In `postgres,yaml`, set the `POSTGRES_PASSWORD` to match `netbox.yaml`.
Deploy to kubernetes:
```
kubectl apply -f .
```
### NAPALM Configuration ### NAPALM Configuration
Since v2.1.0 NAPALM has been tightly integrated into NetBox. Since v2.1.0 NAPALM has been tightly integrated into NetBox.

115
kubernetes/netbox.yaml Normal file
View File

@ -0,0 +1,115 @@
---
apiVersion: v1
kind: ConfigMap
metadata:
name: netbox-netbox-env
data:
ALLOWED_HOSTS: '*'
DB_HOST: netbox-postgres.default.svc.cluster.local # default should be changed to deploymenent namespace
DB_NAME: netbox
DB_USER: netbox
EMAIL_FROM: netbox@bar.com
EMAIL_PORT: "25"
EMAIL_SERVER: localhost
EMAIL_TIMEOUT: "10"
EMAIL_USERNAME: foo
NETBOX_USERNAME: guest
SUPERUSER_EMAIL: admin@example.com
SUPERUSER_NAME: admin
NAPALM_USERNAME: rancid
NAPALM_TIMEOUT: '30'
---
apiVersion: v1
kind: Secret
metadata:
name: netbox-netbox-secrets
type: Opaque
data:
SUPERUSER_PASSWORD: YWRtaW4= # echo -n 'admin' | base64
SUPERUSER_API_TOKEN: MDEyZWU4NzY4OWFiY2RlZjAxMjM0NTY3ODlhYmNkZWYwMTIzNDU2Nw== # echo -n '012ee87689abcdef0123456789abcdef01234567' | base64
DB_PASSWORD: SjVickhyb2RqZHU0aWYwSw== # echo -n 'J5brHrodjdu4if0K' | base64
SECRET_KEY: cjhPd0QkJWohRkdjaQ== # echo -n 'r8OwD$%j!FGci' | base64
EMAIL_PASSWORD: YWRtaW4= # echo -n 'admin' | base64
NETBOX_PASSWORD: YWRtaW4= # echo -n 'admin' | base64
NAPALM_PASSWORD: YWRtaW4= # echo -n 'admin' | base64
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: netbox-static-files
labels:
pvcname: netbox-static-files
spec:
accessModes:
- ReadWriteMany
# storageClassName: gluster-storage # May neet to be removed/changed
resources:
requests:
storage: 100Mi
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: netbox
labels:
backend: netbox
app: netbox
spec:
replicas: 1
revisionHistoryLimit: 2
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 50%
maxUnavailable: 0
selector:
matchLabels:
backend: netbox
app: netbox
template:
metadata:
labels:
backend: netbox
app: netbox
spec:
containers:
- name: netbox
image: ninech/netbox:latest-ldap
ports:
- containerPort: 8001
envFrom:
- secretRef:
name: netbox-netbox-secrets
- configMapRef:
name: netbox-netbox-env
volumeMounts:
- name: netbox-nginx-config
mountPath: /etc/netbox-nginx/
- name: netbox-static-files
mountPath: /opt/netbox/netbox/static
restartPolicy: Always
dnsPolicy: ClusterFirst
volumes:
- name: netbox-nginx-config
configMap:
name: netbox-nginx-conf
- name: netbox-static-files
persistentVolumeClaim:
claimName: netbox-static-files
---
apiVersion: v1
kind: Service
metadata:
name: netbox
labels:
backend: netbox
app: netbox
spec:
ports:
- name: nbox
port: 8001
targetPort: 8001
selector:
app: netbox
backend: netbox

99
kubernetes/nginx.yaml Normal file
View File

@ -0,0 +1,99 @@
---
apiVersion: v1
kind: ConfigMap
metadata:
name: netbox-nginx-conf
data:
nginx.conf: |
worker_processes 1;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
sendfile on;
tcp_nopush on;
keepalive_timeout 65;
gzip on;
server_tokens off;
server {
listen 80;
server_name localhost;
access_log off;
location /static/ {
alias /opt/netbox/netbox/static/;
}
location / {
# default should be changed to deploymenent namespace
proxy_pass http://netbox.dev.svc.cluster.local:8001;
proxy_set_header X-Forwarded-Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
add_header P3P 'CP="ALL DSP COR PSAa PSDa OUR NOR ONL UNI COM NAV"';
}
}
}
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: netbox-nginx
labels:
frontend: nginx
app: netbox
spec:
replicas: 1
revisionHistoryLimit: 2
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 50%
maxUnavailable: 0
selector:
matchLabels:
frontend: nginx
app: netbox
template:
metadata:
labels:
frontend: nginx
app: netbox
spec:
containers:
- name: nginx
image: nginx:1.12-alpine
ports:
- containerPort: 80
command: ["nginx"]
args: ["-c", "/etc/netbox-nginx/nginx.conf","-g", "daemon off;"]
volumeMounts:
- name: netbox-static-files
mountPath: /opt/netbox/netbox/static
- name: netbox-nginx-config
mountPath: /etc/netbox-nginx
restartPolicy: Always
volumes:
- name: netbox-static-files
persistentVolumeClaim:
claimName: netbox-static-files
- name: netbox-nginx-config
configMap:
name: netbox-nginx-conf
---
apiVersion: v1
kind: Service
metadata:
name: netbox-nginx
labels:
frontend: nginx
app: netbox
spec:
type: ClusterIP
ports:
- name: "80"
port: 80
targetPort: 80
selector:
frontend: nginx

67
kubernetes/postgres.yaml Normal file
View File

@ -0,0 +1,67 @@
---
apiVersion: v1
kind: ConfigMap
metadata:
name: netbox-postgres-env
data:
POSTGRES_DB: netbox
POSTGRES_USER: netbox
---
apiVersion: v1
kind: Secret
metadata:
name: netbox-postgres-secrets
type: Opaque
data:
POSTGRES_PASSWORD: SjVickhyb2RqZHU0aWYwSw== # echo -n 'J5brHrodjdu4if0K' | base64
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: netbox-postgres
labels:
backend: postgres
app: netbox
spec:
replicas: 1
revisionHistoryLimit: 2
strategy:
type: Recreate
selector:
matchLabels:
backend: postgres
app: netbox
template:
metadata:
labels:
backend: postgres
app: netbox
spec:
restartPolicy: Always
containers:
- image: postgres:9.6-alpine
name: postgres
ports:
- containerPort: 5432
envFrom:
- secretRef:
name: netbox-postgres-secrets
- configMapRef:
name: netbox-postgres-env
---
apiVersion: v1
kind: Service
metadata:
name: netbox-postgres
labels:
backend: postgres
app: netbox
spec:
clusterIP: None
ports:
- name: headless
port: 5432
targetPort: 5432
selector:
backend: postgres
app: netbox