From 72338f15069fb5669573486d40407dab3a6eaade Mon Sep 17 00:00:00 2001
From: Steffen Vogel <post@steffenvogel.de>
Date: Sat, 28 Sep 2019 23:52:20 +0200
Subject: [PATCH] add kubernetes yaml files

---
 .gitignore                                    |  3 +-
 docker-compose.yml                            |  4 +-
 kubernetes/Makefile                           | 20 +++++++
 kubernetes/backend-deployment.yaml            | 41 +++++++++++++
 .../backend-files-persistentvolumeclaim.yaml  | 12 ++++
 kubernetes/broker-deployment.yaml             | 30 ++++++++++
 kubernetes/broker-service.yaml                | 21 +++++++
 kubernetes/controller-deployment.yaml         | 29 ++++++++++
 kubernetes/database-deployment.yaml           | 22 +++++++
 .../database-persistentvolumeclaim.yaml       | 12 ++++
 kubernetes/frontend-deployment.yaml           | 21 +++++++
 kubernetes/mongo-express-deployment.yaml      | 30 ++++++++++
 .../nginx-claim0-persistentvolumeclaim.yaml   | 12 ++++
 kubernetes/nginx-deployment.yaml              | 30 ++++++++++
 kubernetes/nginx-ingress.yaml                 |  0
 kubernetes/nginx-service.yaml                 | 12 ++++
 .../node-data-persistentvolumeclaim.yaml      | 12 ++++
 kubernetes/node-deployment.yaml               | 58 +++++++++++++++++++
 kubernetes/node-service.yaml                  | 57 ++++++++++++++++++
 kubernetes/relay-deployment.yaml              | 23 ++++++++
 20 files changed, 445 insertions(+), 4 deletions(-)
 create mode 100644 kubernetes/Makefile
 create mode 100644 kubernetes/backend-deployment.yaml
 create mode 100644 kubernetes/backend-files-persistentvolumeclaim.yaml
 create mode 100644 kubernetes/broker-deployment.yaml
 create mode 100644 kubernetes/broker-service.yaml
 create mode 100644 kubernetes/controller-deployment.yaml
 create mode 100644 kubernetes/database-deployment.yaml
 create mode 100644 kubernetes/database-persistentvolumeclaim.yaml
 create mode 100644 kubernetes/frontend-deployment.yaml
 create mode 100644 kubernetes/mongo-express-deployment.yaml
 create mode 100644 kubernetes/nginx-claim0-persistentvolumeclaim.yaml
 create mode 100644 kubernetes/nginx-deployment.yaml
 create mode 100644 kubernetes/nginx-ingress.yaml
 create mode 100644 kubernetes/nginx-service.yaml
 create mode 100644 kubernetes/node-data-persistentvolumeclaim.yaml
 create mode 100644 kubernetes/node-deployment.yaml
 create mode 100644 kubernetes/node-service.yaml
 create mode 100644 kubernetes/relay-deployment.yaml

diff --git a/.gitignore b/.gitignore
index dcc0a31..9b1b243 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1 +1,2 @@
-backup/
\ No newline at end of file
+backup/
+etc/node/others/
diff --git a/docker-compose.yml b/docker-compose.yml
index eb3a2bd..daa4094 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -1,4 +1,4 @@
-version: "2.1"
+version: "3.2"
 
 volumes:
   database:
@@ -48,10 +48,8 @@ services:
   # The MongoDB database for the VILLASweb backend
   database:
     image: mongo:latest
-    user: mongodb
     volumes:
       - database:/data/db
-    user: mongodb
     restart: always
 
   # VILLASnode, the gateway between UDP and WebSocket traffic
