diff --git a/application/src/main/java/org/thingsboard/server/service/session/DefaultDeviceSessionCacheService.java b/application/src/main/java/org/thingsboard/server/service/session/DefaultDeviceSessionCacheService.java
index c50fb62194..e4062b1b78 100644
--- a/application/src/main/java/org/thingsboard/server/service/session/DefaultDeviceSessionCacheService.java
+++ b/application/src/main/java/org/thingsboard/server/service/session/DefaultDeviceSessionCacheService.java
@@ -47,11 +47,4 @@ public class DefaultDeviceSessionCacheService implements DeviceSessionCacheServi
log.debug("[{}] Pushing session data to cache: {}", deviceId, sessions);
return sessions;
}
-
- public static void main (String[] args){
- UUID uuid = UUID.fromString("d5db434e-9cd2-4903-8b3b-421b2d93664d");
- System.out.println(uuid.getMostSignificantBits());
- System.out.println(uuid.getLeastSignificantBits());
- }
-
}
diff --git a/k8s/.env b/k8s/.env
new file mode 100644
index 0000000000..e50e57d9b8
--- /dev/null
+++ b/k8s/.env
@@ -0,0 +1,5 @@
+
+# Database used by ThingsBoard, can be either postgres (PostgreSQL) or cassandra (Cassandra).
+# According to the database type corresponding kubernetes resources will be deployed (see postgres.yml, cassandra.yml for details).
+
+DATABASE=postgres
diff --git a/k8s/README.md b/k8s/README.md
new file mode 100644
index 0000000000..e57790ffc4
--- /dev/null
+++ b/k8s/README.md
@@ -0,0 +1,100 @@
+# Kubernetes resources configuration for ThingsBoard Microservices
+
+This folder containing scripts and Kubernetes resources configurations to run ThingsBoard in Microservices mode.
+
+## Prerequisites
+
+ThingsBoard Microservices are running on Kubernetes cluster.
+You need to have a Kubernetes cluster, and the kubectl command-line tool must be configured to communicate with your cluster.
+If you do not already have a cluster, you can create one by using [Minikube](https://kubernetes.io/docs/setup/minikube),
+or you can choose any other available [Kubernetes cluster deployment solutions](https://kubernetes.io/docs/setup/pick-right-solution/).
+
+## Installation
+
+Before performing initial installation you can configure the type of database to be used with ThingsBoard.
+In order to set database type change the value of `DATABASE` variable in `.env` file to one of the following:
+
+- `postgres` - use PostgreSQL database;
+- `cassandra` - use Cassandra database;
+
+**NOTE**: According to the database type corresponding kubernetes resources will be deployed (see `postgres.yml`, `cassandra.yml` for details).
+
+Execute the following command to run installation:
+
+`
+$ ./k8s-install-tb.sh --loadDemo
+`
+
+Where:
+
+- `--loadDemo` - optional argument. Whether to load additional demo data.
+
+## Running
+
+Execute the following command to deploy resources:
+
+`
+$ ./k8s-deploy-resources.sh
+`
+
+After a while when all resources will be successfully started you can open `http://{your-cluster-ip}` in you browser (for ex. `http://192.168.99.101`).
+You should see ThingsBoard login page.
+
+Use the following default credentials:
+
+- **System Administrator**: sysadmin@thingsboard.org / sysadmin
+
+If you installed DataBase with demo data (using `--loadDemo` flag) you can also use the following credentials:
+
+- **Tenant Administrator**: tenant@thingsboard.org / tenant
+- **Customer User**: customer@thingsboard.org / customer
+
+In case of any issues you can examine service logs for errors.
+For example to see ThingsBoard node logs execute the following commands:
+
+1) Get list of the running tb-node pods:
+
+`
+$ kubectl get pods -l app=tb-node
+`
+
+2) Fetch logs of tb-node pod:
+
+`
+$ kubectl logs -f [tb-node-pod-name]
+`
+
+Where:
+
+- `tb-node-pod-name` - tb-node pod name obtained from the list of the running tb-node pods.
+
+Or use `kubectl get pods` to see the state of all the pods.
+Or use `kubectl get services` to see the state of all the services.
+Or use `kubectl get deployments` to see the state of all the deployments.
+See [kubectl Cheat Sheet](https://kubernetes.io/docs/reference/kubectl/cheatsheet/) command reference for details.
+
+Execute the following command to delete all deployed microservices:
+
+`
+$ ./k8s-delete-resources.sh
+`
+
+Execute the following command to delete all resources (including database):
+
+`
+$ ./k8s-delete-all.sh
+`
+
+## Upgrading
+
+In case when database upgrade is needed, execute the following commands:
+
+```
+$ ./k8s-delete-resources.sh
+$ ./k8s-upgrade-tb.sh --fromVersion=[FROM_VERSION]
+$ ./k8s-deploy-resources.sh
+```
+
+Where:
+
+- `FROM_VERSION` - from which version upgrade should be started. See [Upgrade Instructions](https://thingsboard.io/docs/user-guide/install/upgrade-instructions) for valid `fromVersion` values.
diff --git a/k8s/cassandra.yml b/k8s/cassandra.yml
new file mode 100644
index 0000000000..aa1d18022c
--- /dev/null
+++ b/k8s/cassandra.yml
@@ -0,0 +1,164 @@
+#
+# Copyright © 2016-2019 The Thingsboard Authors
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+apiVersion: storage.k8s.io/v1
+kind: StorageClass
+metadata:
+ name: fast
+ namespace: thingsboard
+provisioner: k8s.io/minikube-hostpath
+parameters:
+ type: pd-ssd
+---
+apiVersion: v1
+kind: ConfigMap
+metadata:
+ name: cassandra-probe-config
+ namespace: thingsboard
+ labels:
+ name: cassandra-probe-config
+data:
+ probe: |
+ if [[ $(nodetool status | grep $POD_IP) == *"UN"* ]]; then
+ if [[ $DEBUG ]]; then
+ echo "UN";
+ fi
+ exit 0;
+ else
+ if [[ $DEBUG ]]; then
+ echo "Not Up";
+ fi
+ exit 1;
+ fi
+---
+apiVersion: apps/v1
+kind: StatefulSet
+metadata:
+ name: cassandra
+ namespace: thingsboard
+ labels:
+ app: cassandra
+spec:
+ serviceName: cassandra
+ replicas: 1
+ selector:
+ matchLabels:
+ app: cassandra
+ template:
+ metadata:
+ labels:
+ app: cassandra
+ spec:
+ volumes:
+ - name: cassandra-probe-config
+ configMap:
+ name: cassandra-probe-config
+ items:
+ - key: probe
+ path: ready-probe.sh
+ mode: 0777
+ terminationGracePeriodSeconds: 1800
+ containers:
+ - name: cassandra
+ image: cassandra:3.11.3
+ imagePullPolicy: Always
+ ports:
+ - containerPort: 7000
+ name: intra-node
+ - containerPort: 7001
+ name: tls-intra-node
+ - containerPort: 7199
+ name: jmx
+ - containerPort: 9042
+ name: cql
+ - containerPort: 9160
+ name: thrift
+ resources:
+ limits:
+ cpu: "1000m"
+ memory: 2Gi
+ requests:
+ cpu: "1000m"
+ memory: 2Gi
+ securityContext:
+ capabilities:
+ add:
+ - IPC_LOCK
+ lifecycle:
+ preStop:
+ exec:
+ command:
+ - /bin/sh
+ - -c
+ - nodetool drain
+ env:
+ - name: CASSANDRA_SEEDS
+ value: "cassandra-0.cassandra.thingsboard.svc.cluster.local"
+ - name: MAX_HEAP_SIZE
+ value: 1024M
+ - name: HEAP_NEWSIZE
+ value: 256M
+ - name: CASSANDRA_CLUSTER_NAME
+ value: "Thingsboard Cluster"
+ - name: CASSANDRA_DC
+ value: "DC1-Thingsboard-Cluster"
+ - name: CASSANDRA_RACK
+ value: "Rack-Thingsboard-Cluster"
+ - name: CASSANDRA_AUTO_BOOTSTRAP
+ value: "false"
+ - name: CASSANDRA_ENDPOINT_SNITCH
+ value: GossipingPropertyFileSnitch
+ - name: POD_IP
+ valueFrom:
+ fieldRef:
+ fieldPath: status.podIP
+ readinessProbe:
+ exec:
+ command:
+ - /bin/bash
+ - -c
+ - /probe/ready-probe.sh
+ initialDelaySeconds: 60
+ timeoutSeconds: 5
+ volumeMounts:
+ - name: cassandra-probe-config
+ mountPath: /probe
+ - name: cassandra-data
+ mountPath: /var/lib/cassandra
+ volumeClaimTemplates:
+ - metadata:
+ name: cassandra-data
+ spec:
+ accessModes: [ "ReadWriteOnce" ]
+ storageClassName: fast
+ resources:
+ requests:
+ storage: 1Gi
+---
+apiVersion: v1
+kind: Service
+metadata:
+ labels:
+ app: cassandra
+ name: cassandra
+ namespace: thingsboard
+spec:
+ clusterIP: None
+ ports:
+ - port: 9042
+ selector:
+ app: cassandra
+---
diff --git a/k8s/database-setup.yml b/k8s/database-setup.yml
new file mode 100644
index 0000000000..d73a685b74
--- /dev/null
+++ b/k8s/database-setup.yml
@@ -0,0 +1,43 @@
+#
+# Copyright © 2016-2019 The Thingsboard Authors
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+apiVersion: v1
+kind: Pod
+metadata:
+ name: tb-db-setup
+ namespace: thingsboard
+spec:
+ volumes:
+ - name: tb-node-config
+ configMap:
+ name: tb-node-config
+ items:
+ - key: conf
+ path: thingsboard.conf
+ - key: logback
+ path: logback.xml
+ containers:
+ - name: tb-db-setup
+ imagePullPolicy: Always
+ image: thingsboard/tb-node:latest
+ envFrom:
+ - configMapRef:
+ name: tb-node-db-config
+ volumeMounts:
+ - mountPath: /config
+ name: tb-node-config
+ command: ['sh', '-c', 'while [ ! -f /install-finished ]; do sleep 2; done;']
+ restartPolicy: Never
diff --git a/k8s/k8s-delete-all.sh b/k8s/k8s-delete-all.sh
new file mode 100755
index 0000000000..a90829368e
--- /dev/null
+++ b/k8s/k8s-delete-all.sh
@@ -0,0 +1,18 @@
+#!/bin/bash
+#
+# Copyright © 2016-2019 The Thingsboard Authors
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+kubectl -n thingsboard delete svc,sts,deploy,pv,pvc,cm,po,ing --all --include-uninitialized
diff --git a/k8s/k8s-delete-resources.sh b/k8s/k8s-delete-resources.sh
new file mode 100755
index 0000000000..87f25ebedd
--- /dev/null
+++ b/k8s/k8s-delete-resources.sh
@@ -0,0 +1,21 @@
+#!/bin/bash
+#
+# Copyright © 2016-2019 The Thingsboard Authors
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+set -e
+
+kubectl config set-context $(kubectl config current-context) --namespace=thingsboard
+kubectl delete -f thingsboard.yml
diff --git a/k8s/k8s-deploy-resources.sh b/k8s/k8s-deploy-resources.sh
new file mode 100755
index 0000000000..86ec235dd7
--- /dev/null
+++ b/k8s/k8s-deploy-resources.sh
@@ -0,0 +1,26 @@
+#!/bin/bash
+#
+# Copyright © 2016-2019 The Thingsboard Authors
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+set -e
+
+kubectl apply -f tb-namespace.yml
+kubectl config set-context $(kubectl config current-context) --namespace=thingsboard
+kubectl apply -f tb-node-configmap.yml
+kubectl apply -f tb-mqtt-transport-configmap.yml
+kubectl apply -f tb-http-transport-configmap.yml
+kubectl apply -f tb-coap-transport-configmap.yml
+kubectl apply -f thingsboard.yml
diff --git a/k8s/k8s-install-tb.sh b/k8s/k8s-install-tb.sh
new file mode 100755
index 0000000000..9fa9c0ea3a
--- /dev/null
+++ b/k8s/k8s-install-tb.sh
@@ -0,0 +1,93 @@
+#!/bin/bash
+#
+# Copyright © 2016-2019 The Thingsboard Authors
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+function installTb() {
+
+ loadDemo=$1
+
+ kubectl apply -f tb-node-configmap.yml
+ kubectl apply -f database-setup.yml &&
+ kubectl wait --for=condition=Ready pod/tb-db-setup --timeout=120s &&
+ kubectl exec tb-db-setup -- sh -c 'export INSTALL_TB=true; export LOAD_DEMO='"$loadDemo"'; start-tb-node.sh; touch /install-finished;'
+
+ kubectl delete pod tb-db-setup
+
+}
+
+function installPostgres() {
+
+ kubectl apply -f postgres.yml
+ kubectl apply -f tb-node-postgres-configmap.yml
+
+ kubectl rollout status deployment/postgres
+}
+
+function installCassandra() {
+
+ kubectl apply -f cassandra.yml
+ kubectl apply -f tb-node-cassandra-configmap.yml
+
+ kubectl rollout status statefulset/cassandra
+
+ kubectl exec -it cassandra-0 -- bash -c "cqlsh -e \
+ \"CREATE KEYSPACE IF NOT EXISTS thingsboard \
+ WITH replication = { \
+ 'class' : 'SimpleStrategy', \
+ 'replication_factor' : 1 \
+ };\""
+}
+
+while [[ $# -gt 0 ]]
+do
+key="$1"
+
+case $key in
+ --loadDemo)
+ LOAD_DEMO=true
+ shift # past argument
+ ;;
+ *)
+ # unknown option
+ ;;
+esac
+shift # past argument or value
+done
+
+if [ "$LOAD_DEMO" == "true" ]; then
+ loadDemo=true
+else
+ loadDemo=false
+fi
+
+source .env
+
+kubectl apply -f tb-namespace.yml
+kubectl config set-context $(kubectl config current-context) --namespace=thingsboard
+
+case $DATABASE in
+ postgres)
+ installPostgres
+ installTb ${loadDemo}
+ ;;
+ cassandra)
+ installCassandra
+ installTb ${loadDemo}
+ ;;
+ *)
+ echo "Unknown DATABASE value specified: '${DATABASE}'. Should be either postgres or cassandra." >&2
+ exit 1
+esac
diff --git a/k8s/k8s-upgrade-tb.sh b/k8s/k8s-upgrade-tb.sh
new file mode 100755
index 0000000000..35dc11f5d1
--- /dev/null
+++ b/k8s/k8s-upgrade-tb.sh
@@ -0,0 +1,43 @@
+#!/bin/bash
+#
+# Copyright © 2016-2019 The Thingsboard Authors
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+for i in "$@"
+do
+case $i in
+ --fromVersion=*)
+ FROM_VERSION="${i#*=}"
+ shift
+ ;;
+ *)
+ # unknown option
+ ;;
+esac
+done
+
+if [[ -z "${FROM_VERSION// }" ]]; then
+ echo "--fromVersion parameter is invalid or unspecified!"
+ echo "Usage: k8s-upgrade-tb.sh --fromVersion={VERSION}"
+ exit 1
+else
+ fromVersion="${FROM_VERSION// }"
+fi
+
+kubectl apply -f database-setup.yml &&
+kubectl wait --for=condition=Ready pod/tb-db-setup --timeout=120s &&
+kubectl exec tb-db-setup -- sh -c 'export UPGRADE_TB=true; export FROM_VERSION='"$fromVersion"'; start-tb-node.sh; touch /install-finished;'
+
+kubectl delete pod tb-db-setup
diff --git a/k8s/postgres.yml b/k8s/postgres.yml
new file mode 100644
index 0000000000..2e7f2cc815
--- /dev/null
+++ b/k8s/postgres.yml
@@ -0,0 +1,95 @@
+#
+# Copyright © 2016-2019 The Thingsboard Authors
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+apiVersion: v1
+kind: PersistentVolumeClaim
+metadata:
+ name: postgres-pv-claim
+ namespace: thingsboard
+ labels:
+ app: postgres
+spec:
+ accessModes:
+ - ReadWriteOnce
+ resources:
+ requests:
+ storage: 5Gi
+---
+apiVersion: extensions/v1beta1
+kind: Deployment
+metadata:
+ name: postgres
+ namespace: thingsboard
+ labels:
+ app: postgres
+spec:
+ template:
+ metadata:
+ labels:
+ app: postgres
+ spec:
+ volumes:
+ - name: postgres-data
+ persistentVolumeClaim:
+ claimName: postgres-pv-claim
+ containers:
+ - name: postgres
+ imagePullPolicy: Always
+ image: postgres:9.6
+ ports:
+ - containerPort: 5432
+ name: postgres
+ env:
+ - name: POSTGRES_DB
+ value: "thingsboard"
+ volumeMounts:
+ - mountPath: /var/lib/postgresql/data
+ name: postgres-data
+ livenessProbe:
+ exec:
+ command:
+ - pg_isready
+ - -h
+ - localhost
+ - -U
+ - postgres
+ initialDelaySeconds: 60
+ timeoutSeconds: 30
+ readinessProbe:
+ exec:
+ command:
+ - pg_isready
+ - -h
+ - localhost
+ - -U
+ - postgres
+ initialDelaySeconds: 5
+ timeoutSeconds: 1
+ restartPolicy: Always
+---
+apiVersion: v1
+kind: Service
+metadata:
+ name: tb-database
+ namespace: thingsboard
+spec:
+ type: ClusterIP
+ selector:
+ app: postgres
+ ports:
+ - port: 5432
+ name: postgres
+---
diff --git a/k8s/tb-coap-transport-configmap.yml b/k8s/tb-coap-transport-configmap.yml
new file mode 100644
index 0000000000..5381f766f4
--- /dev/null
+++ b/k8s/tb-coap-transport-configmap.yml
@@ -0,0 +1,65 @@
+#
+# Copyright © 2016-2019 The Thingsboard Authors
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+apiVersion: v1
+kind: ConfigMap
+metadata:
+ name: tb-coap-transport-config
+ namespace: thingsboard
+ labels:
+ name: tb-coap-transport-config
+data:
+ conf: |
+ export JAVA_OPTS="$JAVA_OPTS -Xloggc:/var/log/tb-coap-transport/${TB_HOST}/gc.log -XX:+IgnoreUnrecognizedVMOptions -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/var/log/tb-coap-transport/${TB_HOST}/heapdump.bin -XX:+PrintGCDetails -XX:+PrintGCDateStamps"
+ export JAVA_OPTS="$JAVA_OPTS -XX:+PrintHeapAtGC -XX:+PrintTenuringDistribution -XX:+PrintGCApplicationStoppedTime -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10"
+ export JAVA_OPTS="$JAVA_OPTS -XX:GCLogFileSize=10M -XX:-UseBiasedLocking -XX:+UseTLAB -XX:+ResizeTLAB -XX:+PerfDisableSharedMem -XX:+UseCondCardMark"
+ export JAVA_OPTS="$JAVA_OPTS -XX:CMSWaitDuration=10000 -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled -XX:+CMSParallelInitialMarkEnabled"
+ export JAVA_OPTS="$JAVA_OPTS -XX:+CMSEdenChunksRecordAlways -XX:CMSInitiatingOccupancyFraction=75 -XX:+UseCMSInitiatingOccupancyOnly -XX:+ExitOnOutOfMemoryError"
+ export LOG_FILENAME=tb-coap-transport.out
+ export LOADER_PATH=/usr/share/tb-coap-transport/conf
+ logback: |
+
+
+
+
+ /var/log/tb-coap-transport/${TB_HOST}/tb-coap-transport.log
+
+ /var/log/tb-coap-transport/${TB_HOST}/tb-coap-transport.%d{yyyy-MM-dd}.%i.log
+ 100MB
+ 30
+ 3GB
+
+
+ %d{ISO8601} [%thread] %-5level %logger{36} - %msg%n
+
+
+
+
+
+ %d{ISO8601} [%thread] %-5level %logger{36} - %msg%n
+
+
+
+
+
+
+
+
+
+
+
diff --git a/k8s/tb-http-transport-configmap.yml b/k8s/tb-http-transport-configmap.yml
new file mode 100644
index 0000000000..5376b82cef
--- /dev/null
+++ b/k8s/tb-http-transport-configmap.yml
@@ -0,0 +1,65 @@
+#
+# Copyright © 2016-2019 The Thingsboard Authors
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+apiVersion: v1
+kind: ConfigMap
+metadata:
+ name: tb-http-transport-config
+ namespace: thingsboard
+ labels:
+ name: tb-http-transport-config
+data:
+ conf: |
+ export JAVA_OPTS="$JAVA_OPTS -Xloggc:/var/log/tb-http-transport/${TB_HOST}/gc.log -XX:+IgnoreUnrecognizedVMOptions -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/var/log/tb-http-transport/${TB_HOST}/heapdump.bin -XX:+PrintGCDetails -XX:+PrintGCDateStamps"
+ export JAVA_OPTS="$JAVA_OPTS -XX:+PrintHeapAtGC -XX:+PrintTenuringDistribution -XX:+PrintGCApplicationStoppedTime -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10"
+ export JAVA_OPTS="$JAVA_OPTS -XX:GCLogFileSize=10M -XX:-UseBiasedLocking -XX:+UseTLAB -XX:+ResizeTLAB -XX:+PerfDisableSharedMem -XX:+UseCondCardMark"
+ export JAVA_OPTS="$JAVA_OPTS -XX:CMSWaitDuration=10000 -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled -XX:+CMSParallelInitialMarkEnabled"
+ export JAVA_OPTS="$JAVA_OPTS -XX:+CMSEdenChunksRecordAlways -XX:CMSInitiatingOccupancyFraction=75 -XX:+UseCMSInitiatingOccupancyOnly -XX:+ExitOnOutOfMemoryError"
+ export LOG_FILENAME=tb-http-transport.out
+ export LOADER_PATH=/usr/share/tb-http-transport/conf
+ logback: |
+
+
+
+
+ /var/log/tb-http-transport/${TB_HOST}/tb-http-transport.log
+
+ /var/log/tb-http-transport/${TB_HOST}/tb-http-transport.%d{yyyy-MM-dd}.%i.log
+ 100MB
+ 30
+ 3GB
+
+
+ %d{ISO8601} [%thread] %-5level %logger{36} - %msg%n
+
+
+
+
+
+ %d{ISO8601} [%thread] %-5level %logger{36} - %msg%n
+
+
+
+
+
+
+
+
+
+
+
diff --git a/k8s/tb-mqtt-transport-configmap.yml b/k8s/tb-mqtt-transport-configmap.yml
new file mode 100644
index 0000000000..1e73a08db7
--- /dev/null
+++ b/k8s/tb-mqtt-transport-configmap.yml
@@ -0,0 +1,65 @@
+#
+# Copyright © 2016-2019 The Thingsboard Authors
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+apiVersion: v1
+kind: ConfigMap
+metadata:
+ name: tb-mqtt-transport-config
+ namespace: thingsboard
+ labels:
+ name: tb-mqtt-transport-config
+data:
+ conf: |
+ export JAVA_OPTS="$JAVA_OPTS -Xloggc:/var/log/tb-mqtt-transport/${TB_HOST}/gc.log -XX:+IgnoreUnrecognizedVMOptions -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/var/log/tb-mqtt-transport/${TB_HOST}/heapdump.bin -XX:+PrintGCDetails -XX:+PrintGCDateStamps"
+ export JAVA_OPTS="$JAVA_OPTS -XX:+PrintHeapAtGC -XX:+PrintTenuringDistribution -XX:+PrintGCApplicationStoppedTime -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10"
+ export JAVA_OPTS="$JAVA_OPTS -XX:GCLogFileSize=10M -XX:-UseBiasedLocking -XX:+UseTLAB -XX:+ResizeTLAB -XX:+PerfDisableSharedMem -XX:+UseCondCardMark"
+ export JAVA_OPTS="$JAVA_OPTS -XX:CMSWaitDuration=10000 -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled -XX:+CMSParallelInitialMarkEnabled"
+ export JAVA_OPTS="$JAVA_OPTS -XX:+CMSEdenChunksRecordAlways -XX:CMSInitiatingOccupancyFraction=75 -XX:+UseCMSInitiatingOccupancyOnly -XX:+ExitOnOutOfMemoryError"
+ export LOG_FILENAME=tb-mqtt-transport.out
+ export LOADER_PATH=/usr/share/tb-mqtt-transport/conf
+ logback: |
+
+
+
+
+ /var/log/tb-mqtt-transport/${TB_HOST}/tb-mqtt-transport.log
+
+ /var/log/tb-mqtt-transport/${TB_HOST}/tb-mqtt-transport.%d{yyyy-MM-dd}.%i.log
+ 100MB
+ 30
+ 3GB
+
+
+ %d{ISO8601} [%thread] %-5level %logger{36} - %msg%n
+
+
+
+
+
+ %d{ISO8601} [%thread] %-5level %logger{36} - %msg%n
+
+
+
+
+
+
+
+
+
+
+
diff --git a/k8s/tb-namespace.yml b/k8s/tb-namespace.yml
new file mode 100644
index 0000000000..113009635f
--- /dev/null
+++ b/k8s/tb-namespace.yml
@@ -0,0 +1,22 @@
+#
+# Copyright © 2016-2019 The Thingsboard Authors
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+apiVersion: v1
+kind: Namespace
+metadata:
+ name: thingsboard
+ labels:
+ name: thingsboard
diff --git a/k8s/tb-node-cassandra-configmap.yml b/k8s/tb-node-cassandra-configmap.yml
new file mode 100644
index 0000000000..21a05bd6f6
--- /dev/null
+++ b/k8s/tb-node-cassandra-configmap.yml
@@ -0,0 +1,28 @@
+#
+# Copyright © 2016-2019 The Thingsboard Authors
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+apiVersion: v1
+kind: ConfigMap
+metadata:
+ name: tb-node-db-config
+ namespace: thingsboard
+ labels:
+ name: tb-node-db-config
+data:
+ DATABASE_TS_TYPE: cassandra
+ DATABASE_ENTITIES_TYPE: cassandra
+ CASSANDRA_URL: cassandra:9042
+ CASSANDRA_SOCKET_READ_TIMEOUT: "60000"
diff --git a/k8s/tb-node-configmap.yml b/k8s/tb-node-configmap.yml
new file mode 100644
index 0000000000..550a0665d1
--- /dev/null
+++ b/k8s/tb-node-configmap.yml
@@ -0,0 +1,67 @@
+#
+# Copyright © 2016-2019 The Thingsboard Authors
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+apiVersion: v1
+kind: ConfigMap
+metadata:
+ name: tb-node-config
+ namespace: thingsboard
+ labels:
+ name: tb-node-config
+data:
+ conf: |
+ export JAVA_OPTS="$JAVA_OPTS -Dplatform=deb -Dinstall.data_dir=/usr/share/thingsboard/data"
+ export JAVA_OPTS="$JAVA_OPTS -Xloggc:/var/log/thingsboard/${TB_HOST}/gc.log -XX:+IgnoreUnrecognizedVMOptions -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/var/log/thingsboard/${TB_HOST}/heapdump.bin -XX:+PrintGCDetails -XX:+PrintGCDateStamps"
+ export JAVA_OPTS="$JAVA_OPTS -XX:+PrintHeapAtGC -XX:+PrintTenuringDistribution -XX:+PrintGCApplicationStoppedTime -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10"
+ export JAVA_OPTS="$JAVA_OPTS -XX:GCLogFileSize=10M -XX:-UseBiasedLocking -XX:+UseTLAB -XX:+ResizeTLAB -XX:+PerfDisableSharedMem -XX:+UseCondCardMark"
+ export JAVA_OPTS="$JAVA_OPTS -XX:CMSWaitDuration=10000 -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled -XX:+CMSParallelInitialMarkEnabled"
+ export JAVA_OPTS="$JAVA_OPTS -XX:+CMSEdenChunksRecordAlways -XX:CMSInitiatingOccupancyFraction=75 -XX:+UseCMSInitiatingOccupancyOnly -XX:+ExitOnOutOfMemoryError"
+ export LOG_FILENAME=thingsboard.out
+ export LOADER_PATH=/usr/share/thingsboard/conf,/usr/share/thingsboard/extensions
+ logback: |
+
+
+
+
+ /var/log/thingsboard/${TB_HOST}/thingsboard.log
+
+ /var/log/thingsboard/${TB_HOST}/thingsboard.%d{yyyy-MM-dd}.%i.log
+ 100MB
+ 30
+ 3GB
+
+
+ %d{ISO8601} [%thread] %-5level %logger{36} - %msg%n
+
+
+
+
+
+ %d{ISO8601} [%thread] %-5level %logger{36} - %msg%n
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/k8s/tb-node-postgres-configmap.yml b/k8s/tb-node-postgres-configmap.yml
new file mode 100644
index 0000000000..3e07cb863c
--- /dev/null
+++ b/k8s/tb-node-postgres-configmap.yml
@@ -0,0 +1,31 @@
+#
+# Copyright © 2016-2019 The Thingsboard Authors
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+apiVersion: v1
+kind: ConfigMap
+metadata:
+ name: tb-node-db-config
+ namespace: thingsboard
+ labels:
+ name: tb-node-db-config
+data:
+ DATABASE_TS_TYPE: sql
+ DATABASE_ENTITIES_TYPE: sql
+ SPRING_JPA_DATABASE_PLATFORM: org.hibernate.dialect.PostgreSQLDialect
+ SPRING_DRIVER_CLASS_NAME: org.postgresql.Driver
+ SPRING_DATASOURCE_URL: jdbc:postgresql://tb-database:5432/thingsboard
+ SPRING_DATASOURCE_USERNAME: postgres
+ SPRING_DATASOURCE_PASSWORD: postgres
diff --git a/k8s/thingsboard.yml b/k8s/thingsboard.yml
new file mode 100644
index 0000000000..0022e72d77
--- /dev/null
+++ b/k8s/thingsboard.yml
@@ -0,0 +1,608 @@
+#
+# Copyright © 2016-2019 The Thingsboard Authors
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+apiVersion: extensions/v1beta1
+kind: Deployment
+metadata:
+ name: zookeeper
+ namespace: thingsboard
+spec:
+ template:
+ metadata:
+ labels:
+ app: zookeeper
+ spec:
+ containers:
+ - name: server
+ imagePullPolicy: Always
+ image: zookeeper:3.5
+ ports:
+ - containerPort: 2181
+ readinessProbe:
+ periodSeconds: 5
+ tcpSocket:
+ port: 2181
+ livenessProbe:
+ periodSeconds: 5
+ tcpSocket:
+ port: 2181
+ env:
+ - name: ZOO_MY_ID
+ value: "1"
+ - name: ZOO_SERVERS
+ value: "server.1=0.0.0.0:2888:3888;0.0.0.0:2181"
+ restartPolicy: Always
+---
+apiVersion: v1
+kind: Service
+metadata:
+ name: zookeeper
+ namespace: thingsboard
+spec:
+ type: ClusterIP
+ selector:
+ app: zookeeper
+ ports:
+ - name: zk-port
+ port: 2181
+---
+apiVersion: extensions/v1beta1
+kind: Deployment
+metadata:
+ name: tb-kafka
+ namespace: thingsboard
+spec:
+ template:
+ metadata:
+ labels:
+ app: tb-kafka
+ spec:
+ containers:
+ - name: server
+ imagePullPolicy: Always
+ image: wurstmeister/kafka
+ ports:
+ - containerPort: 9092
+ readinessProbe:
+ periodSeconds: 20
+ tcpSocket:
+ port: 9092
+ livenessProbe:
+ periodSeconds: 5
+ tcpSocket:
+ port: 9092
+ env:
+ - name: KAFKA_ZOOKEEPER_CONNECT
+ value: "zookeeper:2181"
+ - name: KAFKA_LISTENERS
+ value: "INSIDE://:9093,OUTSIDE://:9092"
+ - name: KAFKA_ADVERTISED_LISTENERS
+ value: "INSIDE://:9093,OUTSIDE://tb-kafka:9092"
+ - name: KAFKA_LISTENER_SECURITY_PROTOCOL_MAP
+ value: "INSIDE:PLAINTEXT,OUTSIDE:PLAINTEXT"
+ - name: KAFKA_INTER_BROKER_LISTENER_NAME
+ value: "INSIDE"
+ - name: KAFKA_CREATE_TOPICS
+ value: "js.eval.requests:100:1:delete --config=retention.ms=60000 --config=segment.bytes=26214400 --config=retention.bytes=104857600,tb.transport.api.requests:30:1:delete --config=retention.ms=60000 --config=segment.bytes=26214400 --config=retention.bytes=104857600,tb.rule-engine:30:1:delete --config=retention.ms=60000 --config=segment.bytes=26214400 --config=retention.bytes=104857600"
+ - name: KAFKA_AUTO_CREATE_TOPICS_ENABLE
+ value: "false"
+ - name: KAFKA_LOG_RETENTION_BYTES
+ value: "1073741824"
+ - name: KAFKA_LOG_SEGMENT_BYTES
+ value: "268435456"
+ - name: KAFKA_LOG_RETENTION_MS
+ value: "300000"
+ - name: KAFKA_LOG_CLEANUP_POLICY
+ value: "delete"
+ restartPolicy: Always
+---
+apiVersion: v1
+kind: Service
+metadata:
+ name: tb-kafka
+ namespace: thingsboard
+spec:
+ type: ClusterIP
+ selector:
+ app: tb-kafka
+ ports:
+ - name: tb-kafka-port
+ port: 9092
+---
+apiVersion: extensions/v1beta1
+kind: Deployment
+metadata:
+ name: tb-redis
+ namespace: thingsboard
+spec:
+ template:
+ metadata:
+ labels:
+ app: tb-redis
+ spec:
+ containers:
+ - name: server
+ imagePullPolicy: Always
+ image: redis:4.0
+ ports:
+ - containerPort: 6379
+ readinessProbe:
+ periodSeconds: 5
+ tcpSocket:
+ port: 6379
+ livenessProbe:
+ periodSeconds: 5
+ tcpSocket:
+ port: 6379
+ volumeMounts:
+ - mountPath: /data
+ name: redis-data
+ volumes:
+ - name: redis-data
+ emptyDir: {}
+ restartPolicy: Always
+---
+apiVersion: v1
+kind: Service
+metadata:
+ name: tb-redis
+ namespace: thingsboard
+spec:
+ type: ClusterIP
+ selector:
+ app: tb-redis
+ ports:
+ - name: tb-redis-port
+ port: 6379
+---
+apiVersion: extensions/v1beta1
+kind: Deployment
+metadata:
+ name: tb-js-executor
+ namespace: thingsboard
+spec:
+ replicas: 20
+ selector:
+ matchLabels:
+ app: tb-js-executor
+ template:
+ metadata:
+ labels:
+ app: tb-js-executor
+ spec:
+ containers:
+ - name: server
+ imagePullPolicy: Always
+ image: thingsboard/tb-js-executor:latest
+ env:
+ - name: REMOTE_JS_EVAL_REQUEST_TOPIC
+ value: "js.eval.requests"
+ - name: TB_KAFKA_SERVERS
+ value: "tb-kafka:9092"
+ - name: LOGGER_LEVEL
+ value: "info"
+ - name: LOG_FOLDER
+ value: "logs"
+ - name: LOGGER_FILENAME
+ value: "tb-js-executor-%DATE%.log"
+ - name: DOCKER_MODE
+ value: "true"
+ - name: SCRIPT_BODY_TRACE_FREQUENCY
+ value: "1000"
+ restartPolicy: Always
+---
+apiVersion: extensions/v1beta1
+kind: Deployment
+metadata:
+ name: tb-node
+ namespace: thingsboard
+spec:
+ replicas: 2
+ selector:
+ matchLabels:
+ app: tb-node
+ template:
+ metadata:
+ labels:
+ app: tb-node
+ spec:
+ volumes:
+ - name: tb-node-config
+ configMap:
+ name: tb-node-config
+ items:
+ - key: conf
+ path: thingsboard.conf
+ - key: logback
+ path: logback.xml
+ containers:
+ - name: server
+ imagePullPolicy: Always
+ image: thingsboard/tb-node:latest
+ ports:
+ - containerPort: 8080
+ name: http
+ - containerPort: 9001
+ name: rpc
+ env:
+ - name: RPC_HOST
+ valueFrom:
+ fieldRef:
+ fieldPath: status.podIP
+ - name: CLUSTER_NODE_ID
+ valueFrom:
+ fieldRef:
+ fieldPath: metadata.name
+ - name: TB_HOST
+ valueFrom:
+ fieldRef:
+ fieldPath: metadata.name
+ - name: ZOOKEEPER_ENABLED
+ value: "true"
+ - name: ZOOKEEPER_URL
+ value: "zookeeper:2181"
+ - name: TB_KAFKA_SERVERS
+ value: "tb-kafka:9092"
+ - name: JS_EVALUATOR
+ value: "remote"
+ - name: TRANSPORT_TYPE
+ value: "remote"
+ - name: CACHE_TYPE
+ value: "redis"
+ - name: REDIS_HOST
+ value: "tb-redis"
+ - name: HTTP_LOG_CONTROLLER_ERROR_STACK_TRACE
+ value: "false"
+ envFrom:
+ - configMapRef:
+ name: tb-node-db-config
+ volumeMounts:
+ - mountPath: /config
+ name: tb-node-config
+ livenessProbe:
+ httpGet:
+ path: /login
+ port: http
+ initialDelaySeconds: 120
+ timeoutSeconds: 10
+ restartPolicy: Always
+---
+apiVersion: v1
+kind: Service
+metadata:
+ name: tb-node
+ namespace: thingsboard
+spec:
+ type: ClusterIP
+ selector:
+ app: tb-node
+ ports:
+ - port: 8080
+ name: http
+---
+apiVersion: extensions/v1beta1
+kind: Deployment
+metadata:
+ name: tb-mqtt-transport
+ namespace: thingsboard
+spec:
+ replicas: 2
+ selector:
+ matchLabels:
+ app: tb-mqtt-transport
+ template:
+ metadata:
+ labels:
+ app: tb-mqtt-transport
+ spec:
+ volumes:
+ - name: tb-mqtt-transport-config
+ configMap:
+ name: tb-mqtt-transport-config
+ items:
+ - key: conf
+ path: tb-mqtt-transport.conf
+ - key: logback
+ path: logback.xml
+ containers:
+ - name: server
+ imagePullPolicy: Always
+ image: thingsboard/tb-mqtt-transport:latest
+ ports:
+ - containerPort: 1883
+ name: mqtt
+ env:
+ - name: CLUSTER_NODE_ID
+ valueFrom:
+ fieldRef:
+ fieldPath: metadata.name
+ - name: TB_HOST
+ valueFrom:
+ fieldRef:
+ fieldPath: metadata.name
+ - name: MQTT_BIND_ADDRESS
+ value: "0.0.0.0"
+ - name: MQTT_BIND_PORT
+ value: "1883"
+ - name: MQTT_TIMEOUT
+ value: "10000"
+ - name: TB_KAFKA_SERVERS
+ value: "tb-kafka:9092"
+ volumeMounts:
+ - mountPath: /config
+ name: tb-mqtt-transport-config
+ readinessProbe:
+ periodSeconds: 20
+ tcpSocket:
+ port: 1883
+ livenessProbe:
+ periodSeconds: 20
+ tcpSocket:
+ port: 1883
+ restartPolicy: Always
+---
+apiVersion: v1
+kind: Service
+metadata:
+ name: tb-mqtt-transport
+ namespace: thingsboard
+spec:
+ type: LoadBalancer
+ selector:
+ app: tb-mqtt-transport
+ ports:
+ - port: 1883
+ targetPort: 1883
+ name: mqtt
+---
+apiVersion: extensions/v1beta1
+kind: Deployment
+metadata:
+ name: tb-http-transport
+ namespace: thingsboard
+spec:
+ replicas: 2
+ selector:
+ matchLabels:
+ app: tb-http-transport
+ template:
+ metadata:
+ labels:
+ app: tb-http-transport
+ spec:
+ volumes:
+ - name: tb-http-transport-config
+ configMap:
+ name: tb-http-transport-config
+ items:
+ - key: conf
+ path: tb-http-transport.conf
+ - key: logback
+ path: logback.xml
+ containers:
+ - name: server
+ imagePullPolicy: Always
+ image: thingsboard/tb-http-transport:latest
+ ports:
+ - containerPort: 8080
+ name: http
+ env:
+ - name: CLUSTER_NODE_ID
+ valueFrom:
+ fieldRef:
+ fieldPath: metadata.name
+ - name: TB_HOST
+ valueFrom:
+ fieldRef:
+ fieldPath: metadata.name
+ - name: HTTP_BIND_ADDRESS
+ value: "0.0.0.0"
+ - name: HTTP_BIND_PORT
+ value: "8080"
+ - name: HTTP_REQUEST_TIMEOUT
+ value: "60000"
+ - name: TB_KAFKA_SERVERS
+ value: "tb-kafka:9092"
+ volumeMounts:
+ - mountPath: /config
+ name: tb-http-transport-config
+ readinessProbe:
+ periodSeconds: 20
+ tcpSocket:
+ port: 8080
+ livenessProbe:
+ periodSeconds: 20
+ tcpSocket:
+ port: 8080
+ restartPolicy: Always
+---
+apiVersion: v1
+kind: Service
+metadata:
+ name: tb-http-transport
+ namespace: thingsboard
+spec:
+ type: ClusterIP
+ selector:
+ app: tb-http-transport
+ ports:
+ - port: 8080
+ name: http
+---
+apiVersion: extensions/v1beta1
+kind: Deployment
+metadata:
+ name: tb-coap-transport
+ namespace: thingsboard
+spec:
+ replicas: 2
+ selector:
+ matchLabels:
+ app: tb-coap-transport
+ template:
+ metadata:
+ labels:
+ app: tb-coap-transport
+ spec:
+ volumes:
+ - name: tb-coap-transport-config
+ configMap:
+ name: tb-coap-transport-config
+ items:
+ - key: conf
+ path: tb-coap-transport.conf
+ - key: logback
+ path: logback.xml
+ containers:
+ - name: server
+ imagePullPolicy: Always
+ image: thingsboard/tb-coap-transport:latest
+ ports:
+ - containerPort: 5683
+ name: coap
+ protocol: UDP
+ env:
+ - name: CLUSTER_NODE_ID
+ valueFrom:
+ fieldRef:
+ fieldPath: metadata.name
+ - name: TB_HOST
+ valueFrom:
+ fieldRef:
+ fieldPath: metadata.name
+ - name: COAP_BIND_ADDRESS
+ value: "0.0.0.0"
+ - name: COAP_BIND_PORT
+ value: "5683"
+ - name: COAP_TIMEOUT
+ value: "10000"
+ - name: TB_KAFKA_SERVERS
+ value: "tb-kafka:9092"
+ volumeMounts:
+ - mountPath: /config
+ name: tb-coap-transport-config
+ restartPolicy: Always
+---
+apiVersion: v1
+kind: Service
+metadata:
+ name: tb-coap-transport
+ namespace: thingsboard
+spec:
+ type: LoadBalancer
+ selector:
+ app: tb-coap-transport
+ ports:
+ - port: 5683
+ name: coap
+ protocol: UDP
+---
+apiVersion: extensions/v1beta1
+kind: Deployment
+metadata:
+ name: tb-web-ui
+ namespace: thingsboard
+spec:
+ replicas: 2
+ selector:
+ matchLabels:
+ app: tb-web-ui
+ template:
+ metadata:
+ labels:
+ app: tb-web-ui
+ spec:
+ containers:
+ - name: server
+ imagePullPolicy: Always
+ image: thingsboard/tb-web-ui:latest
+ ports:
+ - containerPort: 8080
+ name: http
+ env:
+ - name: HTTP_BIND_ADDRESS
+ value: "0.0.0.0"
+ - name: HTTP_BIND_PORT
+ value: "8080"
+ - name: TB_ENABLE_PROXY
+ value: "false"
+ - name: LOGGER_LEVEL
+ value: "info"
+ - name: LOG_FOLDER
+ value: "logs"
+ - name: LOGGER_FILENAME
+ value: "tb-web-ui-%DATE%.log"
+ - name: DOCKER_MODE
+ value: "true"
+ livenessProbe:
+ httpGet:
+ path: /index.html
+ port: http
+ initialDelaySeconds: 120
+ timeoutSeconds: 10
+ restartPolicy: Always
+---
+apiVersion: v1
+kind: Service
+metadata:
+ name: tb-web-ui
+ namespace: thingsboard
+spec:
+ type: ClusterIP
+ selector:
+ app: tb-web-ui
+ ports:
+ - port: 8080
+ name: http
+---
+apiVersion: extensions/v1beta1
+kind: Ingress
+metadata:
+ name: tb-ingress
+ namespace: thingsboard
+ annotations:
+ nginx.ingress.kubernetes.io/use-regex: "true"
+ nginx.ingress.kubernetes.io/ssl-redirect: "false"
+ nginx.ingress.kubernetes.io/proxy-read-timeout: "3600"
+spec:
+ rules:
+ - http:
+ paths:
+ - path: /api/v1/.*
+ backend:
+ serviceName: tb-http-transport
+ servicePort: 8080
+ - path: /static/rulenode/.*
+ backend:
+ serviceName: tb-node
+ servicePort: 8080
+ - path: /static/.*
+ backend:
+ serviceName: tb-web-ui
+ servicePort: 8080
+ - path: /index.html.*
+ backend:
+ serviceName: tb-web-ui
+ servicePort: 8080
+ - path: /
+ backend:
+ serviceName: tb-web-ui
+ servicePort: 8080
+ - path: /.*
+ backend:
+ serviceName: tb-node
+ servicePort: 8080
+---
\ No newline at end of file