Skip to content

Commit 9eed8e9

Browse files
committed
feat: add dashboard to k8s cluster
1 parent 08a44b1 commit 9eed8e9

2 files changed

Lines changed: 153 additions & 6 deletions

File tree

scripts/k8s-local-start.sh

Lines changed: 92 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ CLUSTER_NAME="${CLUSTER_NAME:-inferadb-local}"
2121
NAMESPACE="${NAMESPACE:-inferadb}"
2222
SERVER_IMAGE="${SERVER_IMAGE:-inferadb-engine:local}"
2323
CONTROL_IMAGE="${CONTROL_IMAGE:-inferadb-control:local}"
24+
DASHBOARD_IMAGE="${DASHBOARD_IMAGE:-inferadb-dashboard:local}"
2425

2526
log_info() {
2627
echo -e "${GREEN}[INFO]${NC} $1"
@@ -82,15 +83,15 @@ nodes:
8283
- containerPort: 30080
8384
hostPort: 8080
8485
protocol: TCP
85-
- containerPort: 30081
86-
hostPort: 3000
87-
protocol: TCP
8886
- containerPort: 30090
8987
hostPort: 9090
9088
protocol: TCP
9189
- containerPort: 30091
9290
hostPort: 9091
9391
protocol: TCP
92+
- containerPort: 30030
93+
hostPort: 3030
94+
protocol: TCP
9495
- role: worker
9596
- role: worker
9697
EOF
@@ -122,6 +123,13 @@ build_images() {
122123
exit 1
123124
}
124125

126+
# Build dashboard
127+
log_info "Building dashboard image..."
128+
docker build -t "${DASHBOARD_IMAGE}" "${repo_root}/dashboard/" || {
129+
log_error "Failed to build dashboard image"
130+
exit 1
131+
}
132+
125133
log_info "Images built ✓"
126134
}
127135

@@ -130,6 +138,7 @@ load_images() {
130138

131139
kind load docker-image "${SERVER_IMAGE}" --name "${CLUSTER_NAME}"
132140
kind load docker-image "${CONTROL_IMAGE}" --name "${CLUSTER_NAME}"
141+
kind load docker-image "${DASHBOARD_IMAGE}" --name "${CLUSTER_NAME}"
133142

134143
log_info "Images loaded ✓"
135144
}
@@ -653,6 +662,81 @@ EOF
653662
log_info "Engine deployed ✓"
654663
}
655664