diff --git a/kubernetes/Makefile b/kubernetes/Makefile
new file mode 100644
index 0000000..d8c118b
--- /dev/null
+++ b/kubernetes/Makefile
@@ -0,0 +1,20 @@
+NAMESPACE=villas
+
+KUBECTL=kubectl -n $(NAMESPACE)
+
+APPLY=--dry-run -o yaml | $(KUBECTL) apply -f -
+
+deploy: config-maps secrets
+	$(KUBECTL) apply -f .
+
+namespace:
+	$(KUBECTL) create namespace villas $(APPLY)
+
+config-maps:
+	$(KUBECTL) create configmap nginx-config --from-file=../etc/nginx/ $(APPLY)
+	$(KUBECTL) create configmap node-config --from-file=../etc/node/ $(APPLY)
+	$(KUBECTL) create configmap controller-config --from-file=../etc/controller/ $(APPLY)
+
+secrets:
+
+.PHONY: deploy config-maps secrets
diff --git a/kubernetes/backend-deployment.yaml b/kubernetes/backend-deployment.yaml
new file mode 100644
index 0000000..97b663f
--- /dev/null
+++ b/kubernetes/backend-deployment.yaml
@@ -0,0 +1,41 @@
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+  labels:
+    app.kubernetes.io/component: backend
+    app.kubernetes.io/part-of: villas-web
+  name: backend
+spec:
+  selector:
+    matchLabels:
+      app.kubernetes.io/component: backend
+      app.kubernetes.io/part-of: villas-web
+  template:
+    metadata:
+      labels:
+        app.kubernetes.io/component: backend
+        app.kubernetes.io/part-of: villas-web
+    spec:
+      containers:
+      - env:
+        - name: AMQP_ENDPOINT
+          value: amqp://villas:s3c0sim4!@broker/%2F
+        - name: DATABASE_URL
+          value: mongodb://database:27017/
+        - name: DEFAULT_ADMIN
+          value: "true"
+        - name: LOG_FILE
+          value: villasweb-backend_log.txt
+        - name: LOG_LEVEL
+          value: info
+        - name: NODE_ENV
+          value: dotenv
+        image: villas/web-backend
+        name: backend
+        volumeMounts:
+        - mountPath: /usr/src/app/public/
+          name: files
+      volumes:
+      - name: files
+        persistentVolumeClaim:
+          claimName: backend-files
diff --git a/kubernetes/backend-files-persistentvolumeclaim.yaml b/kubernetes/backend-files-persistentvolumeclaim.yaml
new file mode 100644
index 0000000..cedeb84
--- /dev/null
+++ b/kubernetes/backend-files-persistentvolumeclaim.yaml
@@ -0,0 +1,12 @@
+apiVersion: v1
+kind: PersistentVolumeClaim
+metadata:
+  labels:
+    app.kubernetes.io/component: files
+  name: backend-files
+spec:
+  accessModes:
+  - ReadWriteOnce
+  resources:
+    requests:
+      storage: 100Mi
diff --git a/kubernetes/broker-deployment.yaml b/kubernetes/broker-deployment.yaml
new file mode 100644
index 0000000..4a4f99e
--- /dev/null
+++ b/kubernetes/broker-deployment.yaml
@@ -0,0 +1,30 @@
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+  labels:
+    app.kubernetes.io/component: broker
+    app.kubernetes.io/part-of: villas-controller
+  name: broker
+spec:
+  selector:
+    matchLabels:
+      app.kubernetes.io/component: broker
+      app.kubernetes.io/part-of: villas-controller
+  template:
+    metadata:
+      labels:
+        app.kubernetes.io/component: broker
+        app.kubernetes.io/part-of: villas-controller
+    spec:
+      containers:
+      - env:
+        - name: RABBITMQ_DEFAULT_PASS
+          value: s3c0sim4!
+        - name: RABBITMQ_DEFAULT_USER
+          value: villas
+        image: broker
+        name: broker
+        ports:
+        - containerPort: 15672
+        - containerPort: 5672
+        - containerPort: 1883
diff --git a/kubernetes/broker-service.yaml b/kubernetes/broker-service.yaml
new file mode 100644
index 0000000..714b146
--- /dev/null
+++ b/kubernetes/broker-service.yaml
@@ -0,0 +1,21 @@
+apiVersion: v1
+kind: Service
+metadata:
+  labels:
+    app.kubernetes.io/component: broker
+    app.kubernetes.io/part-of: villas-controller
+  name: broker
+spec:
+  ports:
+  - name: "web"
+    port: 8083
+    targetPort: 15672
+  - name: "amqp"
+    port: 5672
+    targetPort: 5672
+  - name: "mqtt"
+    port: 1883
+    targetPort: 1883
+  selector:
+    app.kubernetes.io/component: broker
+    app.kubernetes.io/part-of: villas-controller
diff --git a/kubernetes/controller-deployment.yaml b/kubernetes/controller-deployment.yaml
new file mode 100644
index 0000000..6ba77ee
--- /dev/null
+++ b/kubernetes/controller-deployment.yaml
@@ -0,0 +1,29 @@
+apiVersion: extensions/v1beta1
+kind: Deployment
+metadata:
+  labels:
+    app.kubernetes.io/component: controller
+  name: controller
+spec:
+  template:
+    metadata:
+      labels:
+        app.kubernetes.io/component: controller
+    spec:
+      containers:
+      - args:
+        - villas-ctl
+        - -b
+        - amqp://villas:s3c0sim4!@broker/%2F
+        - -c
+        - /etc/villas/controller/config.json
+        - daemon
+        image: villas/controller
+        name: controller
+      volumeMounts:
+        - mountPath: /etc/villas/controller/
+          name: config
+      volumes:
+      - name: config
+        configMap:
+          name: controller-config
diff --git a/kubernetes/database-deployment.yaml b/kubernetes/database-deployment.yaml
new file mode 100644
index 0000000..a324e3b
--- /dev/null
+++ b/kubernetes/database-deployment.yaml
@@ -0,0 +1,22 @@
+apiVersion: extensions/v1beta1
+kind: Deployment
+metadata:
+  labels:
+    app.kubernetes.io/component: database
+  name: database
+spec:
+  template:
+    metadata:
+      labels:
+        app.kubernetes.io/component: database
+    spec:
+      containers:
+      - image: mongo:latest
+        name: database
+        volumeMounts:
+        - mountPath: /data/db
+          name: database
+      volumes:
+      - name: database
+        persistentVolumeClaim:
+          claimName: database
diff --git a/kubernetes/database-persistentvolumeclaim.yaml b/kubernetes/database-persistentvolumeclaim.yaml
new file mode 100644
index 0000000..400b1b7
--- /dev/null
+++ b/kubernetes/database-persistentvolumeclaim.yaml
@@ -0,0 +1,12 @@
+apiVersion: v1
+kind: PersistentVolumeClaim
+metadata:
+  labels:
+    app.kubernetes.io/component: database
+  name: database
+spec:
+  accessModes:
+  - ReadWriteOnce
+  resources:
+    requests:
+      storage: 100Mi
diff --git a/kubernetes/frontend-deployment.yaml b/kubernetes/frontend-deployment.yaml
new file mode 100644
index 0000000..dc644aa
--- /dev/null
+++ b/kubernetes/frontend-deployment.yaml
@@ -0,0 +1,21 @@
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+  labels:
+    app.kubernetes.io/component: frontend
+    app.kubernetes.io/part-of: villas-web
+  name: frontend
+spec:
+  selector:
+    matchLabels:
+      app.kubernetes.io/component: frontend
+      app.kubernetes.io/part-of: villas-web
+  template:
+    metadata:
+      labels:
+        app.kubernetes.io/component: frontend
+        app.kubernetes.io/part-of: villas-web
+    spec:
+      containers:
+      - image: villas/web-frontend
+        name: frontend
diff --git a/kubernetes/mongo-express-deployment.yaml b/kubernetes/mongo-express-deployment.yaml
new file mode 100644
index 0000000..ae5e3f5
--- /dev/null
+++ b/kubernetes/mongo-express-deployment.yaml
@@ -0,0 +1,30 @@
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+  labels:
+    app.kubernetes.io/component: mongo-express
+    app.kubernetes.io/part-of: villas-web
+  name: mongo-express
+spec:
+  selector:
+    matchLabels:
+      app.kubernetes.io/component: mongo-express
+      app.kubernetes.io/part-of: villas-web
+  template:
+    metadata:
+      labels:
+        app.kubernetes.io/component: mongo-express
+        app.kubernetes.io/part-of: villas-web
+    spec:
+      containers:
+      - env:
+        - name: ME_CONFIG_BASICAUTH_PASSWORD
+          value: mongo-admin
+        - name: ME_CONFIG_BASICAUTH_USERNAME
+          value: admin
+        - name: ME_CONFIG_MONGODB_SERVER
+          value: database
+        - name: ME_CONFIG_SITE_BASEURL
+          value: /mongo-express/
+        image: mongo-express
+        name: mongo-express
diff --git a/kubernetes/nginx-claim0-persistentvolumeclaim.yaml b/kubernetes/nginx-claim0-persistentvolumeclaim.yaml
new file mode 100644
index 0000000..f765ff1
--- /dev/null
+++ b/kubernetes/nginx-claim0-persistentvolumeclaim.yaml
@@ -0,0 +1,12 @@
+apiVersion: v1
+kind: PersistentVolumeClaim
+metadata:
+  labels:
+    app.kubernetes.io/component: nginx-claim0
+  name: nginx-claim0
+spec:
+  accessModes:
+  - ReadWriteOnce
+  resources:
+    requests:
+      storage: 100Mi
diff --git a/kubernetes/nginx-deployment.yaml b/kubernetes/nginx-deployment.yaml
new file mode 100644
index 0000000..99615d7
--- /dev/null
+++ b/kubernetes/nginx-deployment.yaml
@@ -0,0 +1,30 @@
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+  labels:
+    app.kubernetes.io/component: nginx
+    app.kubernetes.io/part-of: villas-web
+  name: nginx
+spec:
+  selector:
+    matchLabels:
+      app.kubernetes.io/component: nginx
+      app.kubernetes.io/part-of: villas-web
+  template:
+    metadata:
+      labels:
+        app.kubernetes.io/component: nginx
+        app.kubernetes.io/part-of: villas-web
+    spec:
+      containers:
+      - image: nginx:stable-alpine
+        name: nginx
+        ports:
+        - containerPort: 8080
+        volumeMounts:
+        - mountPath: /etc/nginx/conf.d/default.conf
+          name: nginx-claim0
+      volumes:
+      - name: nginx-claim0
+        configMap:
+          name: nginx-config
diff --git a/kubernetes/nginx-ingress.yaml b/kubernetes/nginx-ingress.yaml
new file mode 100644
index 0000000..e69de29
diff --git a/kubernetes/nginx-service.yaml b/kubernetes/nginx-service.yaml
new file mode 100644
index 0000000..0b5805a
--- /dev/null
+++ b/kubernetes/nginx-service.yaml
@@ -0,0 +1,12 @@
+apiVersion: v1
+kind: Service
+metadata:
+  labels:
+    app.kubernetes.io/component: nginx
+  name: nginx
+spec:
+  ports:
+  - name: "http"
+    port: 8080
+  selector:
+    app.kubernetes.io/component: nginx
diff --git a/kubernetes/node-data-persistentvolumeclaim.yaml b/kubernetes/node-data-persistentvolumeclaim.yaml
new file mode 100644
index 0000000..f1d2f0a
--- /dev/null
+++ b/kubernetes/node-data-persistentvolumeclaim.yaml
@@ -0,0 +1,12 @@
+apiVersion: v1
+kind: PersistentVolumeClaim
+metadata:
+  labels:
+    app.kubernetes.io/component: node-claim1
+  name: node-claim1
+spec:
+  accessModes:
+  - ReadWriteOnce
+  resources:
+    requests:
+      storage: 100Mi
diff --git a/kubernetes/node-deployment.yaml b/kubernetes/node-deployment.yaml
new file mode 100644
index 0000000..067160a
--- /dev/null
+++ b/kubernetes/node-deployment.yaml
@@ -0,0 +1,58 @@
+apiVersion: extensions/v1beta1
+kind: Deployment
+metadata:
+  labels:
+    app.kubernetes.io/component: node
+  name: node
+spec:
+  strategy:
+    type: Recreate
+  template:
+    metadata:
+      labels:
+        app.kubernetes.io/component: node
+    spec:
+      containers:
+      - args:
+        - node
+        - /etc/villas/node/demo.conf
+        image: villas/node:latest
+        name: node
+        ports:
+        - containerPort: 80
+        - containerPort: 12000
+          protocol: UDP
+        - containerPort: 12001
+          protocol: UDP
+        - containerPort: 12002
+          protocol: UDP
+        - containerPort: 12003
+          protocol: UDP
+        - containerPort: 12004
+          protocol: UDP
+        - containerPort: 12005
+          protocol: UDP
+        - containerPort: 12006
+          protocol: UDP
+        - containerPort: 12007
+          protocol: UDP
+        - containerPort: 12008
+          protocol: UDP
+        - containerPort: 12009
+          protocol: UDP
+        - containerPort: 12010
+          protocol: UDP
+        securityContext:
+          privileged: true
+        volumeMounts:
+        - mountPath: /etc/villas/node
+          name: config
+        - mountPath: /data
+          name: data
+      volumes:
+      - name: node-
+        configMap:
+          name: node-config
+      - name: node-claim1
+        persistentVolumeClaim:
+          claimName: node-data
diff --git a/kubernetes/node-service.yaml b/kubernetes/node-service.yaml
new file mode 100644
index 0000000..677c907
--- /dev/null
+++ b/kubernetes/node-service.yaml
@@ -0,0 +1,57 @@
+apiVersion: v1
+kind: Service
+metadata:
+  labels:
+    app.kubernetes.io/component: node
+  name: node
+spec:
+  ports:
+  - name: "8081"
+    port: 8081
+    targetPort: 80
+  - name: "12000"
+    port: 12000
+    protocol: UDP
+    targetPort: 12000
+  - name: "12001"
+    port: 12001
+    protocol: UDP
+    targetPort: 12001
+  - name: "12002"
+    port: 12002
+    protocol: UDP
+    targetPort: 12002
+  - name: "12003"
+    port: 12003
+    protocol: UDP
+    targetPort: 12003
+  - name: "12004"
+    port: 12004
+    protocol: UDP
+    targetPort: 12004
+  - name: "12005"
+    port: 12005
+    protocol: UDP
+    targetPort: 12005
+  - name: "12006"
+    port: 12006
+    protocol: UDP
+    targetPort: 12006
+  - name: "12007"
+    port: 12007
+    protocol: UDP
+    targetPort: 12007
+  - name: "12008"
+    port: 12008
+    protocol: UDP
+    targetPort: 12008
+  - name: "12009"
+    port: 12009
+    protocol: UDP
+    targetPort: 12009
+  - name: "12010"
+    port: 12010
+    protocol: UDP
+    targetPort: 12010
+  selector:
+    app.kubernetes.io/component: node
diff --git a/kubernetes/relay-deployment.yaml b/kubernetes/relay-deployment.yaml
new file mode 100644
index 0000000..302dfab
--- /dev/null
+++ b/kubernetes/relay-deployment.yaml
@@ -0,0 +1,23 @@
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+  labels:
+    app.kubernetes.io/component: relay
+    app.kubernetes.io/part-of: villas-node
+  name: relay
+spec:
+  selector:
+    matchLabels:
+      app.kubernetes.io/component: backend
+      app.kubernetes.io/part-of: villas-web
+  template:
+    metadata:
+      labels:
+        app.kubernetes.io/component: backend
+        app.kubernetes.io/part-of: villas-node
+    spec:
+      containers:
+      - args:
+        - relay
+        image: villas/node
+        name: relay
-- 
GitLab