Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions k8s/00-configmaps.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
apiVersion: v1
data:
CACHE: redis
JAVA_OPTS: -Xms2G -Xmx4G -XX:+UseG1GC
TB_QUEUE_TYPE: kafka
kind: ConfigMap
metadata:
name: thingsboard-config
namespace: thingsboard
4 changes: 4 additions & 0 deletions k8s/00-namespace.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
apiVersion: v1
kind: Namespace
metadata:
name: thingsboard
10 changes: 10 additions & 0 deletions k8s/00-secrets.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
apiVersion: v1
data:
# Base64 encoded values - update these with your actual values
# Example: echo -n "kafka:9092" | base64
KAFKA_BROKER_LIST: a2Fma2E6OTA5Mg== # kafka:9092
KAFKA_ZOOKEEPER_CONNECT: em9va2VlcGVyOjIxODE= # zookeeper:2181
kind: Secret
metadata:
name: kafka-secret
namespace: thingsboard
76 changes: 76 additions & 0 deletions k8s/01-postgres.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
apiVersion: v1
kind: Service
metadata:
name: thingsboard-pg-postgresql
namespace: thingsboard
labels:
app: postgresql
spec:
ports:
- name: postgresql
port: 5432
targetPort: 5432
selector:
app: postgresql
type: ClusterIP

---
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: thingsboard-pg-postgresql
namespace: thingsboard
spec:
serviceName: thingsboard-pg-postgresql
replicas: 1
selector:
matchLabels:
app: postgresql
template:
metadata:
labels:
app: postgresql
spec:
initContainers:
- name: fix-permissions
image: busybox:1.35
command: ['sh', '-c', 'chmod -R 777 /bitnami/postgresql && chown -R 1001:1001 /bitnami/postgresql']
volumeMounts:
- name: data
mountPath: /bitnami/postgresql
securityContext:
runAsUser: 0
containers:
- name: postgresql
image: bitnamilegacy/postgresql:14.13.0-debian-12-r8
env:
- name: POSTGRESQL_USERNAME
value: "postgres"
- name: POSTGRESQL_PASSWORD
value: "CHANGE_ME" # Set your PostgreSQL password here
- name: POSTGRESQL_DATABASE
value: "thingsboard"
- name: PGDATA
value: "/bitnami/postgresql/data"
ports:
- containerPort: 5432
name: postgresql
volumeMounts:
- name: data
mountPath: /bitnami/postgresql
resources:
requests:
memory: "512Mi"
cpu: "250m"
limits:
memory: "2Gi"
cpu: "1000m"
volumeClaimTemplates:
- metadata:
name: data
spec:
accessModes: [ "ReadWriteOnce" ]
resources:
requests:
storage: 8Gi
storageClassName: standard # Change to your storage class
51 changes: 51 additions & 0 deletions k8s/02-zookeeper.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
apiVersion: v1
kind: Service
metadata:
name: zookeeper
namespace: thingsboard
labels:
app: zookeeper
spec:
ports:
- port: 2181
targetPort: 2181
selector:
app: zookeeper

---
apiVersion: apps/v1
kind: Deployment
metadata:
name: zookeeper
namespace: thingsboard
spec:
replicas: 1
selector:
matchLabels:
app: zookeeper
template:
metadata:
labels:
app: zookeeper
spec:
containers:
- name: zookeeper
image: zookeeper:3.8.1
ports:
- containerPort: 2181
env:
- name: ZOO_MY_ID
value: "1"
- name: ZOO_SERVERS
value: "server.1=0.0.0.0:2888:3888;2181"
- name: ZOO_ADMINSERVER_ENABLED
value: "false"
- name: ZOO_LISTEN_ADDRESS
value: "0.0.0.0"
resources:
requests:
memory: "512Mi"
cpu: "250m"
limits:
memory: "1Gi"
cpu: "500m"
58 changes: 58 additions & 0 deletions k8s/03-kafka.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
apiVersion: v1
kind: Service
metadata:
name: kafka
namespace: thingsboard
labels:
app: kafka
spec:
ports:
- name: client
port: 9092
targetPort: 9092
selector:
app: kafka

