Skip to content

Commit c9ae73e

Browse files
a-klosCopilot
andauthored
fix: bitnami issues (#113)
This pull request updates the development and deployment setup to standardize on the official Kubernetes `ingress-nginx` controller instead of the Bitnami `nginx-ingress-controller`, and improves Docker build configuration by refining ignored files and directories in the build context. The changes also enhance the local cluster setup script for better reliability and clarity. **Helm chart and ingress controller standardization:** - Switched the Helm chart dependency in `base-setup/Chart.yaml` from Bitnami's `nginx-ingress-controller` to the official `ingress-nginx` chart, and updated the description accordingly. - Added configuration in `base-setup/values.yaml` to pin the `ingress-nginx` controller image tag to `v1.13.3`, ensuring consistency with the setup script. **Local cluster setup improvements:** - Refactored `setup-k3d-cluster.sh` to: - Fail fast on errors and handle existing clusters gracefully. - Install or upgrade the official `ingress-nginx` Helm chart (instead of Bitnami). - Wait for node readiness and ingress controller rollout, with improved logging and error handling. **Docker build context refinements:** - Updated multiple `docker_build` calls in `Tiltfile` to ignore the entire `services/frontend/` directory (instead of just `.nx/` and `tmp/`), reducing unnecessary files in backend and admin/extractor images. [[1]](diffhunk://#diff-c2ee8653e1d6b85f0aadf87cd438a9250806c052877248442be4d434cbc52425L168-R168) [[2]](diffhunk://#diff-c2ee8653e1d6b85f0aadf87cd438a9250806c052877248442be4d434cbc52425L212-R211) [[3]](diffhunk://#diff-c2ee8653e1d6b85f0aadf87cd438a9250806c052877248442be4d434cbc52425L249-R247) [[4]](diffhunk://#diff-c2ee8653e1d6b85f0aadf87cd438a9250806c052877248442be4d434cbc52425L293-R291) - For frontend Docker builds, expanded the ignore list to explicitly include `services/frontend/.nx/`, `services/frontend/tmp/`, and `services/frontend/node_modules/` for cleaner image builds. [[1]](diffhunk://#diff-c2ee8653e1d6b85f0aadf87cd438a9250806c052877248442be4d434cbc52425L334-R332) [[2]](diffhunk://#diff-c2ee8653e1d6b85f0aadf87cd438a9250806c052877248442be4d434cbc52425L352-R350) --------- Co-authored-by: Copilot <[email protected]>
1 parent 3ef2a5a commit c9ae73e

File tree

5 files changed

+96
-33
lines changed

5 files changed

+96
-33
lines changed

Tiltfile

Lines changed: 21 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -145,6 +145,11 @@ local_resource(
145145
################################## build backend_rag image and do live update ##########################################
146146
########################################################################################################################
147147

148+
IGNORE_BASE = [
149+
"infrastructure/",
150+
"services/frontend/",
151+
]
152+
148153
# NOTE: full image names should match the one in the helm chart values.yaml!
149154
registry = "ghcr.io/stackitcloud/rag-template"
150155
rag_api_image_name = "rag-backend"
@@ -163,11 +168,7 @@ docker_build(
163168
sync(core_library_context+"/rag-core-lib", "/app/libs/rag-core-lib"),
164169
],
165170
dockerfile=backend_context + "/Dockerfile",
166-
ignore=[
167-
"infrastructure/",
168-
"services/frontend/.nx/",
169-
"services/frontend/tmp/",
170-
],
171+
ignore=IGNORE_BASE
171172
)
172173

173174
# Add linter trigger
@@ -207,11 +208,7 @@ docker_build(
207208
sync(mcp_context, "/app/services/mcp-server"),
208209
],
209210
dockerfile=mcp_context + "/Dockerfile",
210-
ignore=[
211-
"infrastructure/",
212-
"services/frontend/.nx/",
213-
"services/frontend/tmp/",
214-
],
211+
ignore=IGNORE_BASE,
215212
)
216213

