#
# 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
---