Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions iac/apps/labapiserver/values.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -90,8 +90,18 @@ env:
value: "info"
- name: OTEL_EXPORTER_OTLP_ENDPOINT
value: "otel-collector-opentelemetry-collector.otel-collector.svc.cluster.local:4317"
- name: OTEL_EXPORTER_OTLP_PROTOCOL
value: "grpc"
- name: OTEL_SERVICE_NAME
value: "labapiserver"
- name: OTEL_EXPORTER_OTLP_INSECURE
value: "true"
- name: OTEL_TRACES_EXPORTER
value: "otlp"
- name: OTEL_METRICS_EXPORTER
value: "otlp"
- name: OTEL_LOGS_EXPORTER
value: "otlp"

# Vault secrets - these will be injected by Vault agent
vaultSecrets:
Expand Down
24 changes: 24 additions & 0 deletions iac/apps/locust/configmap.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
apiVersion: v1
kind: ConfigMap
metadata:
name: locust-script
namespace: default
data:
locustfile.py: |
from locust import HttpUser, task, between
import random

class LabAPIUser(HttpUser):
wait_time = between(1, 3) # Wait 1-3 seconds between requests

@task(3) # Weight: 3x more likely than other tasks
def calculate_tax(self):
payload = {
"amount": random.uniform(10, 1000),
"zip_code": "94105"
}
self.client.post("/salestax", json=payload)

@task(1)
def health_check(self):
self.client.get("/health")
78 changes: 78 additions & 0 deletions iac/apps/locust/deployment.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: locust-master
namespace: default
labels:
app: locust
role: master
spec:
replicas: 1
selector:
matchLabels:
app: locust
role: master
template:
metadata:
labels:
app: locust
role: master
spec:
containers:
- name: locust
image: locustio/locust:latest
ports:
- containerPort: 8089
name: web
- containerPort: 5557
name: master-bind
env:
- name: LOCUST_MODE
value: "master"
- name: LOCUST_HOST
value: "http://labapiserver-service:8080"
volumeMounts:
- name: locustfile
mountPath: /home/locust
volumes:
- name: locustfile
configMap:
name: locust-script
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: locust-worker
namespace: default
labels:
app: locust
role: worker
spec:
replicas: 2
selector:
matchLabels:
app: locust
role: worker
template:
metadata:
labels:
app: locust
role: worker
spec:
containers:
- name: locust
image: locustio/locust:latest
env:
- name: LOCUST_MODE
value: "worker"
- name: LOCUST_MASTER_NODE_HOST
value: "locust-master-service"
- name: LOCUST_HOST
value: "http://labapiserver-service:8080"
volumeMounts:
- name: locustfile
mountPath: /home/locust
volumes:
- name: locustfile
configMap:
name: locust-script
20 changes: 20 additions & 0 deletions iac/apps/locust/service.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
apiVersion: v1
kind: Service
metadata:
name: locust-master-service
namespace: default
labels:
app: locust
role: master
spec:
type: LoadBalancer
ports:
- port: 8089
targetPort: 8089
name: web
- port: 5557
targetPort: 5557
name: master-bind
selector:
app: locust
role: master
70 changes: 70 additions & 0 deletions iac/apps/loki/values.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
loki:
auth_enabled: false

commonConfig:
replication_factor: 1

storage:
type: filesystem

schemaConfig:
configs:
- from: 2024-01-01
store: tsdb
object_store: filesystem
schema: v13
index:
prefix: index_
period: 24h

ingester:
chunk_encoding: snappy

limits_config:
retention_period: 168h # 7 days
ingestion_rate_mb: 10
ingestion_burst_size_mb: 20

# Single binary mode for lab environment
deploymentMode: SingleBinary

singleBinary:
replicas: 1
resources:
limits:
cpu: 1
memory: 1Gi
requests:
cpu: 100m
memory: 256Mi
persistence:
enabled: true
size: 10Gi

# Disable components not needed in single binary mode
backend:
replicas: 0
read:
replicas: 0
write:
replicas: 0

