TB-58: k8s feature improvements

This commit is contained in:
volodymyr-babak 2017-05-10 21:01:06 +03:00
parent 73458484c2
commit 08e9e903f3
15 changed files with 141 additions and 180 deletions

View File

@ -0,0 +1,5 @@
FROM cassandra:3.9
COPY ready-probe.sh /
CMD ["cassandra", "-f"]

13
docker/cassandra/Makefile Normal file
View File

@ -0,0 +1,13 @@
VERSION=k8stest
PROJECT=thingsboard
APP=cassandra
all: build
build:
docker build --pull -t ${PROJECT}/${APP}:${VERSION} .
push: build
docker push ${PROJECT}/${APP}:${VERSION}
.PHONY: all build push

View File

@ -1,30 +1,23 @@
apiVersion: v1 apiVersion: v1
kind: Service kind: Service
metadata: metadata:
name: cassandra-headless
labels: labels:
app: cassandra app: cassandra-headless
name: cassandra
spec: spec:
clusterIP: None
ports: ports:
- port: 9042 - port: 9042
name: cql
clusterIP: None
selector: selector:
app: cassandra app: cassandra
--- ---
apiVersion: storage.k8s.io/v1beta1
kind: StorageClass
metadata:
name: regular
provisioner: kubernetes.io/gce-pd
parameters:
type: pd-standard
---
apiVersion: "apps/v1beta1" apiVersion: "apps/v1beta1"
kind: StatefulSet kind: StatefulSet
metadata: metadata:
name: cassandra name: cassandra
spec: spec:
serviceName: cassandra serviceName: cassandra-headless
replicas: 3 replicas: 3
template: template:
metadata: metadata:
@ -39,11 +32,11 @@ spec:
- key: "app" - key: "app"
operator: In operator: In
values: values:
- cassandra - cassandra-headless
topologyKey: "kubernetes.io/hostname" topologyKey: "kubernetes.io/hostname"
containers: containers:
- name: cassandra - name: cassandra
image: gcr.io/google-samples/cassandra:v12 image: thingsboard/cassandra:k8stest
imagePullPolicy: Always imagePullPolicy: Always
ports: ports:
- containerPort: 7000 - containerPort: 7000
@ -77,7 +70,7 @@ spec:
- name: HEAP_NEWSIZE - name: HEAP_NEWSIZE
value: 100M value: 100M
- name: CASSANDRA_SEEDS - name: CASSANDRA_SEEDS
value: "cassandra-0.cassandra.default.svc.cluster.local" value: "cassandra-0.cassandra-headless.default.svc.cluster.local"
- name: CASSANDRA_CLUSTER_NAME - name: CASSANDRA_CLUSTER_NAME
value: "K8Demo" value: "K8Demo"
- name: CASSANDRA_DC - name: CASSANDRA_DC
@ -102,22 +95,16 @@ spec:
- /ready-probe.sh - /ready-probe.sh
initialDelaySeconds: 15 initialDelaySeconds: 15
timeoutSeconds: 5 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: volumeMounts:
- name: cassandra-data - name: cassandra-data
mountPath: /cassandra_data mountPath: /var/lib/cassandra/data
- name: cassandra-commitlog - name: cassandra-commitlog
mountPath: /cassandra_commitlog mountPath: /var/lib/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: volumeClaimTemplates:
- metadata: - metadata:
name: cassandra-data name: cassandra-data
annotations: annotations:
volume.beta.kubernetes.io/storage-class: regular volume.beta.kubernetes.io/storage-class: slow
spec: spec:
accessModes: [ "ReadWriteOnce" ] accessModes: [ "ReadWriteOnce" ]
resources: resources:
@ -126,7 +113,7 @@ spec:
- metadata: - metadata:
name: cassandra-commitlog name: cassandra-commitlog
annotations: annotations:
volume.beta.kubernetes.io/storage-class: regular volume.beta.kubernetes.io/storage-class: slow
spec: spec:
accessModes: [ "ReadWriteOnce" ] accessModes: [ "ReadWriteOnce" ]
resources: resources:

