TB-58: k8 base scripts

This commit is contained in:
volodymyr-babak 2017-05-09 16:31:48 +03:00
parent cd11bb6c05
commit b39416232d
9 changed files with 296 additions and 34 deletions

View File

@ -2,4 +2,5 @@
SKIP_SCHEMA_CREATION=false
SKIP_SYSTEM_DATA=false
SKIP_DEMO_DATA=false
SKIP_DEMO_DATA=false
CASSANDRA_URL=db

View File

@ -20,9 +20,13 @@ cp ../../dao/src/main/resources/schema.cql schema.cql
cp ../../dao/src/main/resources/demo-data.cql demo-data.cql
cp ../../dao/src/main/resources/system-data.cql system-data.cql
docker build -t thingsboard/thingsboard-db-schema:1.2.2 -t thingsboard/thingsboard-db-schema:latest .
docker build -t thingsboard/thingsboard-db-schema:k8test .
docker login
docker push thingsboard/thingsboard-db-schema:1.2.2
docker push thingsboard/thingsboard-db-schema:latest
docker push thingsboard/thingsboard-db-schema:k8test
# cleanup
rm schema.cql
rm demo-data.cql
rm system-data.cql

View File

@ -16,7 +16,7 @@
#
until nmap db -p 9042 | grep "9042/tcp open"
until nmap $CASSANDRA_URL -p 9042 | grep "9042/tcp open"
do
echo "Wait for Cassandra..."
sleep 10
@ -24,7 +24,7 @@ done
if [ "$SKIP_SCHEMA_CREATION" == "false" ]; then
echo "Creating 'Thingsboard' keyspace..."
cqlsh db -f /root/schema.cql
cqlsh $CASSANDRA_URL -f /root/schema.cql
if [ "$?" -eq 0 ]; then
echo "'Thingsboard' keyspace was successfully created!"
else
@ -34,7 +34,7 @@ fi
if [ "$SKIP_SYSTEM_DATA" == "false" ]; then
echo "Adding system data..."
cqlsh db -f /root/system-data.cql
cqlsh $CASSANDRA_URL -f /root/system-data.cql
if [ "$?" -eq 0 ]; then
echo "System data was successfully added!"
else
@ -44,7 +44,7 @@ fi
if [ "$SKIP_DEMO_DATA" == "false" ]; then
echo "Adding demo data..."
cqlsh db -f /root/demo-data.cql
cqlsh $CASSANDRA_URL -f /root/demo-data.cql
if [ "$?" -eq 0 ]; then
echo "Demo data was successfully added!"
else

View File

@ -18,9 +18,11 @@
cp ../../application/target/thingsboard.deb thingsboard.deb
docker build -t thingsboard/application:1.2.2 -t thingsboard/application:latest .
docker build -t thingsboard/application:k8test .
docker login
docker push thingsboard/application:1.2.2
docker push thingsboard/application:latest
docker push thingsboard/application:k8test
# cleanup
rm thingsboard.deb

View File

@ -34,6 +34,9 @@ done
# Copying env variables into conf files
printenv | awk -F "=" '{print "export " $1 "='\''" $2 "'\''"}' >> /usr/share/thingsboard/conf/thingsboard.conf
# Set env variable for RPC address
echo "export RPC_HOST='"$(hostname -f)"'" | tee -a /usr/share/thingsboard/conf/thingsboard.conf
cat /usr/share/thingsboard/conf/thingsboard.conf
echo "Starting 'Thingsboard' service..."

134
kubernetes/cassandra.yaml Normal file
View File

@ -0,0 +1,134 @@
apiVersion: v1
kind: Service
metadata:
labels:
app: cassandra
name: cassandra
spec:
clusterIP: None
ports:
- port: 9042
selector:
app: cassandra
---
apiVersion: storage.k8s.io/v1beta1
kind: StorageClass
metadata:
name: regular
provisioner: kubernetes.io/gce-pd
parameters:
type: pd-standard
---
apiVersion: "apps/v1beta1"
kind: StatefulSet
metadata:
name: cassandra
spec:
serviceName: cassandra
replicas: 3
template:
metadata:
labels:
app: cassandra
spec:
affinity:
podAntiAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: "app"
operator: In
values:
- cassandra
topologyKey: "kubernetes.io/hostname"
containers:
- name: cassandra
image: gcr.io/google-samples/cassandra:v12
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: "500m"
memory: 1Gi
requests:
cpu: "500m"
memory: 1Gi
securityContext:
capabilities:
add:
- IPC_LOCK
lifecycle:
preStop:
exec:
command: ["/bin/sh", "-c", "PID=$(pidof java) && kill $PID && while ps -p $PID > /dev/null; do sleep 1; done"]
env:
- name: MAX_HEAP_SIZE
value: 512M
- name: HEAP_NEWSIZE
value: 100M
- name: CASSANDRA_SEEDS
value: "cassandra-0.cassandra.default.svc.cluster.local"
- name: CASSANDRA_CLUSTER_NAME
value: "K8Demo"
- name: CASSANDRA_DC
value: "DC1-K8Demo"
- name: CASSANDRA_RACK
value: "Rack1-K8Demo"
- name: CASSANDRA_AUTO_BOOTSTRAP
value: "false"
- name: POD_IP
valueFrom:
fieldRef:
fieldPath: status.podIP
- name: POD_NAMESPACE
valueFrom:
fieldRef:
fieldPath: metadata.namespace
readinessProbe:
exec:
command:
- /bin/bash
- -c
- /ready-probe.sh
initialDelaySeconds: 15
timeoutSeconds: 5
# These volume mounts are persistent. They are like inline claims,
# but not exactly because the names need to match exactly one of
# the stateful pod volumes.
volumeMounts:
- name: cassandra-data
mountPath: /cassandra_data
- name: cassandra-commitlog
mountPath: /cassandra_commitlog
# These are converted to volume claims by the controller
# and mounted at the paths mentioned above.
# do not use these in production until ssd GCEPersistentDisk or other ssd pd
volumeClaimTemplates:
- metadata:
name: cassandra-data
annotations:
volume.beta.kubernetes.io/storage-class: regular
spec:
accessModes: [ "ReadWriteOnce" ]
resources:
requests:
storage: 2Gi
- metadata:
name: cassandra-commitlog
annotations:
volume.beta.kubernetes.io/storage-class: regular
spec:
accessModes: [ "ReadWriteOnce" ]
resources:
requests:
storage: 1Gi

