47 changed files with 637 additions and 434 deletions
@ -0,0 +1,21 @@ |
|||
#!/bin/bash |
|||
# |
|||
# 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. |
|||
# |
|||
|
|||
set -e |
|||
|
|||
kubectl config set-context $(kubectl config current-context) --namespace=thingsboard |
|||
kubectl delete -f thirdparty.yml |
|||
@ -0,0 +1,22 @@ |
|||
#!/bin/bash |
|||
# |
|||
# 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. |
|||
# |
|||
|
|||
set -e |
|||
|
|||
kubectl apply -f tb-namespace.yml |
|||
kubectl config set-context $(kubectl config current-context) --namespace=thingsboard |
|||
kubectl apply -f thirdparty.yml |
|||
@ -0,0 +1,286 @@ |
|||
# |
|||
# 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: StatefulSet |
|||
metadata: |
|||
name: zookeeper |
|||
namespace: thingsboard |
|||
spec: |
|||
serviceName: "zookeeper" |
|||
replicas: 3 |
|||
podManagementPolicy: Parallel |
|||
selector: |
|||
matchLabels: |
|||
app: zookeeper |
|||
template: |
|||
metadata: |
|||
labels: |
|||
app: zookeeper |
|||
spec: |
|||
containers: |
|||
- name: zookeeper |
|||
imagePullPolicy: Always |
|||
image: zookeeper:3.5 |
|||
ports: |
|||
- containerPort: 2181 |
|||
name: client |
|||
- containerPort: 2888 |
|||
name: server |
|||
- containerPort: 3888 |
|||
name: election |
|||
readinessProbe: |
|||
periodSeconds: 60 |
|||
tcpSocket: |
|||
port: 2181 |
|||
livenessProbe: |
|||
periodSeconds: 60 |
|||
tcpSocket: |
|||
port: 2181 |
|||
env: |
|||
- name: ZOO_SERVERS |
|||
value: "server.0=zookeeper-0.zookeeper:2888:3888;2181 server.1=zookeeper-1.zookeeper:2888:3888;2181 server.2=zookeeper-2.zookeeper:2888:3888;2181" |
|||
- name: JVMFLAGS |
|||
value: "-Dzookeeper.electionPortBindRetry=0" |
|||
volumeMounts: |
|||
- name: data |
|||
mountPath: /data |
|||
readOnly: false |
|||
initContainers: |
|||
- command: |
|||
- /bin/bash |
|||
- -c |
|||
- |- |
|||
set -ex; |
|||
mkdir -p "$ZOO_DATA_LOG_DIR" "$ZOO_DATA_DIR" "$ZOO_CONF_DIR"; |
|||
chown "$ZOO_USER:$ZOO_USER" "$ZOO_DATA_LOG_DIR" "$ZOO_DATA_DIR" "$ZOO_CONF_DIR" |
|||
if [[ ! -f "$ZOO_DATA_DIR/myid" ]]; then |
|||
echo $HOSTNAME| rev | cut -d "-" -f1 | rev > "$ZOO_DATA_DIR/myid" |
|||
fi |
|||
env: |
|||
- name: HOSTNAME |
|||
valueFrom: |
|||
fieldRef: |
|||
fieldPath: metadata.name |
|||
image: zookeeper:3.5 |
|||
imagePullPolicy: IfNotPresent |
|||
name: zookeeper-init |
|||
securityContext: |
|||
runAsUser: 0 |
|||
volumeMounts: |
|||
- name: data |
|||
mountPath: /data |
|||
readOnly: false |
|||
volumeClaimTemplates: |
|||
- metadata: |
|||
name: data |
|||
spec: |
|||
accessModes: [ "ReadWriteOnce" ] |
|||
resources: |
|||
requests: |
|||
storage: 1Gi |
|||
--- |
|||
apiVersion: v1 |
|||
kind: Service |
|||
metadata: |
|||
name: zookeeper |
|||
namespace: thingsboard |
|||
spec: |
|||
type: ClusterIP |
|||
ports: |
|||
- port: 2181 |
|||
targetPort: 2181 |
|||
name: client |
|||
- port: 2888 |
|||
targetPort: 2888 |
|||
name: server |
|||
- port: 3888 |
|||
targetPort: 3888 |
|||
name: election |
|||
selector: |
|||
app: zookeeper |
|||
--- |
|||
apiVersion: apps/v1 |
|||
kind: StatefulSet |
|||
metadata: |
|||
name: tb-kafka |
|||
namespace: thingsboard |
|||
labels: |
|||
app: tb-kafka |
|||
spec: |
|||
replicas: 3 |
|||
podManagementPolicy: OrderedReady |
|||
serviceName: server |
|||
selector: |
|||
matchLabels: |
|||
app: tb-kafka |
|||
template: |
|||
metadata: |
|||
labels: |
|||
app: tb-kafka |
|||
spec: |
|||
containers: |
|||
- name: tb-kafka |
|||
imagePullPolicy: Always |
|||
image: wurstmeister/kafka:2.12-2.2.1 |
|||
ports: |
|||
- containerPort: 9092 |
|||
readinessProbe: |
|||
periodSeconds: 20 |
|||
tcpSocket: |
|||
port: 9092 |
|||
livenessProbe: |
|||
periodSeconds: 5 |
|||
tcpSocket: |
|||
port: 9092 |
|||
env: |
|||
- name: BROKER_ID_COMMAND |
|||
value: "hostname | cut -d'-' -f3" |
|||
- name: KAFKA_ZOOKEEPER_CONNECT |
|||
value: "zookeeper:2181" |
|||
- name: KAFKA_ADVERTISED_PORT |
|||
value: "9092" |
|||
- name: KAFKA_LISTENERS |
|||
value: "PLAINTEXT://:9092" |
|||
- 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" |
|||
- name: KAFKA_PORT |
|||
value: "9092" |
|||
- name: KAFKA_LOG_DIRS |
|||
value: "/kafka-logs" |
|||
volumeMounts: |
|||
- name: logs |
|||
mountPath: /kafka-logs |
|||
subPath: logs |
|||
volumeClaimTemplates: |
|||
- metadata: |
|||
name: logs |
|||
spec: |
|||
accessModes: |
|||
- ReadWriteOnce |
|||
resources: |
|||
requests: |
|||
storage: 10Gi |
|||
--- |
|||
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: v1 |
|||
kind: ConfigMap |
|||
metadata: |
|||
name: tb-redis |
|||
namespace: thingsboard |
|||
data: |
|||
update-node.sh: | |
|||
#!/bin/sh |
|||
REDIS_NODES="/data/nodes.conf" |
|||
sed -i -e "/myself/ s/[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}/${POD_IP}/" ${REDIS_NODES} |
|||
exec "$@" |
|||
redis.conf: |+ |
|||
cluster-enabled yes |
|||
cluster-require-full-coverage no |
|||
cluster-node-timeout 15000 |
|||
cluster-config-file /data/nodes.conf |
|||
cluster-migration-barrier 1 |
|||
appendonly yes |
|||
protected-mode no |
|||
--- |
|||
apiVersion: apps/v1 |
|||
kind: StatefulSet |
|||
metadata: |
|||
name: tb-redis |
|||
namespace: thingsboard |
|||
spec: |
|||
serviceName: server |
|||
replicas: 6 |
|||
selector: |
|||
matchLabels: |
|||
app: tb-redis |
|||
template: |
|||
metadata: |
|||
labels: |
|||
app: tb-redis |
|||
spec: |
|||
containers: |
|||
- name: redis |
|||
image: redis:5.0.1-alpine |
|||
ports: |
|||
- containerPort: 6379 |
|||
name: client |
|||
- containerPort: 16379 |
|||
name: gossip |
|||
command: ["/conf/update-node.sh", "redis-server", "/conf/redis.conf"] |
|||
env: |
|||
- name: POD_IP |
|||
valueFrom: |
|||
fieldRef: |
|||
fieldPath: status.podIP |
|||
volumeMounts: |
|||
- name: conf |
|||
mountPath: /conf |
|||
readOnly: false |
|||
- name: data |
|||
mountPath: /data |
|||
readOnly: false |
|||
volumes: |
|||
- name: conf |
|||
configMap: |
|||
name: tb-redis |
|||
defaultMode: 0755 |
|||
volumeClaimTemplates: |
|||
- metadata: |
|||
name: data |
|||
spec: |
|||
accessModes: [ "ReadWriteOnce" ] |
|||
resources: |
|||
requests: |
|||
storage: 1Gi |
|||
--- |
|||
apiVersion: v1 |
|||
kind: Service |
|||
metadata: |
|||
name: tb-redis |
|||
namespace: thingsboard |
|||
spec: |
|||
type: ClusterIP |
|||
ports: |
|||
- port: 6379 |
|||
targetPort: 6379 |
|||
name: client |
|||
- port: 16379 |
|||
targetPort: 16379 |
|||
name: gossip |
|||
selector: |
|||
app: tb-redis |
|||
Loading…
Reference in new issue