217214
# Add linter trigger
@@ -246,7 +243,7 @@ docker_build(
246243
sync(core_library_context + "/admin-api-lib", "/app/libs/admin-api-lib"),
247244
],
248245
dockerfile=admin_backend_context + "/Dockerfile",
249-
ignore=["infrastructure/"],
246+
ignore=IGNORE_BASE,
250247
)
251248

252249
# Add linter trigger
@@ -290,7 +287,7 @@ docker_build(
290287
sync(core_library_context +"/extractor-api-lib", "/app/libs/extractor-api-lib"),
291288
],
292289
dockerfile=extractor_context + "/Dockerfile",
293-
ignore=["infrastructure/"],
290+
ignore=IGNORE_BASE,
294291
)
295292

296293
# Add linter trigger
@@ -331,7 +328,12 @@ docker_build(
331328
sync("./services/frontend/dist/apps/chat-app", "/usr/share/nginx/html"),
332329
sync("./services/frontend/dist/libs", "/usr/share/nginx/html/libs"),
333330
],
334-
ignore=["infrastructure/"],
331+
ignore=[
332+
"infrastructure/",
333+
"services/frontend/.nx/",
334+
"services/frontend/tmp/",
335+
"services/frontend/node_modules/",
336+
],
335337
)
336338

337339
########################################################################################################################
@@ -349,7 +351,12 @@ docker_build(
349351
sync("./services/frontend/dist/apps/admin-app", "/usr/share/nginx/html"),
350352
sync("./services/frontend/dist/libs", "/usr/share/nginx/html/libs"),
351353
],
352-
ignore=["infrastructure/"],
354+
ignore=[
355+
"infrastructure/",
356+
"services/frontend/.nx/",
357+
"services/frontend/tmp/",
358+
"services/frontend/node_modules/",
359+
],
353360
)
354361

355362

Lines changed: 58 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,65 @@
11
#!/bin/bash
2-
k3d cluster create rag --config k3d-cluster-config.yaml --k3s-arg "--disable=traefik@server:*"
32

4-
kubectl wait --for=condition=ready node --all --timeout=120s
3+
# Fail fast on errors, unset vars, and propagate pipe failures
4+
set -euo pipefail
55

6-
REPO_NAME="bitnami"
7-
# Add the Helm repository if it doesn't exist
8-
if ! helm repo list | grep -q "$REPO_NAME"; then
9-
echo "Adding Helm repository $REPO_NAME..."
10-
helm repo add $REPO_NAME https://charts.bitnami.com/bitnami
11-
helm repo update
6+
CLUSTER_NAME="rag"
7+
K3D_CONFIG_FILE="k3d-cluster-config.yaml"
8+
9+
echo "Creating k3d cluster '${CLUSTER_NAME}' (if it does not already exist)..."
10+
cluster_exists=false
11+
if command -v jq >/dev/null 2>&1; then
12+
if k3d cluster list -o json 2>/dev/null | jq -e --arg name "$CLUSTER_NAME" 'map(select(.name==$name)) | length > 0' >/dev/null; then
13+
cluster_exists=true
14+
fi
15+
else
16+
# Fallback without jq (less robust)
17+
if k3d cluster list --no-headers 2>/dev/null | awk '{print $1}' | grep -qx "${CLUSTER_NAME}"; then
18+
cluster_exists=true
19+
fi
20+
fi
21+
22+
if [ "${cluster_exists}" = true ]; then
23+
echo "Cluster '${CLUSTER_NAME}' already exists. Skipping create."
1224
else
13-
echo "Helm repository $REPO_NAME already exists."
25+
k3d cluster create "${CLUSTER_NAME}" --config "${K3D_CONFIG_FILE}" --k3s-arg "--disable=traefik@server:*"
1426
fi
1527