View File

@ -1,6 +1,6 @@
#!/bin/bash #!/bin/bash
#
# Copyright © 2016-2017 The Thingsboard Authors # Copyright 2016 The Kubernetes Authors.
# #
# Licensed under the Apache License, Version 2.0 (the "License"); # Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License. # you may not use this file except in compliance with the License.
@ -13,16 +13,15 @@
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and # See the License for the specific language governing permissions and
# limitations under the License. # limitations under the License.
#
if [[ $(nodetool status | grep $POD_IP) == *"UN"* ]]; then
cp ../../application/target/thingsboard.deb thingsboard.deb if [[ $DEBUG ]]; then
echo "UN";
docker build -t thingsboard/application:k8test . fi
exit 0;
docker login else
if [[ $DEBUG ]]; then
docker push thingsboard/application:k8test echo "Not Up";
fi
# cleanup exit 1;
rm thingsboard.deb fi

View File

@ -0,0 +1,9 @@
---
apiVersion: storage.k8s.io/v1beta1
kind: StorageClass
metadata:
name: slow
provisioner: kubernetes.io/gce-pd
parameters:
type: pd-standard
---

View File

@ -1,31 +0,0 @@
#!/bin/bash
#
# Copyright © 2016-2017 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.
#
command='docker-compose -f docker-compose.yml -f docker-compose.random.yml'
echo "stopping images.."
$command stop
echo "removing stopped images.."
$command rm -f
echo "building images.."
$command build
echo "starting images..."
$command up -d

View File

@ -1,31 +0,0 @@
#!/bin/bash
#
# Copyright © 2016-2017 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.
#
command='docker-compose -f docker-compose.yml -f docker-compose.static.yml'
echo "stopping images.."
$command stop
echo "removing stopped images.."
$command rm -f
echo "building images.."
$command build
echo "starting cassandra, zookeeper, thingsboard-db-schema images..."
$command up -d db zk thingsboard-db-schema

View File

@ -0,0 +1,13 @@
VERSION=k8stest
PROJECT=thingsboard
APP=thingsboard-db-schema
all: build
build:
docker build --pull -t ${PROJECT}/${APP}:${VERSION} .
push: build
docker push ${PROJECT}/${APP}:${VERSION}
.PHONY: all build push

View File

@ -1,32 +0,0 @@
#!/bin/bash
#
# Copyright © 2016-2017 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.
#
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:k8test .
docker login
docker push thingsboard/thingsboard-db-schema:k8test
# cleanup
rm schema.cql
rm demo-data.cql
rm system-data.cql

View File

@ -6,7 +6,7 @@ spec:
containers: containers:
- name: tb-db-schema - name: tb-db-schema
imagePullPolicy: Always imagePullPolicy: Always
image: thingsboard/thingsboard-db-schema:k8test image: thingsboard/thingsboard-db-schema:k8stest
env: env:
- name: SKIP_SCHEMA_CREATION - name: SKIP_SCHEMA_CREATION
value: "false" value: "false"
@ -15,7 +15,7 @@ spec:
- name : SKIP_DEMO_DATA - name : SKIP_DEMO_DATA
value: "false" value: "false"
- name : CASSANDRA_URL - name : CASSANDRA_URL
value: "cassandra" value: "cassandra-headless"
command: command:
- sh - sh
- -c - -c

View File

@ -0,0 +1,13 @@
VERSION=k8stest
PROJECT=thingsboard
APP=application
all: build
build:
docker build --pull -t ${PROJECT}/${APP}:${VERSION} .
push: build
docker push ${PROJECT}/${APP}:${VERSION}
.PHONY: all build push

View File

