WARNING: THIS SITE IS A MIRROR OF GITHUB.COM / IT CANNOT LOGIN OR REGISTER ACCOUNTS / THE CONTENTS ARE PROVIDED AS-IS / THIS SITE ASSUMES NO RESPONSIBILITY FOR ANY DISPLAYED CONTENT OR LINKS / IF YOU FOUND SOMETHING MAY NOT GOOD FOR EVERYONE, CONTACT ADMIN AT ilovescratch@foxmail.com
Skip to content

Commit a5c1037

Browse files
committed
[ENH] Make it possible to deploy multiple chromas in Tiltfile
To deploy (and tear down) a single chroma: ``` tilt up tilt down ``` To deploy (and tear down) multiple chromas: ``` tilt up -- --multi_region tilt down -- --multi_region ```
1 parent 0f1de70 commit a5c1037

File tree

11 files changed

+676
-44
lines changed

11 files changed

+676
-44
lines changed

Tiltfile

Lines changed: 142 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
# Enable to test multi-region deployment
2+
config.define_bool('multi_region')
3+
cfg = config.parse()
4+
15
update_settings(max_parallel_updates=6)
26

37
# *:ci images are defined in .github/actions/tilt/docker-bake.hcl and used for .github/actions/tilt/action.yaml.
@@ -157,10 +161,21 @@ k8s_yaml(
157161
'helm template --set-file rustFrontendService.configuration=rust/frontend/sample_configs/distributed.yaml,rustLogService.configuration=rust/worker/chroma_config.yaml,heapTenderService.configuration=rust/worker/chroma_config.yaml,compactionService.configuration=rust/worker/chroma_config.yaml,queryService.configuration=rust/worker/chroma_config.yaml,garbageCollector.configuration=rust/worker/chroma_config.yaml --values k8s/distributed-chroma/values.yaml,k8s/distributed-chroma/values.dev.yaml k8s/distributed-chroma'
158162
),
159163
)
164+
165+
k8s_yaml(
166+
local(
167+
'helm template --set-file rustFrontendService.configuration=rust/frontend/sample_configs/distributed2.yaml,rustLogService.configuration=rust/worker/chroma_config2.yaml,heapTenderService.configuration=rust/worker/chroma_config2.yaml,compactionService.configuration=rust/worker/chroma_config2.yaml,queryService.configuration=rust/worker/chroma_config2.yaml,garbageCollector.configuration=rust/worker/chroma_config2.yaml --values k8s/distributed-chroma/values2.yaml,k8s/distributed-chroma/values2.dev.yaml k8s/distributed-chroma'
168+
),
169+
)
170+
160171
watch_file('rust/frontend/sample_configs/distributed.yaml')
172+
watch_file('rust/frontend/sample_configs/distributed2.yaml')
161173
watch_file('rust/worker/chroma_config.yaml')
174+
watch_file('rust/worker/chroma_config2.yaml')
162175
watch_file('k8s/distributed-chroma/values.yaml')
163176
watch_file('k8s/distributed-chroma/values.dev.yaml')
177+
watch_file('k8s/distributed-chroma/values2.yaml')
178+
watch_file('k8s/distributed-chroma/values2.dev.yaml')
164179
watch_file('k8s/distributed-chroma/*.yaml')
165180

166181

@@ -177,60 +192,151 @@ k8s_yaml([
177192
'k8s/test/prometheus.yaml',
178193
'k8s/test/test-memberlist-cr.yaml',
179194
'k8s/test/postgres.yaml',
195+
'k8s/test/postgres2.yaml',
180196
])
181197

