Skip to content

Commit

Permalink
HWKMETRICS-103: Add liveness probes and postStartup hooks to the hawk…
Browse files Browse the repository at this point in the history
…ular metrics containers. Update to use kubernetes v1beta03 api.
  • Loading branch information
mwringe committed May 28, 2015
1 parent f65608f commit 8788e1c
Show file tree
Hide file tree
Showing 5 changed files with 184 additions and 90 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -18,4 +18,4 @@

nodetool decommission
nodetool stopdaemon
exit 1
exit 0
10 changes: 9 additions & 1 deletion containers/hawkular-metrics-docker/src/main/docker/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -33,13 +33,21 @@ RUN yum install -y java-1.8.0-openjdk java-1.8.0-openjdk-devel; \
ENV JAVA_HOME /usr/lib/jvm/java-1.8.0
USER jboss

#The port that hawkular metrics exposes its endpoint on.
ENV HAWKULAR_METRICS_ENDPOINT_PORT 8080

# Port 8080 is the http endpoint for interacting with Hawkular-Metrics
EXPOSE 8080
EXPOSE $HAWKULAR_METRICS_ENDPOINT_PORT

# The Hawkular Metrics version
ENV HAWKULAR_METRICS_VERSION ${project.version}

# Get and copy the hawkular metrics war to the EAP deployment directory
COPY hawkular-metrics-api-jaxrs.war $JBOSS_HOME/standalone/deployments/

# Copy the hawkular kubernetes scripts
ENV HAWKULAR_METRICS_SCRIPT_DIRECTORY /opt/hawkular/scripts/
COPY hawkular-metrics-poststart.sh $HAWKULAR_METRICS_SCRIPT_DIRECTORY
COPY hawkular-metrics-liveness.sh $HAWKULAR_METRICS_SCRIPT_DIRECTORY

CMD $JBOSS_HOME/bin/standalone.sh -b 0.0.0.0 -bmanagement 0.0.0.0 -Dhawkular-metrics.cassandra-nodes=hawkular-cassandra -Dhawkular-metrics.backend=cass
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
#!/bin/bash
#
# Copyright 2014-2015 Red Hat, Inc. and/or its affiliates
# and other contributors as indicated by the @author tags.
#
# 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.
#

STATUS_CODE=`curl -L -s -o /dev/null -w "%{http_code}" http://$HOSTNAME:$HAWKULAR_METRICS_ENDPOINT_PORT/hawkular/metrics/ping?tenantId=status`

if [ $STATUS_CODE -eq 200 ]; then
exit 0 # We can ping the endpoint without error, exit without error to specify that it is ready to be consumed by the service
else
exit 1 # We can't ping the endpoint, exit to specify that it is not yet ready for the service
fi
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
#!/bin/bash
#
# Copyright 2014-2015 Red Hat, Inc. and/or its affiliates
# and other contributors as indicated by the @author tags.
#
# 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.
#

PING_URL=http://$HOSTNAME:$HAWKULAR_METRICS_ENDPOINT_PORT/hawkular/metrics/ping?tenantId=status

STATUS_CODE=`curl -L -s -o /dev/null -w "%{http_code}" $PING_URL`

until [ $STATUS_CODE -eq 200 ]; do
sleep 1;
STATUS_CODE=`curl -L -s -o /dev/null -w "%{http_code}" $PING_URL`
done
211 changes: 123 additions & 88 deletions containers/kubernetes/src/main/fabric8/kubernetes.json
Original file line number Diff line number Diff line change
@@ -1,132 +1,167 @@
{
"id": "hawkular-metrics",
"kind": "List",
"apiVersion": "v1beta2",
"apiVersion": "v1beta3",
"name": "Hawkular Metrics",
"description": "Hawkular Metrics Kuberenetes Application. Starts up the Hawkular Metrics web application and a cassandra cluster.",
"items": [
{
"id": "hawkular-cassandra-nodes",
"apiVersion": "v1beta1",
"apiVersion" : "v1beta3",
"kind": "Service",
"selector": {
"name": "hawkular-cassandra"
"metadata" : {
"name": "hawkular-cassandra-nodes",
"labels": {
"name": "hawkular-cassandra"
}
},
"portalIp": "None",
"port": 9042,
"containerPort": "cassandra-cql-port",
"labels": {
"name": "hawkular-cassandra"
"spec" : {
"selector" : {
"name": "hawkular-cassandra"
},
"portalIp": "None",
"ports": [
{ "name": "cassandra-cql-port", "port": 9042, "targetPort": "cassandra-cql-port" },
{ "name": "cassandra-thift-port", "port": 9160, "targetPort": "cassandra-thift-port" },
{ "name": "cassandra-tcp-port", "port": 7000, "targetPort": "cassandra-tcp-port" },
{ "name": "cassandra-ssl-port", "port": 7001, "targetPort": "cassandra-ssl-port" }
]
}
},
{
"id": "hawkular-cassandra",
"apiVersion": "v1beta1",
"apiVersion" : "v1beta3",
"kind": "Service",
"selector": {
"name": "hawkular-cassandra"
"metadata" : {
"name": "hawkular-cassandra",
"labels": {
"name": "hawkular-cassandra"
}
},
"port": 9042,
"containerPort": "cassandra-cql-port",
"labels": {
"name": "hawkular-cassandra"
"spec" : {
"selector" : {
"name": "hawkular-cassandra"
},
"ports": [
{ "name": "cassandra-cql-port", "port": 9042, "targetPort": "cassandra-cql-port" },
{ "name": "cassandra-thift-port", "port": 9160, "targetPort": "cassandra-thift-port" },
{ "name": "cassandra-tcp-port", "port": 7000, "targetPort": "cassandra-tcp-port" },
{ "name": "cassandra-ssl-port", "port": 7001, "targetPort": "cassandra-ssl-port" }
]
}
},
{
"id": "hawkular-cassandra",
"apiVersion": "v1beta3",
"kind": "ReplicationController",
"apiVersion": "v1beta1",
"desiredState": {
"replicaSelector": {
"metadata": {
"name": "hawkular-cassandra",
"labels" : {
"name": "hawkular-cassandra"
}
},
"spec": {
"selector" : {
"name": "hawkular-cassandra"
},
"replicas": 1,
"podTemplate": {
"desiredState": {
"manifest": {
"id": "hawkular-cassandra",
"version": "v1beta1",
"containers" : [{
"name" : "hawkular-cassandra",
"image": "${cassandra.image}",
"command" : ["/opt/apache-cassandra/bin/cassandra-docker.sh",
"--seed_provider_classname=org.hawkular.openshift.cassandra.OpenshiftSeedProvider",
"--cluster_name=hawkular-metrics",
"--data_volume=/cassandra_data"],
"ports": [
{ "name": "cassandra-cql-port", "containerPort": 9042},
{ "name": "cassandra-thift-port", "containerPort": 9160},
{ "name": "cassandra-tcp-port", "containerPort": 7000},
{ "name": "cassandra-ssl-port", "containerPort": 7001}
],
"volumeMounts": [
{ "name": "cassandra-data", "mountPath": "/cassandra_data" }
],
"lifecycle": {
"preStop": {
"exec": {
"command": ["/opt/apache-cassandra/bin/cassandra-docker-pre-stop.sh"]
}
}
}
}],
"volumes": [
{ "name": "cassandra-data", "emptyDir":"" }
]
"template": {
"version": "v1beta3",
"metadata": {
"labels" : {
"name": "hawkular-cassandra"
}
},
"labels": {
"name": "hawkular-cassandra"
"spec": {
"containers": [{
"image": "${cassandra.image}",
"name" : "hawkular-metrics",
"ports": [
{ "name": "cassandra-cql-port", "containerPort": 9042},
{ "name": "cassandra-thift-port", "containerPort": 9160},
{ "name": "cassandra-tcp-port", "containerPort": 7000},
{ "name": "cassandra-ssl-port", "containerPort": 7001}
],
"command" : ["/opt/apache-cassandra/bin/cassandra-docker.sh",
"--seed_provider_classname=org.hawkular.openshift.cassandra.OpenshiftSeedProvider",
"--cluster_name=hawkular-metrics",
"--data_volume=/cassandra_data"],
"volumeMounts": [
{ "name": "cassandra-data", "mountPath": "/cassandra_data" }
],
"lifecycle": {
"preStop": {
"exec": {
"command": ["/opt/apache-cassandra/bin/cassandra-docker-pre-stop.sh"]
}
}
}
}],
"volumes": [
{ "name": "cassandra-data", "emptyDir":{} }
]
}
}
},
"labels": {
"name" : "hawkular-cassandra"
}
},
{
"id": "hawkular-metrics",
"apiVersion": "v1beta1",
"apiVersion": "v1beta3",
"kind": "Service",
"selector": {
"name": "hawkular-metrics"
"metadata": {
"name": "hawkular-metrics",
"labels": {
"name": "hawkular-metrics"
}
},
"port": 8080,
"containerPort": "hawkular-metrics-endpoint",
"labels": {
"name": "hawkular-metrics"
"spec": {
"selector": {
"name": "hawkular-metrics"
},
"ports": [
{ "name": "hawkular-metrics-endpoint", "port": 80, "targetPort": "hawkular-metrics-endpoint" }
]
}
},
{
"id": "hawkular-metrics",
"apiVersion": "v1beta3",
"kind": "ReplicationController",
"apiVersion": "v1beta1",
"desiredState": {
"replicaSelector": {
"metadata": {
"name": "hawkular-metrics",
"labels" : {
"name": "hawkular-metrics"
}
},
"spec": {
"selector" : {
"name": "hawkular-metrics"
},
"replicas": 1,
"podTemplate": {
"desiredState": {
"manifest": {
"id": "hawkular-metrics",
"version": "v1beta1",
"containers" : [{
"image": "${hawkular-metrics.image}",
"name" : "hawkular-metrics",
"ports": [
{ "name": "hawkular-metrics-endpoint", "containerPort": 8080}
]
}]
"template": {
"version": "v1beta3",
"metadata": {
"labels" : {
"name": "hawkular-metrics"
}
},
"labels": {
"name": "hawkular-metrics"
"spec": {
"containers": [{
"image": "${hawkular-metrics.image}",
"name" : "hawkular-metrics",
"ports": [
{ "name": "hawkular-metrics-endpoint", "containerPort": 8080}
],
"lifecycle": {
"postStart": {
"exec": {
"command": ["/opt/hawkular/scripts/hawkular-metrics-poststart.sh"]
}
}
},
"livenessProbe": {
"exec": {
"command": ["/opt/hawkular/scripts/hawkular-metrics-liveness.sh"]
}
}
}]
}
}
},
"labels": {
"name" : "hawkular-metrics"
}
}
]
Expand Down

0 comments on commit 8788e1c

Please sign in to comment.