665+
deploy_dashboard() {
666+
log_info "Deploying Dashboard..."
667+
668+
kubectl apply -f - <<EOF
669+
apiVersion: apps/v1
670+
kind: Deployment
671+
metadata:
672+
name: inferadb-dashboard
673+
namespace: ${NAMESPACE}
674+
spec:
675+
replicas: 1
676+
selector:
677+
matchLabels:
678+
app: inferadb-dashboard
679+
template:
680+
metadata:
681+
labels:
682+
app: inferadb-dashboard
683+
spec:
684+
containers:
685+
- name: dashboard
686+
image: ${DASHBOARD_IMAGE}
687+
imagePullPolicy: Never
688+
ports:
689+
- containerPort: 3000
690+
name: http
691+
env:
692+
- name: NODE_ENV
693+
value: "production"
694+
- name: HOST
695+
value: "0.0.0.0"
696+
- name: PORT
697+
value: "3000"
698+
# Control API URL - within the K8s cluster
699+
- name: CONTROL_API_URL
700+
value: "http://inferadb-control:9090"
701+
livenessProbe:
702+
httpGet:
703+
path: /
704+
port: 3000
705+
initialDelaySeconds: 10
706+
periodSeconds: 10
707+
timeoutSeconds: 5
708+
failureThreshold: 3
709+
readinessProbe:
710+
httpGet:
711+
path: /
712+
port: 3000
713+
initialDelaySeconds: 5
714+
periodSeconds: 5
715+
timeoutSeconds: 3
716+
failureThreshold: 3
717+
---
718+
apiVersion: v1
719+
kind: Service
720+
metadata:
721+
name: inferadb-dashboard
722+
namespace: ${NAMESPACE}
723+
spec:
724+
selector:
725+
app: inferadb-dashboard
726+
ports:
727+
- name: http
728+
port: 3000
729+
targetPort: 3000
730+
nodePort: 30030
731+
type: NodePort
732+
EOF
733+
734+
log_info "Waiting for Dashboard to be ready..."
735+
kubectl wait --for=condition=available deployment/inferadb-dashboard -n "${NAMESPACE}" --timeout=120s
736+
737+
log_info "Dashboard deployed ✓"
738+
}
739+
656740
show_status() {
657741
log_info "Deployment Status:"
658742
echo ""
@@ -662,9 +746,10 @@ show_status() {
662746
echo ""
663747

664748
log_info "Access URLs:"
665-
echo " Engine: http://localhost:8080"
666-
echo " Control: http://localhost:9090"
667-
echo " Mailpit: http://localhost:30025 (email web UI)"
749+
echo " Dashboard: http://localhost:3030"
750+
echo " Engine: http://localhost:8080"
751+
echo " Control: http://localhost:9090"
752+
echo " Mailpit: http://localhost:30025 (email web UI)"
668753
echo ""
669754

670755
log_info "Useful Commands:"
@@ -701,6 +786,7 @@ main() {
701786
deploy_mailpit
702787
deploy_control
703788
deploy_engine
789+
deploy_dashboard
704790

705791
log_info "Setup complete! 🎉"
706792
echo ""

scripts/k8s-local-update.sh

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ CLUSTER_NAME="${CLUSTER_NAME:-inferadb-local}"
2020
NAMESPACE="${NAMESPACE:-inferadb}"
2121
SERVER_IMAGE="${SERVER_IMAGE:-inferadb-engine:local}"
2222
CONTROL_IMAGE="${CONTROL_IMAGE:-inferadb-control:local}"
23+
DASHBOARD_IMAGE="${DASHBOARD_IMAGE:-inferadb-dashboard:local}"
2324

2425
log_info() {
2526
echo -e "${GREEN}[INFO]${NC} $1"
@@ -59,11 +60,19 @@ build_and_load_images() {
5960
exit 1
6061
}
6162

63+
# Build dashboard
64+
log_info "Building dashboard image..."
65+
docker build -t "${DASHBOARD_IMAGE}" dashboard/ || {
66+
log_error "Failed to build dashboard image"
67+
exit 1
68+
}
69+
6270
log_info "Images built ✓"
6371

6472
log_info "Loading images into kind cluster..."
6573
kind load docker-image "${SERVER_IMAGE}" --name "${CLUSTER_NAME}"
6674
kind load docker-image "${CONTROL_IMAGE}" --name "${CLUSTER_NAME}"
75+
kind load docker-image "${DASHBOARD_IMAGE}" --name "${CLUSTER_NAME}"
6776
log_info "Images loaded ✓"
6877
}
6978

@@ -275,6 +284,57 @@ spec:
275284
path: fdb.cluster
276285
EOF
277286

287+
# Update Dashboard deployment
288+
kubectl apply -f - <<EOF
289+
apiVersion: apps/v1
290+
kind: Deployment
291+
metadata:
292+
name: inferadb-dashboard
293+
namespace: ${NAMESPACE}
294+
spec:
295+
replicas: 1
296+
selector:
297+
matchLabels:
298+
app: inferadb-dashboard
299+
template:
300+
metadata:
301+
labels:
302+
app: inferadb-dashboard
303+
spec:
304+
containers:
305+
- name: dashboard
306+
image: ${DASHBOARD_IMAGE}
307+
imagePullPolicy: Never
308+
ports:
309+
- containerPort: 3000
310+
name: http
311+
env:
312+
- name: NODE_ENV
313+
value: "production"
314+
- name: HOST
315+
value: "0.0.0.0"
316+
- name: PORT
317+
value: "3000"
318+
- name: CONTROL_API_URL
319+
value: "http://inferadb-control:9090"
320+
livenessProbe:
321+
httpGet:
322+
path: /
323+
port: 3000
324+
initialDelaySeconds: 10
325+
periodSeconds: 10
326+
timeoutSeconds: 5
327+
failureThreshold: 3
328+
readinessProbe:
329+
httpGet:
330+
path: /
331+
port: 3000
332+
initialDelaySeconds: 5
333+
periodSeconds: 5
334+
timeoutSeconds: 3
335+
failureThreshold: 3
336+
EOF
337+
278338
log_info "Deployments updated ✓"
279339
}
280340

@@ -298,6 +358,7 @@ wait_for_deployments() {
298358

299359
kubectl rollout status deployment/inferadb-control -n "${NAMESPACE}" --timeout=120s
300360
kubectl rollout status deployment/inferadb-engine -n "${NAMESPACE}" --timeout=120s
361+
kubectl rollout status deployment/inferadb-dashboard -n "${NAMESPACE}" --timeout=120s
301362

302363
log_info "Deployments ready ✓"
303364
}

0 commit comments

Comments
 (0)