182198
# Lots of things assume the cluster is in a basic state. Get it into a basic
183199
# state before deploying anything else.
184200
k8s_resource(
185201
objects=[
186-
'pod-watcher:Role',
187202
'memberlists.chroma.cluster:CustomResourceDefinition',
188-
'query-service-memberlist:MemberList',
189-
'compaction-service-memberlist:MemberList',
190-
'garbage-collection-service-memberlist:MemberList',
191-
'rust-log-service-memberlist:MemberList',
192-
193-
'sysdb-serviceaccount:ServiceAccount',
194-
'sysdb-serviceaccount-rolebinding:RoleBinding',
195-
'sysdb-query-service-memberlist-binding:RoleBinding',
196-
'sysdb-compaction-service-memberlist-binding:RoleBinding',
197-
198-
'query-service-serviceaccount:ServiceAccount',
199-
'query-service-serviceaccount-rolebinding:RoleBinding',
200-
'query-service-memberlist-readerwriter:Role',
201-
'query-service-query-service-memberlist-binding:RoleBinding',
202-
'query-service-memberlist-readerwriter-binding:RoleBinding',
203-
204-
'compaction-service-memberlist-readerwriter:Role',
205-
'compaction-service-compaction-service-memberlist-binding:RoleBinding',
206-
'compaction-service-memberlist-readerwriter-binding:RoleBinding',
207-
'compaction-service-serviceaccount:ServiceAccount',
208-
'compaction-service-serviceaccount-rolebinding:RoleBinding',
209-
210-
'test-memberlist:MemberList',
211-
'test-memberlist-reader:Role',
212-
'test-memberlist-reader-binding:RoleBinding',
213-
'lease-watcher:Role',
214-
'rust-frontend-service-config:ConfigMap',
203+
204+
'pod-watcher:Role:chroma',
205+
'query-service-memberlist:MemberList:chroma',
206+
'compaction-service-memberlist:MemberList:chroma',
207+
'garbage-collection-service-memberlist:MemberList:chroma',
208+
'rust-log-service-memberlist:MemberList:chroma',
209+
210+
'sysdb-serviceaccount:ServiceAccount:chroma',
211+
'sysdb-serviceaccount-rolebinding:RoleBinding:chroma',
212+
'sysdb-query-service-memberlist-binding:RoleBinding:chroma',
213+
'sysdb-compaction-service-memberlist-binding:RoleBinding:chroma',
214+
215+
'query-service-serviceaccount:ServiceAccount:chroma',
216+
'query-service-serviceaccount-rolebinding:RoleBinding:chroma',
217+
'query-service-memberlist-readerwriter:Role:chroma',
218+
'query-service-query-service-memberlist-binding:RoleBinding:chroma',
219+
'query-service-memberlist-readerwriter-binding:RoleBinding:chroma',
220+
221+
'compaction-service-memberlist-readerwriter:Role:chroma',
222+
'compaction-service-compaction-service-memberlist-binding:RoleBinding:chroma',
223+
'compaction-service-memberlist-readerwriter-binding:RoleBinding:chroma',
224+
'compaction-service-serviceaccount:ServiceAccount:chroma',
225+
'compaction-service-serviceaccount-rolebinding:RoleBinding:chroma',
226+
227+
'test-memberlist:MemberList:chroma',
228+
'test-memberlist-reader:Role:chroma',
229+
'test-memberlist-reader-binding:RoleBinding:chroma',
230+
'lease-watcher:Role:chroma',
231+
'rust-frontend-service-config:ConfigMap:chroma',
215232
],
216233
new_name='k8s_setup',
217234
labels=["infrastructure"],
218235
)
219236