@ -8,13 +8,11 @@ metadata:
spec: spec:
ports: ports:
- port: 8080 - port: 8080
name: ui-port name: ui
- port: 1883 - port: 1883
name: mqtt-port name: mqtt
- port: 5683 - port: 5683
name: coap-port name: coap
- port: 9001
name: rpc-port
selector: selector:
app: tb app: tb
type: LoadBalancer type: LoadBalancer
@ -27,14 +25,8 @@ metadata:
app: tb-headless app: tb-headless
spec: spec:
ports: ports:
- port: 8080
name: ui-port
- port: 1883
name: mqtt-port
- port: 5683
name: coap-port
- port: 9001 - port: 9001
name: rpc-port name: rpc
selector: selector:
app: tb app: tb
clusterIP: None clusterIP: None
@ -56,7 +48,7 @@ metadata:
data: data:
zookeeper.enabled: "true" zookeeper.enabled: "true"
zookeeper.url: "zk-headless" zookeeper.url: "zk-headless"
cassandra.url: "cassandra:9042" cassandra.url: "cassandra-headless:9042"
--- ---
apiVersion: apps/v1beta1 apiVersion: apps/v1beta1
kind: StatefulSet kind: StatefulSet
@ -84,16 +76,23 @@ spec:
containers: containers:
- name: tb - name: tb
imagePullPolicy: Always imagePullPolicy: Always
image: thingsboard/application:k8test image: thingsboard/application:k8stest
ports: ports:
- containerPort: 8080 - containerPort: 8080
name: ui-port name: ui
- containerPort: 1883 - containerPort: 1883
name: mqtt-port name: mqtt
- containerPort: 5683 - containerPort: 5683
name: coap-port name: coap
- containerPort: 9001 - containerPort: 9001
name: rpc-port name: rpc
resources:
limits:
cpu: "250m"
memory: "500Mi"
requests:
cpu: "250m"
memory: "500Mi"
env: env:
- name: ZOOKEEPER_ENABLED - name: ZOOKEEPER_ENABLED
valueFrom: valueFrom:

View File

@ -1,12 +1,13 @@
VERSION=k8test VERSION=k8stest
PROJECT=thingsboard PROJECT=thingsboard
APP=zk
all: build all: build
build: build:
docker build --pull -t ${PROJECT}/k8szk:${VERSION} . docker build --pull -t ${PROJECT}/${APP}:${VERSION} .
push: build push: build
docker push ${PROJECT}/k8szk:${VERSION} docker push ${PROJECT}/${APP}:${VERSION}
.PHONY: all build push .PHONY: all build push

View File

