diff --git a/k8s/.env b/k8s/.env index e50e57d9b8..7d185ebc84 100644 --- a/k8s/.env +++ b/k8s/.env @@ -1,5 +1,8 @@ +# Can be either basic (with single instance of Zookeeper, Kafka and Redis) or high-availability (with Zookeeper, Kafka and Redis in cluster modes). +# According to the deployment type corresponding kubernetes resources will be deployed (see content of the directories ./basic and ./high-availability for details). +DEPLOYMENT_TYPE=high-availability -# Database used by ThingsBoard, can be either postgres (PostgreSQL) or cassandra (Cassandra). +# Database used by ThingsBoard, can be either postgres (PostgreSQL) or hybrid (PostgreSQL for entities database and Cassandra for timeseries database). # 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 index 6e888352dc..24520dd68c 100644 --- a/k8s/README.md +++ b/k8s/README.md @@ -20,7 +20,7 @@ $ minikube addons enable ingress ## Installation -Before performing initial installation you can configure the type of database to be used with ThingsBoard. +Before performing initial installation you can configure the type of database to be used with ThingsBoard and the type of deployment. In order to set database type change the value of `DATABASE` variable in `.env` file to one of the following: - `postgres` - use PostgreSQL database; @@ -28,6 +28,13 @@ In order to set database type change the value of `DATABASE` variable in `.env` **NOTE**: According to the database type corresponding kubernetes resources will be deployed (see `postgres.yml`, `cassandra.yml` for details). +In order to set deployment type change the value of `DEPLOYMENT_TYPE` variable in `.env` file to one of the following: + +- `basic` - start up with single instance of Zookeeper, Kafka and Redis; +- `high-availability` - start up with Zookeeper, Kafka and Redis in cluster modes; + +**NOTE**: According to the deployment type corresponding kubernetes resources will be deployed (see content of the directories `./basic` and `./high-availability` for details). + Execute the following command to run installation: ` @@ -46,19 +53,7 @@ Execute the following command to deploy thirdparty resources: $ ./k8s-deploy-thirdparty.sh ` -Get list of the running tb-redis pods and verify that all of them are in running state: - -` -$ kubectl get pods -l app=tb-redis -` - -Execute the following command to create redis cluster: - -` -$ kubectl exec -it tb-redis-0 -- redis-cli --cluster create --cluster-replicas 1 $(kubectl get pods -l app=tb-redis -o jsonpath='{range.items[*]}{.status.podIP}:6379 ') -` - -Type **'yes'** when prompted. +Type **'yes'** when prompted, if you are running ThingsBoard in `high-availability` `DEPLOYMENT_TYPE` for the first time and don't have configured Redis cluster. Execute the following command to deploy resources: @@ -102,12 +97,18 @@ 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: +Execute the following command to delete all ThingsBoard microservices: ` $ ./k8s-delete-resources.sh ` +Execute the following command to delete all thirdparty microservices: + +` +$ ./k8s-delete-thirdparty.sh +` + Execute the following command to delete all resources (including database): ` diff --git a/k8s/tb-node-cassandra-configmap.yml b/k8s/basic/tb-node-cache-configmap.yml similarity index 77% rename from k8s/tb-node-cassandra-configmap.yml rename to k8s/basic/tb-node-cache-configmap.yml index 3891d6b6c5..707247cd66 100644 --- a/k8s/tb-node-cassandra-configmap.yml +++ b/k8s/basic/tb-node-cache-configmap.yml @@ -17,12 +17,10 @@ apiVersion: v1 kind: ConfigMap metadata: - name: tb-node-db-config + name: tb-node-cache-config namespace: thingsboard labels: - name: tb-node-db-config + name: tb-node-cache-config data: - DATABASE_TS_TYPE: cassandra - DATABASE_ENTITIES_TYPE: cassandra - CASSANDRA_URL: cassandra:9042 - CASSANDRA_SOCKET_READ_TIMEOUT: "60000" + CACHE_TYPE: redis + REDIS_HOST: tb-redis \ No newline at end of file diff --git a/k8s/basic/thirdparty.yml b/k8s/basic/thirdparty.yml new file mode 100644 index 0000000000..62818a1fb1 --- /dev/null +++ b/k8s/basic/thirdparty.yml @@ -0,0 +1,181 @@ +# +# Copyright © 2016-2020 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: apps/v1 +kind: Deployment +metadata: + name: zookeeper + namespace: thingsboard +spec: + selector: + matchLabels: + app: zookeeper + 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: + initialDelaySeconds: 15 + 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: apps/v1 +kind: Deployment +metadata: + name: tb-kafka + namespace: thingsboard +spec: + selector: + matchLabels: + app: tb-kafka + template: + metadata: + labels: + app: tb-kafka + spec: + containers: + - name: server + imagePullPolicy: Always + image: wurstmeister/kafka:2.12-2.2.1 + ports: + - containerPort: 9092 + readinessProbe: + periodSeconds: 20 + tcpSocket: + port: 9092 + livenessProbe: + initialDelaySeconds: 25 + 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: apps/v1 +kind: Deployment +metadata: + name: tb-redis + namespace: thingsboard +spec: + selector: + matchLabels: + app: tb-redis + 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 +--- \ No newline at end of file diff --git a/k8s/cassandra.yml b/k8s/common/cassandra.yml similarity index 100% rename from k8s/cassandra.yml rename to k8s/common/cassandra.yml diff --git a/k8s/database-setup.yml b/k8s/common/database-setup.yml similarity index 100% rename from k8s/database-setup.yml rename to k8s/common/database-setup.yml diff --git a/k8s/postgres.yml b/k8s/common/postgres.yml similarity index 98% rename from k8s/postgres.yml rename to k8s/common/postgres.yml index 08c7fe8d66..1ec7466408 100644 --- a/k8s/postgres.yml +++ b/k8s/common/postgres.yml @@ -51,7 +51,7 @@ spec: containers: - name: postgres imagePullPolicy: Always - image: postgres:10 + image: postgres:12 ports: - containerPort: 5432 name: postgres diff --git a/k8s/tb-coap-transport-configmap.yml b/k8s/common/tb-coap-transport-configmap.yml similarity index 100% rename from k8s/tb-coap-transport-configmap.yml rename to k8s/common/tb-coap-transport-configmap.yml diff --git a/k8s/tb-http-transport-configmap.yml b/k8s/common/tb-http-transport-configmap.yml similarity index 100% rename from k8s/tb-http-transport-configmap.yml rename to k8s/common/tb-http-transport-configmap.yml diff --git a/k8s/tb-mqtt-transport-configmap.yml b/k8s/common/tb-mqtt-transport-configmap.yml similarity index 100% rename from k8s/tb-mqtt-transport-configmap.yml rename to k8s/common/tb-mqtt-transport-configmap.yml diff --git a/k8s/tb-namespace.yml b/k8s/common/tb-namespace.yml similarity index 100% rename from k8s/tb-namespace.yml rename to k8s/common/tb-namespace.yml diff --git a/k8s/tb-node-configmap.yml b/k8s/common/tb-node-configmap.yml similarity index 100% rename from k8s/tb-node-configmap.yml rename to k8s/common/tb-node-configmap.yml diff --git a/k8s/common/tb-node-hybrid-configmap.yml b/k8s/common/tb-node-hybrid-configmap.yml new file mode 100644 index 0000000000..43f78b36a5 --- /dev/null +++ b/k8s/common/tb-node-hybrid-configmap.yml @@ -0,0 +1,32 @@ +# +# Copyright © 2016-2020 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: + 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 + DATABASE_TS_TYPE: cassandra + CASSANDRA_URL: cassandra:9042 + CASSANDRA_SOCKET_READ_TIMEOUT: "60000" diff --git a/k8s/tb-node-postgres-configmap.yml b/k8s/common/tb-node-postgres-configmap.yml similarity index 97% rename from k8s/tb-node-postgres-configmap.yml rename to k8s/common/tb-node-postgres-configmap.yml index 468536bc82..300ac676d0 100644 --- a/k8s/tb-node-postgres-configmap.yml +++ b/k8s/common/tb-node-postgres-configmap.yml @@ -23,7 +23,6 @@ metadata: 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 diff --git a/k8s/common/tb-node.yml b/k8s/common/tb-node.yml new file mode 100644 index 0000000000..7d90153eb7 --- /dev/null +++ b/k8s/common/tb-node.yml @@ -0,0 +1,98 @@ +# +# Copyright © 2016-2020 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: apps/v1 +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: TB_SERVICE_ID + valueFrom: + fieldRef: + fieldPath: metadata.name + - name: TB_SERVICE_TYPE + value: "monolith" + - name: TB_QUEUE_TYPE + value: "kafka" + - 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: HTTP_LOG_CONTROLLER_ERROR_STACK_TRACE + value: "false" + envFrom: + - configMapRef: + name: tb-node-db-config + - configMapRef: + name: tb-node-cache-config + volumeMounts: + - mountPath: /config + name: tb-node-config + livenessProbe: + httpGet: + path: /login + port: http + initialDelaySeconds: 300 + 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 \ No newline at end of file diff --git a/k8s/thingsboard.yml b/k8s/common/thingsboard.yml similarity index 78% rename from k8s/thingsboard.yml rename to k8s/common/thingsboard.yml index d1f598b6d3..af4ff0d678 100644 --- a/k8s/thingsboard.yml +++ b/k8s/common/thingsboard.yml @@ -35,7 +35,7 @@ spec: image: thingsboard/tb-js-executor:latest env: - name: REMOTE_JS_EVAL_REQUEST_TOPIC - value: "js.eval.requests" + value: "js_eval.requests" - name: TB_KAFKA_SERVERS value: "tb-kafka:9092" - name: LOGGER_LEVEL @@ -52,93 +52,6 @@ spec: --- apiVersion: apps/v1 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: TB_SERVICE_ID - valueFrom: - fieldRef: - fieldPath: metadata.name - - name: TB_SERVICE_TYPE - value: "monolith" - - 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: REDIS_CONNECTION_TYPE - value: "cluster" - - name: REDIS_NODES - value: "tb-redis:6379" - - 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: apps/v1 -kind: Deployment metadata: name: tb-mqtt-transport namespace: thingsboard @@ -173,8 +86,8 @@ spec: valueFrom: fieldRef: fieldPath: metadata.name - - name: TB_SERVICE_TYPE - value: "monolith" + - name: TB_QUEUE_TYPE + value: "kafka" - name: MQTT_BIND_ADDRESS value: "0.0.0.0" - name: MQTT_BIND_PORT @@ -191,6 +104,7 @@ spec: tcpSocket: port: 1883 livenessProbe: + initialDelaySeconds: 120 periodSeconds: 20 tcpSocket: port: 1883 @@ -246,8 +160,8 @@ spec: valueFrom: fieldRef: fieldPath: metadata.name - - name: TB_SERVICE_TYPE - value: "monolith" + - name: TB_QUEUE_TYPE + value: "kafka" - name: HTTP_BIND_ADDRESS value: "0.0.0.0" - name: HTTP_BIND_PORT @@ -264,6 +178,7 @@ spec: tcpSocket: port: 8080 livenessProbe: + initialDelaySeconds: 120 periodSeconds: 20 tcpSocket: port: 8080 @@ -319,8 +234,8 @@ spec: valueFrom: fieldRef: fieldPath: metadata.name - - name: TB_SERVICE_TYPE - value: "monolith" + - name: TB_QUEUE_TYPE + value: "kafka" - name: COAP_BIND_ADDRESS value: "0.0.0.0" - name: COAP_BIND_PORT @@ -423,17 +338,33 @@ spec: backend: serviceName: tb-http-transport servicePort: 8080 + - path: /api/.* + backend: + serviceName: tb-node + servicePort: 8080 + - path: /swagger.* + backend: + serviceName: tb-node + servicePort: 8080 + - path: /webjars.* + backend: + serviceName: tb-node + servicePort: 8080 + - path: /v2/.* + backend: + serviceName: tb-node + servicePort: 8080 - path: /static/rulenode/.* backend: serviceName: tb-node servicePort: 8080 - - path: /static/.* + - path: /oauth2/.* backend: - serviceName: tb-web-ui + serviceName: tb-node servicePort: 8080 - - path: /index.html.* + - path: /login/oauth2/.* backend: - serviceName: tb-web-ui + serviceName: tb-node servicePort: 8080 - path: / backend: @@ -441,6 +372,6 @@ spec: servicePort: 8080 - path: /.* backend: - serviceName: tb-node + serviceName: tb-web-ui servicePort: 8080 ---- \ No newline at end of file +--- diff --git a/k8s/high-availability/tb-node-cache-configmap.yml b/k8s/high-availability/tb-node-cache-configmap.yml new file mode 100644 index 0000000000..d58d7688ae --- /dev/null +++ b/k8s/high-availability/tb-node-cache-configmap.yml @@ -0,0 +1,27 @@ +# +# Copyright © 2016-2020 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-cache-config + namespace: thingsboard + labels: + name: tb-node-cache-config +data: + CACHE_TYPE: redis + REDIS_CONNECTION_TYPE: cluster + REDIS_NODES: tb-redis:6379 \ No newline at end of file diff --git a/k8s/thirdparty.yml b/k8s/high-availability/thirdparty.yml similarity index 98% rename from k8s/thirdparty.yml rename to k8s/high-availability/thirdparty.yml index 2638bf0af5..06ff285cf1 100644 --- a/k8s/thirdparty.yml +++ b/k8s/high-availability/thirdparty.yml @@ -169,7 +169,7 @@ spec: - name: KAFKA_CONTROLLER_SHUTDOWN_ENABLE value: "true" - 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" + 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 diff --git a/k8s/k8s-delete-resources.sh b/k8s/k8s-delete-resources.sh index 21efc56bc7..a815f8025c 100755 --- a/k8s/k8s-delete-resources.sh +++ b/k8s/k8s-delete-resources.sh @@ -17,6 +17,9 @@ set -e +source .env + kubectl config set-context $(kubectl config current-context) --namespace=thingsboard -kubectl delete -f thingsboard.yml -kubectl delete -f thirdparty.yml + +kubectl delete -f common/thingsboard.yml +kubectl delete -f common/tb-node.yml diff --git a/k8s/k8s-delete-thirdparty.sh b/k8s/k8s-delete-thirdparty.sh index a93b2b809e..e46e4973d5 100755 --- a/k8s/k8s-delete-thirdparty.sh +++ b/k8s/k8s-delete-thirdparty.sh @@ -17,5 +17,7 @@ set -e +source .env + kubectl config set-context $(kubectl config current-context) --namespace=thingsboard -kubectl delete -f thirdparty.yml +kubectl delete -f $DEPLOYMENT_TYPE/thirdparty.yml diff --git a/k8s/k8s-deploy-resources.sh b/k8s/k8s-deploy-resources.sh index 6a2deb31b4..14d12a6760 100755 --- a/k8s/k8s-deploy-resources.sh +++ b/k8s/k8s-deploy-resources.sh @@ -17,10 +17,14 @@ set -e -kubectl apply -f tb-namespace.yml +source .env + +kubectl apply -f common/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 +kubectl apply -f common/tb-node-configmap.yml +kubectl apply -f common/tb-mqtt-transport-configmap.yml +kubectl apply -f common/tb-http-transport-configmap.yml +kubectl apply -f common/tb-coap-transport-configmap.yml +kubectl apply -f common/thingsboard.yml +kubectl apply -f $DEPLOYMENT_TYPE/tb-node-cache-configmap.yml +kubectl apply -f common/tb-node.yml diff --git a/k8s/k8s-deploy-thirdparty.sh b/k8s/k8s-deploy-thirdparty.sh index adc526506a..f530fb2903 100755 --- a/k8s/k8s-deploy-thirdparty.sh +++ b/k8s/k8s-deploy-thirdparty.sh @@ -17,6 +17,29 @@ set -e -kubectl apply -f tb-namespace.yml +source .env + +kubectl apply -f common/tb-namespace.yml kubectl config set-context $(kubectl config current-context) --namespace=thingsboard -kubectl apply -f thirdparty.yml + +kubectl apply -f $DEPLOYMENT_TYPE/thirdparty.yml + + +if [ "$DEPLOYMENT_TYPE" == "high-availability" ]; then + echo -n "waiting for all redis pods to be ready"; + while [[ $(kubectl get pods tb-redis-5 -o 'jsonpath={..status.conditions[?(@.type=="Ready")].status}' 2>/dev/null) != "True" ]]; + do + echo -n "." && sleep 5; + done + + if [[ $(kubectl exec -it tb-redis-0 -- redis-cli cluster info 2>&1 | head -n 1) =~ "cluster_state:ok" ]] + then + echo "redis cluster is already configured" + else + echo "starting redis cluster" + redisNodes=$(kubectl get pods -l app=tb-redis -o jsonpath='{range.items[*]}{.status.podIP}:6379 ') + kubectl exec -it tb-redis-0 -- redis-cli --cluster create --cluster-replicas 1 $redisNodes + fi + +fi + diff --git a/k8s/k8s-install-tb.sh b/k8s/k8s-install-tb.sh index 1702a5b3b5..4559dd4560 100755 --- a/k8s/k8s-install-tb.sh +++ b/k8s/k8s-install-tb.sh @@ -19,8 +19,8 @@ function installTb() { loadDemo=$1 - kubectl apply -f tb-node-configmap.yml - kubectl apply -f database-setup.yml && + kubectl apply -f common/tb-node-configmap.yml + kubectl apply -f common/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 /tmp/install-finished;' @@ -30,17 +30,19 @@ function installTb() { function installPostgres() { - kubectl apply -f postgres.yml - kubectl apply -f tb-node-postgres-configmap.yml + kubectl apply -f common/postgres.yml + kubectl apply -f common/tb-node-postgres-configmap.yml kubectl rollout status deployment/postgres } -function installCassandra() { +function installHybrid() { - kubectl apply -f cassandra.yml - kubectl apply -f tb-node-cassandra-configmap.yml + kubectl apply -f common/postgres.yml + kubectl apply -f common/cassandra.yml + kubectl apply -f common/tb-node-hybrid-configmap.yml + kubectl rollout status deployment/postgres kubectl rollout status statefulset/cassandra kubectl exec -it cassandra-0 -- bash -c "cqlsh -e \ @@ -75,19 +77,30 @@ fi source .env -kubectl apply -f tb-namespace.yml +kubectl apply -f common/tb-namespace.yml kubectl config set-context $(kubectl config current-context) --namespace=thingsboard +case $DEPLOYMENT_TYPE in + basic) + ;; + high-availability) + ;; + *) + echo "Unknown DEPLOYMENT_TYPE value specified: '${DEPLOYMENT_TYPE}'. Should be either basic or high-availability." >&2 + exit 1 +esac + case $DATABASE in postgres) installPostgres installTb ${loadDemo} ;; - cassandra) - installCassandra + hybrid) + installHybrid installTb ${loadDemo} ;; *) - echo "Unknown DATABASE value specified: '${DATABASE}'. Should be either postgres or cassandra." >&2 + echo "Unknown DATABASE value specified: '${DATABASE}'. Should be either postgres or hybrid." >&2 exit 1 esac + diff --git a/k8s/k8s-upgrade-tb.sh b/k8s/k8s-upgrade-tb.sh index a97db5ea97..d814a15f90 100755 --- a/k8s/k8s-upgrade-tb.sh +++ b/k8s/k8s-upgrade-tb.sh @@ -36,7 +36,7 @@ else fromVersion="${FROM_VERSION// }" fi -kubectl apply -f database-setup.yml && +kubectl apply -f common/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 /tmp/install-finished;' diff --git a/msa/js-executor/package-lock.json b/msa/js-executor/package-lock.json index d431a03b7d..06d0434cfe 100644 --- a/msa/js-executor/package-lock.json +++ b/msa/js-executor/package-lock.json @@ -1428,7 +1428,7 @@ }, "enabled": { "version": "1.0.2", - "resolved": "http://registry.npmjs.org/enabled/-/enabled-1.0.2.tgz", + "resolved": "https://registry.npmjs.org/enabled/-/enabled-1.0.2.tgz", "integrity": "sha1-ll9lE9LC0cX0ZStkouM5ZGf8L5M=", "requires": { "env-variable": "0.0.x" @@ -1779,7 +1779,7 @@ }, "fecha": { "version": "2.3.3", - "resolved": "http://registry.npmjs.org/fecha/-/fecha-2.3.3.tgz", + "resolved": "https://registry.npmjs.org/fecha/-/fecha-2.3.3.tgz", "integrity": "sha512-lUGBnIamTAwk4znq5BcqsDaxSmZ9nDVJaij6NvRt/Tg4R69gERA+otPKbS86ROw9nxVMw2/mp1fnaiWqbs6Sdg==" }, "file-stream-rotator": { @@ -2486,7 +2486,7 @@ }, "get-stream": { "version": "3.0.0", - "resolved": "http://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", "dev": true }, @@ -2611,7 +2611,7 @@ }, "got": { "version": "6.7.1", - "resolved": "http://registry.npmjs.org/got/-/got-6.7.1.tgz", + "resolved": "https://registry.npmjs.org/got/-/got-6.7.1.tgz", "integrity": "sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA=", "dev": true, "requires": { @@ -2934,7 +2934,7 @@ }, "is-obj": { "version": "1.0.1", - "resolved": "http://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", "dev": true }, @@ -3618,7 +3618,7 @@ }, "path-is-absolute": { "version": "1.0.1", - "resolved": "http://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", "dev": true }, @@ -4175,7 +4175,7 @@ }, "safe-regex": { "version": "1.1.0", - "resolved": "http://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", "dev": true, "requires": { @@ -4588,7 +4588,7 @@ }, "strip-eof": { "version": "1.0.0", - "resolved": "http://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", "dev": true }, diff --git a/ui-ngx/package-lock.json b/ui-ngx/package-lock.json index bafaa1c0c2..f3bc4552d6 100644 --- a/ui-ngx/package-lock.json +++ b/ui-ngx/package-lock.json @@ -4858,6 +4858,7 @@ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "dev": true, + "optional": true, "requires": { "kind-of": "^6.0.0" } @@ -5751,6 +5752,7 @@ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "dev": true, + "optional": true, "requires": { "kind-of": "^6.0.0" } @@ -5760,6 +5762,7 @@ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "dev": true, + "optional": true, "requires": { "kind-of": "^6.0.0" } @@ -5882,6 +5885,7 @@ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, + "optional": true, "requires": { "ms": "2.0.0" } @@ -5968,6 +5972,7 @@ "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", "dev": true, + "optional": true, "requires": { "find-up": "^4.0.0" }