16-
helm install nginx-ingress-controller bitnami/nginx-ingress-controller --namespace nginx-ingress --version "10.3.0" --create-namespace
28+
echo "Waiting for all nodes to become Ready..."
29+
kubectl wait --for=condition=ready node --all --timeout=120s || {
30+
echo "WARNING: Some nodes did not reach Ready state within timeout." >&2
31+
}
32+
33+
INGRESS_REPO_NAME="ingress-nginx"
34+
INGRESS_REPO_URL="https://kubernetes.github.io/ingress-nginx"
35+
INGRESS_NAMESPACE="ingress-nginx"
36+
INGRESS_RELEASE="ingress-nginx"
37+
INGRESS_CHART="ingress-nginx/ingress-nginx"
38+
INGRESS_CHART_VERSION="${INGRESS_CHART_VERSION:-4.13.3}"
39+
if ! helm repo list | awk '{print $1}' | grep -qx "$INGRESS_REPO_NAME"; then
40+
echo "Adding Helm repository $INGRESS_REPO_NAME ($INGRESS_REPO_URL)..."
41+
helm repo add "$INGRESS_REPO_NAME" "$INGRESS_REPO_URL"
42+
else
43+
echo "Helm repository $INGRESS_REPO_NAME already exists."
44+
fi
45+
echo "Updating Helm repository $INGRESS_REPO_NAME..."
46+
helm repo update "$INGRESS_REPO_NAME"
47+
48+
echo "Installing / upgrading '$INGRESS_RELEASE' chart version ${INGRESS_CHART_VERSION}"
49+
helm upgrade --install "$INGRESS_RELEASE" "$INGRESS_CHART" \
50+
--namespace "$INGRESS_NAMESPACE" \
51+
--create-namespace \
52+
--version "$INGRESS_CHART_VERSION"
53+
echo "Waiting for ingress controller deployment rollout..."
54+
if kubectl rollout status deployment/${INGRESS_RELEASE}-controller -n "$INGRESS_NAMESPACE" --timeout=180s; then
55+
echo "Ingress controller successfully rolled out."
56+
else
57+
echo "Rollout not complete. Recent events:" >&2
58+
kubectl -n "$INGRESS_NAMESPACE" get events --sort-by=.lastTimestamp | tail -n 30 || true
59+
fi
60+
61+
echo "Current ingress-nginx pods:"
62+
kubectl get pods -n "$INGRESS_NAMESPACE" -l app.kubernetes.io/name=ingress-nginx || true
63+
64+
1765

infrastructure/server-setup/base-setup/Chart.lock

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@ dependencies:
22
- name: cert-manager
33
repository: https://charts.jetstack.io
44
version: v1.18.2
5-
- name: nginx-ingress-controller
6-
repository: https://charts.bitnami.com/bitnami
7-
version: 11.6.27
8-
digest: sha256:3197e71b2e91041da3bca61187bd413ea86ed7778a8cecf363182be1aaead1f0
9-
generated: "2025-07-31T08:32:45.824521293Z"
5+
- name: ingress-nginx
6+
repository: https://kubernetes.github.io/ingress-nginx
7+
version: 4.13.3
8+
digest: sha256:2da733e46f388692106e8487aa48b1593366cc611ffac246891dbbbe0b9a7943
9+
generated: "2025-10-07T12:41:19.535888+02:00"
Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
apiVersion: v2
22
name: basic
33
description: |
4-
This helm chart deploys the basic nginx-ingress controller and cert-manager.
4+
This helm chart deploys the official Kubernetes ingress-nginx controller and cert-manager.
55
type: application
66
version: 0.0.1
77
appVersion: "0.0.1"
88
dependencies:
99
- name: cert-manager
1010
version: "v1.18.2"
1111
repository: https://charts.jetstack.io
12-
- name: nginx-ingress-controller
13-
version: "11.6.27"
14-
repository: https://charts.bitnami.com/bitnami
12+
- name: ingress-nginx
13+
version: "4.13.3"
14+
repository: https://kubernetes.github.io/ingress-nginx
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,10 @@
11
cert-manager:
22
installCRDs: false
3+
4+
# Configuration overrides for the official ingress-nginx chart dependency.
5+
# Pin the controller image tag to v1.13.3 (matching the script installation).
6+
ingress-nginx:
7+
controller:
8+
image:
9+
# registry and image default to the chart's defaults; only pin tag here.
10+
tag: v1.13.3

0 commit comments

Comments
 (0)