---
apiVersion: apps/v1
kind: Deployment
metadata:
name: kafka
namespace: thingsboard
spec:
replicas: 1
selector:
matchLabels:
app: kafka
template:
metadata:
labels:
app: kafka
spec:
containers:
- name: kafka
image: wurstmeister/kafka:2.13-2.8.1
ports:
- containerPort: 9092
env:
- name: KAFKA_BROKER_ID
value: "1"
- name: KAFKA_ZOOKEEPER_CONNECT
value: "zookeeper:2181"
- name: KAFKA_LISTENERS
value: "PLAINTEXT://0.0.0.0:9092"
- name: KAFKA_ADVERTISED_LISTENERS
value: "PLAINTEXT://kafka:9092"
- name: KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR
value: "1"
- name: KAFKA_AUTO_CREATE_TOPICS_ENABLE
value: "true"
- name: KAFKA_PORT
value: "9092"
resources:
requests:
memory: "1Gi"
cpu: "500m"
limits:
memory: "2Gi"
cpu: "1000m"
44 changes: 44 additions & 0 deletions k8s/04-redis.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
apiVersion: v1
kind: Service
metadata:
name: redis
namespace: thingsboard
labels:
app: redis
spec:
ports:
- name: redis
port: 6379
targetPort: 6379
selector:
app: redis

---
apiVersion: apps/v1
kind: Deployment
metadata:
name: redis
namespace: thingsboard
spec:
replicas: 1
selector:
matchLabels:
app: redis
template:
metadata:
labels:
app: redis
spec:
containers:
- name: redis
image: redis:7-alpine
ports:
- containerPort: 6379
resources:
requests:
memory: "256Mi"
cpu: "100m"
limits:
memory: "512Mi"
cpu: "500m"

112 changes: 112 additions & 0 deletions k8s/05-tb-core.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,112 @@
apiVersion: v1
kind: Service
metadata:
name: tb-core
namespace: thingsboard
labels:
app: tb-core
spec:
ports:
- name: http
port: 8080
targetPort: 8080
- name: grpc
port: 7070
targetPort: 7070
selector:
app: tb-core

---
apiVersion: apps/v1
kind: Deployment
metadata:
name: tb-core1
namespace: thingsboard
spec:
replicas: 1
selector:
matchLabels:
app: tb-core
instance: tb-core1
template:
metadata:
labels:
app: tb-core
instance: tb-core1
spec:
initContainers:
- name: wait-for-db
image: postgres:14
command: ['sh', '-c', 'until pg_isready -h thingsboard-pg-postgresql -p 5432 -U postgres; do echo waiting for database; sleep 2; done;']
resources:
requests:
memory: "64Mi"
cpu: "50m"
limits:
memory: "128Mi"
cpu: "100m"
- name: create-log-dir
image: busybox
command: ['sh', '-c', 'mkdir -p /var/log/thingsboard && chmod 777 /var/log/thingsboard']
resources:
requests:
memory: "64Mi"
cpu: "50m"
limits:
memory: "128Mi"
cpu: "100m"
volumeMounts:
- name: tb-logs
mountPath: /var/log/thingsboard
containers:
- name: tb-core
image: thingsboard/tb-node:4.2.0
ports:
- containerPort: 8080
- containerPort: 7070
env:
- name: TB_SERVICE_ID
value: "tb-core1"
- name: TB_SERVICE_TYPE
value: "tb-core"
- name: EDGES_ENABLED
value: "true"
- name: TB_QUEUE_TYPE
value: "kafka"
- name: TB_KAFKA_SERVERS
value: "kafka:9092"
- name: TB_CACHE_TYPE
value: "redis"
- name: REDIS_HOST
value: "redis"
- name: REDIS_PORT
value: "6379"
- name: SPRING_DATASOURCE_URL
value: "jdbc:postgresql://thingsboard-pg-postgresql:5432/thingsboard"
- name: SPRING_DATASOURCE_USERNAME
value: "postgres"
- name: SPRING_DATASOURCE_PASSWORD
value: "CHANGE_ME" # Must match PostgreSQL password
- name: SPRING_JPA_DATABASE_PLATFORM
value: "org.hibernate.dialect.PostgreSQLDialect"
- name: DATABASE_TS_TYPE
value: "sql"
- name: TB_QUEUE_KAFKA_REPLICATION_FACTOR
value: "1"
- name: HTTP_LOG_CONTROLLER_ERROR_STACK_TRACE
value: "false"
- name: JAVA_OPTS
value: "-Xms2G -Xmx4G -XX:+UseG1GC -XX:MaxGCPauseMillis=500"
volumeMounts:
- name: tb-logs
mountPath: /var/log/thingsboard
resources:
requests:
memory: "2Gi"
cpu: "1000m"
limits:
memory: "4Gi"
cpu: "2000m"
volumes:
- name: tb-logs
emptyDir: {}
Loading