237+
# Lots of things assume the cluster is in a basic state. Get it into a basic
238+
# state before deploying anything else.
239+
k8s_resource(
240+
objects=[
241+
'pod-watcher:Role:chroma2',
242+
'query-service-memberlist:MemberList:chroma2',
243+
'compaction-service-memberlist:MemberList:chroma2',
244+
'garbage-collection-service-memberlist:MemberList:chroma2',
245+
'rust-log-service-memberlist:MemberList:chroma2',
246+
247+
'sysdb-serviceaccount:ServiceAccount:chroma2',
248+
'sysdb-serviceaccount-rolebinding:RoleBinding:chroma2',
249+
'sysdb-query-service-memberlist-binding:RoleBinding:chroma2',
250+
'sysdb-compaction-service-memberlist-binding:RoleBinding:chroma2',
251+
252+
'query-service-serviceaccount:ServiceAccount:chroma2',
253+
'query-service-serviceaccount-rolebinding:RoleBinding:chroma2',
254+
'query-service-memberlist-readerwriter:Role:chroma2',
255+
'query-service-query-service-memberlist-binding:RoleBinding:chroma2',
256+
'query-service-memberlist-readerwriter-binding:RoleBinding:chroma2',
257+
258+
'compaction-service-memberlist-readerwriter:Role:chroma2',
259+
'compaction-service-compaction-service-memberlist-binding:RoleBinding:chroma2',
260+
'compaction-service-memberlist-readerwriter-binding:RoleBinding:chroma2',
261+
'compaction-service-serviceaccount:ServiceAccount:chroma2',
262+
'compaction-service-serviceaccount-rolebinding:RoleBinding:chroma2',
263+
264+
'lease-watcher:Role:chroma2',
265+
'rust-frontend-service-config:ConfigMap:chroma2',
266+
],
267+
new_name='k8s_setup2',
268+
labels=["infrastructure2"],
269+
)
270+
220271
# Production Chroma
221-
k8s_resource('postgres', resource_deps=['k8s_setup'], labels=["infrastructure"], port_forwards='5432:5432')
272+
k8s_resource('postgres:deployment:chroma', resource_deps=['k8s_setup'], labels=["infrastructure"], port_forwards='5432:5432')
222273
# Jobs are suffixed with the image tag to ensure they are unique. In this context, the image tag is defined in k8s/distributed-chroma/values.yaml.
223-
k8s_resource('sysdb-migration-latest', resource_deps=['postgres'], labels=["infrastructure"])
224-
k8s_resource('rust-log-service', labels=["chroma"], port_forwards=['50054:50051', '50052:50052'], resource_deps=['minio-deployment'])
225-
k8s_resource('sysdb', resource_deps=['sysdb-migration-latest'], labels=["chroma"], port_forwards='50051:50051')
226-
k8s_resource('rust-frontend-service', resource_deps=['sysdb', 'rust-log-service'], labels=["chroma"], port_forwards='8000:8000')
227-
k8s_resource('query-service', resource_deps=['sysdb'], labels=["chroma"], port_forwards='50053:50051')
228-
k8s_resource('compaction-service', resource_deps=['sysdb'], labels=["chroma"])
274+
k8s_resource('sysdb-migration-latest:job:chroma', resource_deps=['postgres:deployment:chroma'], labels=["infrastructure"])
275+
k8s_resource('rust-log-service:statefulset:chroma', labels=["chroma"], port_forwards=['50054:50051', '50052:50052'], resource_deps=['minio-deployment'])
276+
k8s_resource('sysdb:deployment:chroma', resource_deps=['sysdb-migration-latest:job:chroma'], labels=["chroma"], port_forwards='50051:50051')
277+
k8s_resource('rust-frontend-service:deployment:chroma', resource_deps=['sysdb:deployment:chroma', 'rust-log-service:statefulset:chroma'], labels=["chroma"], port_forwards='8000:8000')
278+
k8s_resource('query-service:statefulset:chroma', resource_deps=['sysdb:deployment:chroma'], labels=["chroma"], port_forwards='50053:50051')
279+
k8s_resource('compaction-service:statefulset:chroma', resource_deps=['sysdb:deployment:chroma'], labels=["chroma"])
280+
k8s_resource('garbage-collector:statefulset:chroma', resource_deps=['k8s_setup', 'minio-deployment'], labels=["chroma"], port_forwards='50055:50055')
229281
k8s_resource('load-service', resource_deps=['k8s_setup'], labels=["infrastructure"], port_forwards='3001:3001')
282+
283+
# Production Chroma 2
284+
k8s_resource('postgres:deployment:chroma2', resource_deps=['k8s_setup2'], labels=["infrastructure2"], port_forwards='6432:5432')
285+
# Jobs are suffixed with the image tag to ensure they are unique. In this context, the image tag is defined in k8s/distributed-chroma/values.yaml.
286+
k8s_resource('sysdb-migration-latest:job:chroma2', resource_deps=['postgres:deployment:chroma2'], labels=["infrastructure2"])
287+
k8s_resource('rust-log-service:statefulset:chroma2', labels=["chroma2"], port_forwards=['60054:50051', '60052:50052'], resource_deps=['minio-deployment'])
288+
k8s_resource('sysdb:deployment:chroma2', resource_deps=['sysdb-migration-latest:job:chroma2'], labels=["chroma2"], port_forwards='60051:50051')
289+
k8s_resource('rust-frontend-service:deployment:chroma2', resource_deps=['sysdb:deployment:chroma2', 'rust-log-service:statefulset:chroma2'], labels=["chroma2"], port_forwards='8001:8000')
290+
k8s_resource('query-service:statefulset:chroma2', resource_deps=['sysdb:deployment:chroma2'], labels=["chroma2"], port_forwards='60053:50051')
291+
k8s_resource('compaction-service:statefulset:chroma2', resource_deps=['sysdb:deployment:chroma2'], labels=["chroma2"])
292+
k8s_resource('garbage-collector:statefulset:chroma2', resource_deps=['k8s_setup2', 'minio-deployment'], labels=["chroma2"], port_forwards='60055:50055')
293+
294+
# Observability
230295
k8s_resource('jaeger', resource_deps=['k8s_setup'], labels=["observability"])
231296
k8s_resource('grafana', resource_deps=['k8s_setup'], labels=["observability"])
232297
k8s_resource('prometheus', resource_deps=['k8s_setup'], labels=["observability"])
233298
k8s_resource('otel-collector', resource_deps=['k8s_setup'], labels=["observability"])
234-
k8s_resource('garbage-collector', resource_deps=['k8s_setup', 'minio-deployment'], labels=["chroma"], port_forwards='50055:50055')
299+
235300
# Local S3
236301
k8s_resource('minio-deployment', resource_deps=['k8s_setup'], labels=["debug"], port_forwards=['9000:9000', '9005:9005'])
302+
303+
304+
# Set the enabled resources
305+
# - Basic resources are always enabled.
306+
# - Multi-region resources are only enabled if the multi-region flag is set.
307+
config.clear_enabled_resources()
308+
309+
groups = {
310+
'basic': [
311+
'k8s_setup',
312+
'postgres:deployment:chroma',
313+
'sysdb-migration-latest:job:chroma',
314+
'rust-log-service:statefulset:chroma',
315+
'sysdb:deployment:chroma',
316+
'rust-frontend-service:deployment:chroma',
317+
'query-service:statefulset:chroma',
318+
'compaction-service:statefulset:chroma',
319+
'load-service',
320+
'garbage-collector:statefulset:chroma',
321+
'jaeger',
322+
'grafana',
323+
'prometheus',
324+
'otel-collector',
325+
'minio-deployment',
326+
],
327+
'multi_region': [
328+
'postgres:deployment:chroma2',
329+
'sysdb-migration-latest:job:chroma2',
330+
'rust-log-service:statefulset:chroma2',
331+
'sysdb:deployment:chroma2',
332+
'rust-frontend-service:deployment:chroma2',
333+
'query-service:statefulset:chroma2',
334+
'compaction-service:statefulset:chroma2',
335+
'garbage-collector:statefulset:chroma2',
336+
],
337+
}
338+
339+
if cfg.get('multi_region'):
340+
config.set_enabled_resources(groups['basic'] + groups['multi_region'])
341+
else:
342+
config.set_enabled_resources(groups['basic'])