@ -86,7 +86,7 @@ function validate_env() {
function create_config() { function create_config() {
rm -f $ZK_CONFIG_FILE rm -f $ZK_CONFIG_FILE
echo "Creating ZooKeeper configuration" echo "Creating ZooKeeper configuration"
echo "#This file was autogenerated by k8szk DO NOT EDIT" >> $ZK_CONFIG_FILE echo "#This file was autogenerated by zk DO NOT EDIT" >> $ZK_CONFIG_FILE
echo "clientPort=$ZK_CLIENT_PORT" >> $ZK_CONFIG_FILE echo "clientPort=$ZK_CLIENT_PORT" >> $ZK_CONFIG_FILE
echo "dataDir=$ZK_DATA_DIR" >> $ZK_CONFIG_FILE echo "dataDir=$ZK_DATA_DIR" >> $ZK_CONFIG_FILE
echo "dataLogDir=$ZK_DATA_LOG_DIR" >> $ZK_CONFIG_FILE echo "dataLogDir=$ZK_DATA_LOG_DIR" >> $ZK_CONFIG_FILE

View File

@ -20,6 +20,7 @@ metadata:
name: zk-config name: zk-config
data: data:
ensemble: "zk-0;zk-1;zk-2" ensemble: "zk-0;zk-1;zk-2"
replicas: "3"
jvm.heap: "500m" jvm.heap: "500m"
tick: "2000" tick: "2000"
init: "10" init: "10"
@ -27,6 +28,9 @@ data:
client.cnxns: "60" client.cnxns: "60"
snap.retain: "3" snap.retain: "3"
purge.interval: "1" purge.interval: "1"
client.port: "2181"
server.port: "2888"
election.port: "3888"
--- ---
apiVersion: policy/v1beta1 apiVersion: policy/v1beta1
kind: PodDisruptionBudget kind: PodDisruptionBudget
@ -63,9 +67,9 @@ spec:
- zk-headless - zk-headless
topologyKey: "kubernetes.io/hostname" topologyKey: "kubernetes.io/hostname"
containers: containers:
- name: k8szk - name: zk
imagePullPolicy: Always imagePullPolicy: Always
image: thingsboard/k8szk:k8test image: thingsboard/zk:k8stest
resources: resources:
requests: requests:
memory: "500Mi" memory: "500Mi"
@ -84,48 +88,60 @@ spec:
name: zk-config name: zk-config
key: ensemble key: ensemble
- name : ZK_REPLICAS - name : ZK_REPLICAS
value: "3" valueFrom:
configMapKeyRef:
name: zk-config
key: replicas
- name : ZK_HEAP_SIZE - name : ZK_HEAP_SIZE
valueFrom: valueFrom:
configMapKeyRef: configMapKeyRef:
name: zk-config name: zk-config
key: jvm.heap key: jvm.heap
- name : ZK_TICK_TIME - name : ZK_TICK_TIME
valueFrom: valueFrom:
configMapKeyRef: configMapKeyRef:
name: zk-config name: zk-config
key: tick key: tick
- name : ZK_INIT_LIMIT - name : ZK_INIT_LIMIT
valueFrom: valueFrom:
configMapKeyRef: configMapKeyRef:
name: zk-config name: zk-config
key: init key: init
- name : ZK_SYNC_LIMIT - name : ZK_SYNC_LIMIT
valueFrom: valueFrom:
configMapKeyRef: configMapKeyRef:
name: zk-config name: zk-config
key: tick key: tick
- name : ZK_MAX_CLIENT_CNXNS - name : ZK_MAX_CLIENT_CNXNS
valueFrom: valueFrom:
configMapKeyRef: configMapKeyRef:
name: zk-config name: zk-config
key: client.cnxns key: client.cnxns
- name: ZK_SNAP_RETAIN_COUNT - name: ZK_SNAP_RETAIN_COUNT
valueFrom: valueFrom:
configMapKeyRef: configMapKeyRef:
name: zk-config name: zk-config
key: snap.retain key: snap.retain
- name: ZK_PURGE_INTERVAL - name: ZK_PURGE_INTERVAL
valueFrom: valueFrom:
configMapKeyRef: configMapKeyRef:
name: zk-config name: zk-config
key: purge.interval key: purge.interval
- name: ZK_CLIENT_PORT - name: ZK_CLIENT_PORT
value: "2181" valueFrom:
configMapKeyRef:
name: zk-config
key: client.port
- name: ZK_SERVER_PORT - name: ZK_SERVER_PORT
value: "2888" valueFrom:
configMapKeyRef:
name: zk-config
key: server.port
- name: ZK_ELECTION_PORT - name: ZK_ELECTION_PORT
value: "3888" valueFrom:
configMapKeyRef:
name: zk-config
key: election.port
command: command:
- sh - sh
- -c - -c
@ -143,16 +159,16 @@ spec:
initialDelaySeconds: 15 initialDelaySeconds: 15
timeoutSeconds: 5 timeoutSeconds: 5
volumeMounts: volumeMounts:
- name: datadir - name: zkdatadir
mountPath: /var/lib/zookeeper mountPath: /var/lib/zookeeper
securityContext: securityContext:
runAsUser: 1000 runAsUser: 1000
fsGroup: 1000 fsGroup: 1000
volumeClaimTemplates: volumeClaimTemplates:
- metadata: - metadata:
name: datadir name: zkdatadir
annotations: annotations:
volume.alpha.kubernetes.io/storage-class: anything volume.beta.kubernetes.io/storage-class: slow
spec: spec:
accessModes: [ "ReadWriteOnce" ] accessModes: [ "ReadWriteOnce" ]
resources: resources: