-
Notifications
You must be signed in to change notification settings - Fork 1.4k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
chore: ♿️ add hotrod template and install/delete scripts (#801)
* chore: ♿️ add hotrod template and scripts Signed-off-by: Prashant Shahi <[email protected]> * refactor: ✨ conditionally compute image Signed-off-by: Prashant Shahi <[email protected]> * fix: 🩹 add signoz namespace Signed-off-by: Prashant Shahi <[email protected]> * chore: 🔨 fix namespace template in scripts Signed-off-by: Prashant Shahi <[email protected]> * docs(hotrod): 📝 Add README for hotrod k8s Signed-off-by: Prashant Shahi <[email protected]> Co-authored-by: Ankit Nayan <[email protected]>
- Loading branch information
1 parent
540a682
commit bda8ddc
Showing
4 changed files
with
322 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,27 @@ | ||
# HotROD Sample Application (Kubernetes) | ||
|
||
Follow the steps in this section to install a sample application named HotR.O.D, and generate tracing data. | ||
|
||
```console | ||
kubectl create ns sample-application | ||
|
||
kubectl -n sample-application apply -f https://github.com/SigNoz/signoz/raw/main/sample-apps/hotrod/hotrod.yaml | ||
``` | ||
|
||
In case, you have installed SigNoz in namespace other than `platform` or selected Helm release name other than `my-release`, follow the steps below: | ||
|
||
```console | ||
export HELM_RELEASE=my-release-2 | ||
export SIGNOZ_NAMESPACE=platform-2 | ||
export HOTROD_NAMESPACE=sample-application-2 | ||
|
||
curl -sL https://github.com/SigNoz/signoz/raw/main/sample-apps/hotrod/hotrod-install.sh | bash | ||
``` | ||
|
||
To delete sample application: | ||
|
||
```console | ||
export HOTROD_NAMESPACE=sample-application-2 | ||
|
||
curl -sL https://github.com/SigNoz/signoz/raw/main/sample-apps/hotrod/hotrod-delete.sh | bash | ||
``` |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,20 @@ | ||
#!/bin/bash | ||
|
||
cd "$(dirname "${BASH_SOURCE[0]}")"; | ||
|
||
HOTROD_NAMESPACE=${HOTROD_NAMESPACE:-"sample-application"} | ||
|
||
if [[ "${HOTROD_NAMESPACE}" == "default" || "${HOTROD_NAMESPACE}" == "kube-system" || "${HOTROD_NAMESPACE}" == "platform" ]]; then | ||
echo "Default k8s namespace and SigNoz namespace must not be deleted" | ||
echo "Deleting components only" | ||
kubectl delete --namespace="${HOTROD_NAMESPACE}" -f <(cat hotrod-template.yaml || curl -sL https://github.com/SigNoz/signoz/raw/main/sample-apps/hotrod/hotrod-template.yaml) | ||
else | ||
echo "Delete HotROD sample app namespace ${HOTROD_NAMESPACE}" | ||
kubectl delete namespace "${HOTROD_NAMESPACE}" | ||
fi | ||
|
||
if [ $? -ne 0 ]; then | ||
echo "❌ Failed to delete HotROD sample application" | ||
else | ||
echo "✅ Succesfully deleted HotROD sample application" | ||
fi |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,52 @@ | ||
#!/bin/bash | ||
|
||
cd "$(dirname "${BASH_SOURCE[0]}")"; | ||
|
||
# Namespace to install sample app | ||
HOTROD_NAMESPACE=${HOTROD_NAMESPACE:-"sample-application"} | ||
SIGNOZ_NAMESPACE="${SIGNOZ_NAMESPACE:-platform}" | ||
|
||
# HotROD's docker image | ||
if [[ -z $HOTROD_IMAGE ]]; then | ||
HOTROD_REPO="${HOTROD_REPO:-jaegertracing/example-hotrod}" | ||
HOTROD_TAG="${HOTROD_TAG:-1.30}" | ||
HOTROD_IMAGE="${HOTROD_REPO}:${HOTROD_TAG}" | ||
fi | ||
|
||
# Locust's docker image | ||
if [[ -z $LOCUST_IMAGE ]]; then | ||
LOCUST_REPO="${LOCUST_REPO:-grubykarol/locust}" | ||
LOCUST_TAG="${LOCUST_TAG:-0.8.1-py3.6}" | ||
LOCUST_IMAGE="${LOCUST_REPO}:${LOCUST_TAG}" | ||
fi | ||
|
||
# Helm release name | ||
HELM_RELEASE="${HELM_RELEASE:-my-release}" | ||
|
||
# Otel Collector service address | ||
if [[ -z $JAEGER_ENDPOINT ]]; then | ||
if [[ "$HELM_RELEASE" == *"signoz"* ]]; then | ||
JAEGER_ENDPOINT="http://${HELM_RELEASE}-otel-collector.${SIGNOZ_NAMESPACE}.svc.cluster.local:14268/api/traces" | ||
else | ||
JAEGER_ENDPOINT="http://${HELM_RELEASE}-signoz-otel-collector.${SIGNOZ_NAMESPACE}.svc.cluster.local:14268/api/traces" | ||
fi | ||
fi | ||
|
||
# Create namespace for sample application if does not exist | ||
kubectl create namespace "$HOTROD_NAMESPACE" --save-config --dry-run -o yaml 2>/dev/null | kubectl apply -f - | ||
|
||
# Setup sample apps into specified namespace | ||
kubectl apply --namespace="${HOTROD_NAMESPACE}" -f <( \ | ||
(cat hotrod-template.yaml 2>/dev/null || curl -sL https://github.com/SigNoz/signoz/raw/main/sample-apps/hotrod/hotrod-template.yaml) | \ | ||
HOTROD_NAMESPACE="${HOTROD_NAMESPACE}" \ | ||
HOTROD_IMAGE="${HOTROD_IMAGE}" \ | ||
LOCUST_IMAGE="${LOCUST_IMAGE}" \ | ||
JAEGER_ENDPOINT="${JAEGER_ENDPOINT}" \ | ||
envsubst \ | ||
) | ||
|
||
if [ $? -ne 0 ]; then | ||
echo "❌ Failed to deploy HotROD sample application" | ||
else | ||
echo "✅ Succesfully deployed HotROD sample application" | ||
fi |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,223 @@ | ||
apiVersion: v1 | ||
kind: ConfigMap | ||
metadata: | ||
name: locust-cm | ||
data: | ||
ATTACKED_HOST: http://hotrod:8080 | ||
--- | ||
apiVersion: v1 | ||
kind: ConfigMap | ||
metadata: | ||
name: scripts-cm | ||
data: | ||
locustfile.py: | | ||
from locust import HttpLocust, TaskSet, task | ||
class UserTasks(TaskSet): | ||
@task | ||
def rachel(self): | ||
self.client.get("/dispatch?customer=123&nonse=0.6308392664170006") | ||
@task | ||
def trom(self): | ||
self.client.get("/dispatch?customer=392&nonse=0.015296363321630757") | ||
@task | ||
def japanese(self): | ||
self.client.get("/dispatch?customer=731&nonse=0.8022286220408668") | ||
@task | ||
def coffee(self): | ||
self.client.get("/dispatch?customer=567&nonse=0.0022220379420636593") | ||
class WebsiteUser(HttpLocust): | ||
task_set = UserTasks | ||
--- | ||
apiVersion: apps/v1 | ||
kind: Deployment | ||
metadata: | ||
labels: | ||
service: hotrod | ||
name: hotrod | ||
spec: | ||
replicas: 1 | ||
selector: | ||
matchLabels: | ||
service: hotrod | ||
strategy: {} | ||
template: | ||
metadata: | ||
labels: | ||
service: hotrod | ||
spec: | ||
containers: | ||
- args: | ||
- all | ||
env: | ||
- name: JAEGER_ENDPOINT | ||
value: ${JAEGER_ENDPOINT} | ||
image: ${HOTROD_IMAGE} | ||
imagePullPolicy: IfNotPresent | ||
name: hotrod | ||
ports: | ||
- containerPort: 8080 | ||
resources: | ||
requests: | ||
cpu: 100m | ||
memory: 100Mi | ||
limits: | ||
cpu: 200m | ||
memory: 200Mi | ||
restartPolicy: Always | ||
--- | ||
apiVersion: v1 | ||
kind: Service | ||
metadata: | ||
labels: | ||
service: hotrod | ||
name: hotrod | ||
spec: | ||
ports: | ||
- name: "8080" | ||
port: 8080 | ||
targetPort: 8080 | ||
selector: | ||
service: hotrod | ||
--- | ||
apiVersion: apps/v1 | ||
kind: Deployment | ||
metadata: | ||
annotations: | ||
deployment.kubernetes.io/revision: "1" | ||
labels: | ||
role: locust-master | ||
name: locust-master | ||
spec: | ||
replicas: 1 | ||
selector: | ||
matchLabels: | ||
role: locust-master | ||
strategy: | ||
rollingUpdate: | ||
maxSurge: 1 | ||
maxUnavailable: 1 | ||
type: RollingUpdate | ||
template: | ||
metadata: | ||
labels: | ||
role: locust-master | ||
spec: | ||
containers: | ||
- image: ${LOCUST_IMAGE} | ||
imagePullPolicy: IfNotPresent | ||
name: locust-master | ||
env: | ||
- name: ATTACKED_HOST | ||
valueFrom: | ||
configMapKeyRef: | ||
name: locust-cm | ||
key: ATTACKED_HOST | ||
- name: LOCUST_MODE | ||
value: MASTER | ||
- name: LOCUST_OPTS | ||
value: --print-stats | ||
volumeMounts: | ||
- mountPath: /locust | ||
name: locust-scripts | ||
ports: | ||
- containerPort: 5557 | ||
name: comm | ||
- containerPort: 5558 | ||
name: comm-plus-1 | ||
- containerPort: 8089 | ||
name: web-ui | ||
resources: | ||
requests: | ||
cpu: 100m | ||
memory: 100Mi | ||
limits: | ||
cpu: 200m | ||
memory: 200Mi | ||
terminationMessagePath: /dev/termination-log | ||
terminationMessagePolicy: File | ||
dnsPolicy: ClusterFirst | ||
restartPolicy: Always | ||
schedulerName: default-scheduler | ||
securityContext: {} | ||
terminationGracePeriodSeconds: 30 | ||
volumes: | ||
- name: locust-scripts | ||
configMap: | ||
name: scripts-cm | ||
--- | ||
apiVersion: v1 | ||
kind: Service | ||
metadata: | ||
labels: | ||
role: locust-master | ||
name: locust-master | ||
spec: | ||
ports: | ||
- port: 5557 | ||
name: communication | ||
- port: 5558 | ||
name: communication-plus-1 | ||
- port: 8089 | ||
targetPort: 8089 | ||
name: web-ui | ||
selector: | ||
role: locust-master | ||
--- | ||
apiVersion: apps/v1 | ||
kind: Deployment | ||
metadata: | ||
annotations: | ||
deployment.kubernetes.io/revision: "1" | ||
labels: | ||
role: locust-slave | ||
name: locust-slave | ||
spec: | ||
replicas: 1 | ||
selector: | ||
matchLabels: | ||
role: locust-slave | ||
strategy: | ||
rollingUpdate: | ||
maxSurge: 1 | ||
maxUnavailable: 1 | ||
type: RollingUpdate | ||
template: | ||
metadata: | ||
labels: | ||
role: locust-slave | ||
spec: | ||
containers: | ||
- image: ${LOCUST_IMAGE} | ||
imagePullPolicy: IfNotPresent | ||
name: locust-slave | ||
env: | ||
- name: ATTACKED_HOST | ||
valueFrom: | ||
configMapKeyRef: | ||
name: locust-cm | ||
key: ATTACKED_HOST | ||
- name: LOCUST_MODE | ||
value: SLAVE | ||
- name: LOCUST_MASTER | ||
value: locust-master | ||
volumeMounts: | ||
- mountPath: /locust | ||
name: locust-scripts | ||
resources: | ||
requests: | ||
cpu: 100m | ||
memory: 100Mi | ||
limits: | ||
cpu: 200m | ||
memory: 200Mi | ||
terminationMessagePath: /dev/termination-log | ||
terminationMessagePolicy: File | ||
dnsPolicy: ClusterFirst | ||
restartPolicy: Always | ||
schedulerName: default-scheduler | ||
securityContext: {} | ||
terminationGracePeriodSeconds: 30 | ||
volumes: | ||
- name: locust-scripts | ||
configMap: | ||
name: scripts-cm |