go/pkg/memberlist_manager/memberlist_store.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -144,7 +144,7 @@ func (s *CRMemberlistStore) UpdateMemberlist(ctx context.Context, memberlist Mem
144144
log.Debug("Updating memberlist store", zap.Any("memberlist", memberlist))
145145
unstructured := memberlist.toCr(s.coordinatorNamespace, s.memberlistCustomResource, resourceVersion)
146146
log.Debug("Setting memberlist to unstructured object", zap.Any("unstructured", unstructured))
147-
_, err := s.dynamicClient.Resource(gvr).Namespace("chroma").Update(context.Background(), unstructured, metav1.UpdateOptions{})
147+
_, err := s.dynamicClient.Resource(gvr).Namespace(s.coordinatorNamespace).Update(context.Background(), unstructured, metav1.UpdateOptions{})
148148
if err != nil {
149149
return err
150150
}

k8s/distributed-chroma/values.dev.yaml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
11
sysdb:
22
flags:
33
version-file-enabled: true
4-
s3-endpoint: "http://minio:9000"
4+
s3-endpoint: "http://minio.chroma.svc.cluster.local:9000"
55
s3-access-key-id: "minio"
66
s3-secret-access-key: "minio123"
77
s3-force-path-style: true
88
create-bucket-if-not-exists: true
9+
kubernetes-namespace: chroma
910
rustFrontendService:
1011
# We have to specify the command, because the Dockerfile uses the CLI since its shared with
1112
# single node, so in values.dev we pass the CONFIG_PATH into the chroma run command

k8s/distributed-chroma/values.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ sysdb:
2020
replicaCount: 1
2121
env:
2222
- name: OPTL_TRACING_ENDPOINT
23-
value: 'value: "jaeger:4317"'
23+
value: 'value: "jaeger.chroma.svc.cluster.local:4317"'
2424
resources:
2525
limits:
2626
cpu: '2000m'
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
sysdb:
2+
flags:
3+
version-file-enabled: true
4+
s3-endpoint: "http://minio.chroma.svc.cluster.local:9000"
5+
s3-access-key-id: "minio"
6+
s3-secret-access-key: "minio123"
7+
s3-force-path-style: true
8+
create-bucket-if-not-exists: true
9+
kubernetes-namespace: chroma2
10+
rustFrontendService:
11+
# We have to specify the command, because the Dockerfile uses the CLI since its shared with
12+
# single node, so in values.dev we pass the CONFIG_PATH into the chroma run command
13+
command: '["chroma", "run", "$(CONFIG_PATH)"]'
14+
otherEnvConfig: |
15+
- name: CHROMA_ALLOW_RESET
16+
value: "true"
17+
- name: RUST_BACKTRACE
18+
value: 'value: "1"'
19+
20+
queryService:
21+
env:
22+
- name: RUST_BACKTRACE
23+
value: 'value: "1"'
24+
jemallocConfig: "prof:true,prof_active:true,lg_prof_sample:19"
25+
26+
compactionService:
27+
env:
28+
- name: RUST_BACKTRACE
29+
value: 'value: "1"'
30+
jemallocConfig: "prof:true,prof_active:true,lg_prof_sample:19"
31+
32+
rustLogService:
33+
replicaCount: 1
34+
35+
garbageCollector:
36+
jemallocConfig: "prof:true,prof_active:true,lg_prof_sample:19"
Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
# Default values for distributed-chroma.
2+
# Strongly prefer single quotes.
3+
namespace: 'chroma2'
4+
rustFrontendService:
5+
image:
6+
repository: 'rust-frontend-service'
7+
tag: 'latest'
8+
replicaCount: 1
9+
resources:
10+
limits:
11+
cpu: '2000m'
12+
memory: '1Gi'
13+
requests:
14+
cpu: '1000m'
15+
memory: '512Mi'
16+
sysdb:
17+
image:
18+
repository: 'sysdb'
19+
tag: 'latest'
20+
replicaCount: 1
21+
env:
22+
- name: OPTL_TRACING_ENDPOINT
23+
value: 'value: "jaeger.chroma.svc.cluster.local:4317"'
24+
resources:
25+
limits:
26+
cpu: '2000m'
27+
memory: '1Gi'
28+
requests:
29+
cpu: '1000m'
30+
memory: '512Mi'
31+
rustLogService:
32+
image:
33+
repository: 'rust-log-service'
34+
tag: 'latest'
35+
cache:
36+
hostPath: '/local/cache/chroma-log-service'
37+
type: DirectoryOrCreate
38+
mountPath: '/cache/'
39+
additionalVolumes: []
40+
queryService:
41+
image:
42+
repository: 'query-service'
43+
tag: 'latest'
44+
env:
45+
cache:
46+
hostPath: '/local/cache/chroma-query-service'
47+
type: DirectoryOrCreate
48+
mountPath: '/cache/'
49+
additionalVolumes: []
50+
replicaCount: 2
51+
compactionService:
52+
image:
53+
repository: 'compaction-service'
54+
tag: 'latest'
55+
env:
56+
cache:
57+
hostPath: '/local/cache/chroma-compaction-service'
58+
type: DirectoryOrCreate
59+
mountPath: '/cache/'
60+
additionalVolumes: []
61+
replicaCount: 1
62+
sysdbMigration:
63+
image:
64+
repository: 'sysdb-migration'
65+
tag: 'latest'
66+
username: chroma
67+
password: chroma
68+
netloc: postgres
69+
port: 5432
70+
dbName: sysdb
71+
sslmode: disable
72+
# Add the garbage collector configuration
73+
garbageCollector:
74+
image:
75+
repository: 'garbage-collector'
76+
tag: 'latest'
77+
replicaCount: 1
78+
resources:
79+
limits:
80+
cpu: '200m'
81+
memory: '256Mi'
82+
requests:
83+
cpu: '100m'
84+
memory: '128Mi'
85+
cache:
86+
hostPath: '/local/cache/chroma-garbage-collector'
87+
mountPath: '/cache/'

0 commit comments

Comments
 (0)