Skip to content

Commit db407c8

Browse files
authored
Merge pull request #486 from traceroot-ai/xinwei_helm_chart_support_v1
[AgentOps] Support helm chart for production hosting [1/n]
2 parents d189ff7 + de654e1 commit db407c8

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

43 files changed

+1242
-50
lines changed

.pre-commit-config.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ repos:
1616
- id: trailing-whitespace
1717
- id: check-toml
1818
- id: check-yaml
19+
exclude: ^deploy/helm/templates/
1920

2021
# Python: Ruff (lint + format)
2122
- repo: https://github.com/astral-sh/ruff-pre-commit

backend/rest/services/s3.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ def __init__(
4747
region: AWS region. Defaults to settings.
4848
"""
4949
s3 = settings.s3
50-
self._endpoint_url = endpoint_url or s3.endpoint_url
50+
self._endpoint_url = (endpoint_url or s3.endpoint_url) or None
5151
self._access_key_id = access_key_id or s3.access_key_id
5252
self._secret_access_key = secret_access_key or s3.secret_access_key
5353
self._bucket_name = bucket_name or s3.bucket_name

deploy/helm/Chart.lock

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
dependencies:
2+
- name: clickhouse
3+
repository: oci://registry-1.docker.io/bitnamicharts
4+
version: 8.0.5
5+
digest: sha256:2f402cfa2a6731e943e54418a7683bd362f0cf7995acc180dd6fa553f9719450
6+
generated: "2026-03-07T18:52:58.642094-08:00"

deploy/helm/Chart.yaml

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
# deploy/helm/Chart.yaml
2+
apiVersion: v2
3+
name: traceroot
4+
description: AI agent observability platform
5+
type: application
6+
version: 0.1.0
7+
appVersion: "0.1.0"
8+
9+
dependencies:
10+
- name: clickhouse
11+
version: 8.0.5
12+
repository: oci://registry-1.docker.io/bitnamicharts
13+
condition: clickhouse.deploy
102 KB
Binary file not shown.

deploy/helm/templates/_helpers.tpl

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
{{- define "traceroot.fullname" -}}
2+
{{- .Release.Name | trunc 63 | trimSuffix "-" }}
3+
{{- end }}
4+
5+
{{- define "traceroot.labels" -}}
6+
app.kubernetes.io/managed-by: {{ .Release.Service }}
7+
app.kubernetes.io/instance: {{ .Release.Name }}
8+
helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version }}
9+
{{- end }}
10+
11+
{{- define "traceroot.selectorLabels" -}}
12+
app.kubernetes.io/instance: {{ .Release.Name }}
13+
{{- end }}
14+
15+
{{- define "traceroot.clickhouse.hostname" -}}
16+
{{- if .Values.clickhouse.deploy -}}
17+
{{- printf "%s-clickhouse" (include "traceroot.fullname" .) -}}
18+
{{- else -}}
19+
{{- .Values.clickhouse.host -}}
20+
{{- end -}}
21+
{{- end }}
Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
apiVersion: apps/v1
2+
kind: Deployment
3+
metadata:
4+
name: {{ include "traceroot.fullname" . }}-agent
5+
labels:
6+
{{- include "traceroot.labels" . | nindent 4 }}
7+
app: agent
8+
spec:
9+
replicas: {{ .Values.agent.replicas }}
10+
selector:
11+
matchLabels:
12+
{{- include "traceroot.selectorLabels" . | nindent 6 }}
13+
app: agent
14+
template:
15+
metadata:
16+
labels:
17+
{{- include "traceroot.selectorLabels" . | nindent 8 }}
18+
app: agent
19+
spec:
20+
serviceAccountName: {{ .Values.serviceAccount.name }}
21+
containers:
22+
- name: agent
23+
image: "{{ .Values.agent.image.repository }}:{{ .Values.agent.image.tag }}"
24+
imagePullPolicy: {{ .Values.imagePullPolicy }}
25+
ports:
26+
- containerPort: {{ .Values.agent.port }}
27+
env:
28+
- name: DATABASE_URL
29+
valueFrom:
30+
secretKeyRef:
31+
name: {{ .Values.postgresql.existingSecret }}
32+
key: {{ .Values.postgresql.secretKeys.databaseUrl }}
33+
- name: AGENT_SERVICE_URL
34+
value: "http://0.0.0.0:{{ .Values.agent.port }}"
35+
- name: INTERNAL_API_SECRET
36+
valueFrom:
37+
secretKeyRef:
38+
name: {{ .Values.secrets.existingSecret }}
39+
key: {{ .Values.secrets.keys.internalApiSecret }}
40+
- name: TRACEROOT_UI_URL
41+
value: "http://{{ include "traceroot.fullname" . }}-web:{{ .Values.web.port }}"
42+
- name: BACKEND_INTERNAL_URL
43+
value: "http://{{ include "traceroot.fullname" . }}-rest:{{ .Values.rest.port }}"
44+
- name: ENCRYPTION_KEY
45+
valueFrom:
46+
secretKeyRef:
47+
name: {{ .Values.secrets.existingSecret }}
48+
key: {{ .Values.secrets.keys.encryptionKey }}
49+
- name: SANDBOX_PROVIDER
50+
value: "daytona"
51+
{{- if .Values.llmKeys }}
52+
{{- if .Values.llmKeys.existingSecret }}
53+
- name: ANTHROPIC_API_KEY
54+
valueFrom:
55+
secretKeyRef:
56+
name: {{ .Values.llmKeys.existingSecret }}
57+
key: {{ .Values.llmKeys.keys.anthropicApiKey }}
58+
- name: OPENAI_API_KEY
59+
valueFrom:
60+
secretKeyRef:
61+
name: {{ .Values.llmKeys.existingSecret }}
62+
key: {{ .Values.llmKeys.keys.openaiApiKey }}
63+
- name: DAYTONA_API_KEY
64+
valueFrom:
65+
secretKeyRef:
66+
name: {{ .Values.llmKeys.existingSecret }}
67+
key: {{ .Values.llmKeys.keys.daytonaApiKey }}
68+
{{- end }}
69+
{{- end }}
70+
livenessProbe:
71+
httpGet:
72+
path: /health
73+
port: {{ .Values.agent.port }}
74+
initialDelaySeconds: 15
75+
periodSeconds: 10
76+
resources:
77+
{{- toYaml .Values.agent.resources | nindent 12 }}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
apiVersion: v1
2+
kind: Service
3+
metadata:
4+
name: {{ include "traceroot.fullname" . }}-agent
5+
labels:
6+
{{- include "traceroot.labels" . | nindent 4 }}
7+
spec:
8+
type: ClusterIP
9+
ports:
10+
- port: {{ .Values.agent.port }}
11+
targetPort: {{ .Values.agent.port }}
12+
selector:
13+
{{- include "traceroot.selectorLabels" . | nindent 4 }}
14+
app: agent
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
apiVersion: apps/v1
2+
kind: Deployment
3+
metadata:
4+
name: {{ include "traceroot.fullname" . }}-billing
5+
labels:
6+
{{- include "traceroot.labels" . | nindent 4 }}
7+
app: billing
8+
spec:
9+
replicas: {{ .Values.billing.replicas }}
10+
selector:
11+
matchLabels:
12+
{{- include "traceroot.selectorLabels" . | nindent 6 }}
13+
app: billing
14+
template:
15+
metadata:
16+
labels:
17+
{{- include "traceroot.selectorLabels" . | nindent 8 }}
18+
app: billing
19+
spec:
20+
serviceAccountName: {{ .Values.serviceAccount.name }}
21+
containers:
22+
- name: billing
23+
image: "{{ .Values.billing.image.repository }}:{{ .Values.billing.image.tag }}"
24+
imagePullPolicy: {{ .Values.imagePullPolicy }}
25+
env:
26+
- name: DATABASE_URL
27+
valueFrom:
28+
secretKeyRef:
29+
name: {{ .Values.postgresql.existingSecret }}
30+
key: {{ .Values.postgresql.secretKeys.databaseUrl }}
31+
- name: CLICKHOUSE_HOST
32+
value: {{ include "traceroot.clickhouse.hostname" . | quote }}
33+
- name: CLICKHOUSE_PORT
34+
value: "8123"
35+
- name: CLICKHOUSE_USER
36+
value: {{ .Values.clickhouse.auth.username | quote }}
37+
- name: CLICKHOUSE_PASSWORD
38+
valueFrom:
39+
secretKeyRef:
40+
name: {{ .Values.clickhouse.auth.existingSecret }}
41+
key: {{ .Values.clickhouse.auth.existingSecretKey }}
42+
- name: CLICKHOUSE_DATABASE
43+
value: "default"
44+
- name: REDIS_URL
45+
valueFrom:
46+
secretKeyRef:
47+
name: {{ .Values.redis.existingSecret }}
48+
key: {{ .Values.redis.secretKeys.url }}
49+
- name: NEXT_PUBLIC_API_URL
50+
value: "http://{{ include "traceroot.fullname" . }}-rest:{{ .Values.rest.port }}/api/v1"
51+
- name: INTERNAL_API_SECRET
52+
valueFrom:
53+
secretKeyRef:
54+
name: {{ .Values.secrets.existingSecret }}
55+
key: {{ .Values.secrets.keys.internalApiSecret }}
56+
resources:
57+
{{- toYaml .Values.billing.resources | nindent 12 }}

deploy/helm/templates/ingress.yaml

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
{{- if .Values.ingress.enabled -}}
2+
apiVersion: networking.k8s.io/v1
3+
kind: Ingress
4+
metadata:
5+
name: {{ include "traceroot.fullname" . }}
6+
labels:
7+
{{- include "traceroot.labels" . | nindent 4 }}
8+
annotations:
9+
{{- toYaml .Values.ingress.annotations | nindent 4 }}
10+
spec:
11+
ingressClassName: {{ .Values.ingress.className }}
12+
rules:
13+
- {{- if .Values.ingress.host }}
14+
host: {{ .Values.ingress.host | quote }}
15+
{{- end }}
16+
http:
17+
paths:
18+
- path: /api/v1
19+
pathType: Prefix
20+
backend:
21+
service:
22+
name: {{ include "traceroot.fullname" . }}-rest
23+
port:
24+
number: {{ .Values.rest.port }}
25+
- path: /
26+
pathType: Prefix
27+
backend:
28+
service:
29+
name: {{ include "traceroot.fullname" . }}-web
30+
port:
31+
number: {{ .Values.web.port }}
32+
{{- end }}

0 commit comments

Comments
 (0)