# Gateway configuration
gateway:
enabled: true
service:
type: ClusterIP
port: 80

# Enable service monitor for Prometheus
monitoring:
serviceMonitor:
enabled: false
selfMonitoring:
enabled: false
grafanaAgent:
installOperator: false

# Test configuration
test:
enabled: false
42 changes: 34 additions & 8 deletions iac/apps/otel-collector/values.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,14 @@ opentelemetry-collector:
memory_limiter:
check_interval: 1s
limit_mib: 400
spike_limit_mib: 128
check_interval: 5s

resource:
attributes:
- key: service.namespace
from_attribute: k8s.namespace.name
action: upsert

exporters:
prometheus:
Expand All @@ -42,27 +50,45 @@ opentelemetry-collector:
logging:
loglevel: info

otlp:
endpoint: "prometheus-kube-prometheus-prometheus.prometheus.svc.cluster.local:9090"
prometheusremotewrite:
endpoint: "http://prometheus-kube-prometheus-prometheus.prometheus.svc.cluster.local:9090/api/v1/write"
tls:
insecure: true

loki:
endpoint: http://loki-gateway.observability.svc.cluster.local/loki/api/v1/push
default_labels_enabled:
exporter: true
job: true
instance: true
level: true

otlp/traces:
endpoint: http://tempo.observability.svc.cluster.local:4317
tls:
insecure: true

debug:
verbosity: detailed
sampling_initial: 5
sampling_thereafter: 200

service:
pipelines:
traces:
receivers: [otlp]
processors: [memory_limiter, batch]
exporters: [logging]
processors: [memory_limiter, batch, resource]
exporters: [otlp/traces]

metrics:
receivers: [otlp, prometheus]
processors: [memory_limiter, batch]
exporters: [prometheus, logging]
processors: [memory_limiter, batch, resource]
exporters: [prometheus, prometheusremotewrite, logging]

logs:
receivers: [otlp]
processors: [memory_limiter, batch]
exporters: [logging]
processors: [memory_limiter, batch, resource]
exporters: [loki]

ports:
otlp:
Expand Down
36 changes: 36 additions & 0 deletions iac/apps/promtail/values.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
config:
clients:
- url: http://loki-gateway.observability.svc.cluster.local/loki/api/v1/push
tenant_id: 1

snippets:
pipelineStages:
- cri: {}
- labeldrop:
- filename
- json:
expressions:
level: level
msg: msg
trace_id: trace_id
span_id: span_id
- labels:
level:
trace_id:
span_id:

resources:
limits:
cpu: 200m
memory: 256Mi
requests:
cpu: 100m
memory: 128Mi

# DaemonSet configuration to run on all nodes
daemonset:
enabled: true

# Service Monitor for Prometheus
serviceMonitor:
enabled: false
22 changes: 22 additions & 0 deletions iac/argocd/applications/locust-app.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: locust
namespace: argocd
finalizers:
- resources-finalizer.argocd.argoproj.io
spec:
project: default
source:
repoURL: https://github.com/mvarshney/labapiserver.git
targetRevision: main
path: iac/app/locust
destination:
server: https://kubernetes.default.svc
namespace: default
syncPolicy:
automated:
prune: true
selfHeal: true
syncOptions:
- CreateNamespace=true
32 changes: 32 additions & 0 deletions iac/argocd/applications/loki.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: loki
namespace: argocd
finalizers:
- resources-finalizer.argocd.argoproj.io
spec:
project: default
source:
repoURL: https://grafana.github.io/helm-charts
chart: loki
targetRevision: 6.16.0
helm:
valueFiles:
- $values/iac/apps/loki/values.yaml
sources:
- repoURL: https://grafana.github.io/helm-charts
chart: loki
targetRevision: 6.16.0
- repoURL: https://github.com/mvarshney/labapiserver.git
targetRevision: main
ref: values
destination:
server: https://kubernetes.default.svc
namespace: observability
syncPolicy:
automated:
prune: true
selfHeal: true
syncOptions:
- CreateNamespace=true
Loading