View File

@ -0,0 +1,22 @@
apiVersion: v1
kind: Pod
metadata:
name: tb-db-schema-deployment
spec:
containers:
- name: tb-db-schema-k8
image: thingsboard/thingsboard-db-schema:k8test
env:
- name: SKIP_SCHEMA_CREATION
value: "false"
- name: SKIP_SYSTEM_DATA
value: "false"
- name : SKIP_DEMO_DATA
value: "false"
- name : CASSANDRA_URL
value: "cassandra"
command:
- sh
- -c
- ./install_schema.sh
restartPolicy: Never

105
kubernetes/thingsboard.yaml Normal file
View File

@ -0,0 +1,105 @@
---
apiVersion: v1
kind: Service
metadata:
name: thingsboard-external
labels:
app: thingsboard-external
spec:
ports:
- port: 8080
name: ui
- port: 1883
name: mqtt
- port: 5683
name: coap
- port: 9001
name: rpc
selector:
app: thingsboard
type: LoadBalancer
---
apiVersion: v1
kind: Service
metadata:
name: thingsboard-headless
labels:
app: thingsboard-headless
spec:
ports:
- port: 8080
name: ui
- port: 1883
name: mqtt
- port: 5683
name: coap
- port: 9001
name: rpc
selector:
app: thingsboard
clusterIP: None
---
apiVersion: v1
kind: ConfigMap
metadata:
name: tb-config
data:
zookeeper.enabled: "true"
zookeeper.url: "zk-headless"
cassandra.url: "cassandra:9042"
---
apiVersion: apps/v1beta1
kind: StatefulSet
metadata:
name: tb
spec:
serviceName: "thingsboard-headless"
replicas: 2
template:
metadata:
labels:
app: thingsboard
spec:
terminationGracePeriodSeconds: 10
affinity:
podAntiAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: "app"
operator: In
values:
- thingsboard-headless
topologyKey: "kubernetes.io/hostname"
containers:
- name: thingsboard
image: thingsboard/application:k8test
ports:
- containerPort: 8080
name: ui
- containerPort: 1883
name: mqtt
- containerPort: 5683
name: coap
- containerPort: 9001
name: rpc
env:
- name: ZOOKEEPER_ENABLED
valueFrom:
configMapKeyRef:
name: tb-config
key: zookeeper.enabled
- name: ZOOKEEPER_URL
valueFrom:
configMapKeyRef:
name: tb-config
key: zookeeper.url
- name : CASSANDRA_URL
valueFrom:
configMapKeyRef:
name: tb-config
key: cassandra.url
command:
- sh
- -c
- ./run_thingsboard.sh

View File

@ -20,7 +20,7 @@ metadata:
name: zk-config
data:
ensemble: "zk-0;zk-1;zk-2"
jvm.heap: "2G"
jvm.heap: "1G"
tick: "2000"
init: "10"
sync: "5"
@ -51,34 +51,25 @@ spec:
app: zk
annotations:
pod.alpha.kubernetes.io/initialized: "true"
scheduler.alpha.kubernetes.io/affinity: >
{
"podAntiAffinity": {
"requiredDuringSchedulingIgnoredDuringExecution": [
{
"labelSelector": {
"matchExpressions": [
{
"key": "app",
"operator": "In",
"values": [ "zk-headless" ]
}
]
},
"topologyKey": "kubernetes.io/hostname"
}
]
}
}
spec:
affinity:
podAntiAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: "app"
operator: In
values:
- zk-headless
topologyKey: "kubernetes.io/hostname"
containers:
- name: k8szk
imagePullPolicy: Always
image: gcr.io/google_samples/k8szk:v1
resources:
requests:
memory: "1Gi"
cpu: "0.5"
memory: "0.5Gi"
cpu: "0.2"
ports:
- containerPort: 2181
name: client
@ -164,4 +155,4 @@ spec:
accessModes: [ "ReadWriteOnce" ]
resources:
requests:
storage: 20Gi
storage: 1Gi