From 46b7ae7ff3635dba91be6606b6216d78de5d6e6d Mon Sep 17 00:00:00 2001 From: ION606 Date: Wed, 27 Aug 2025 21:00:19 -0400 Subject: [PATCH] fixes --- .env | 1 + .gitignore | 1 + apps/bubbles/deployment.yaml | 4 +- apps/bubbles/kustomization.yaml | 3 +- apps/coral/deployment.yaml | 4 +- apps/coral/kustomization.yaml | 3 +- apps/kelp/deployment.yaml | 4 +- apps/kelp/kustomization.yaml | 3 +- apps/reef/deployment.yaml | 4 +- environments/dev/app-kelp.yaml | 2 +- environments/dev/gateway.yaml | 2 +- environments/dev/httproute.yaml | 2 +- environments/dev/namespace.yaml | 2 +- run.sh | 112 ++++++++++++++++++++++++++++---- 14 files changed, 118 insertions(+), 29 deletions(-) create mode 100644 .env diff --git a/.env b/.env new file mode 100644 index 0000000..5e4a242 --- /dev/null +++ b/.env @@ -0,0 +1 @@ +ISTIO_VERSION=1.22.1 \ No newline at end of file diff --git a/.gitignore b/.gitignore index 43cf4ce..ac84ad5 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ *.txt *.xml +*.tar diff --git a/apps/bubbles/deployment.yaml b/apps/bubbles/deployment.yaml index 8a54965..99985f3 100644 --- a/apps/bubbles/deployment.yaml +++ b/apps/bubbles/deployment.yaml @@ -2,7 +2,7 @@ apiVersion: apps/v1 kind: Deployment metadata: name: bubbles - namespace: demo + namespace: argocd spec: replicas: 2 selector: { matchLabels: { app: bubbles } } @@ -24,7 +24,7 @@ apiVersion: v1 kind: Service metadata: name: bubbles - namespace: demo + namespace: argocd spec: selector: { app: bubbles } ports: [{ name: http, port: 80, targetPort: 8080 }] diff --git a/apps/bubbles/kustomization.yaml b/apps/bubbles/kustomization.yaml index 492f0af..b97cf2c 100644 --- a/apps/bubbles/kustomization.yaml +++ b/apps/bubbles/kustomization.yaml @@ -1,3 +1,4 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization -resources: [deployment.yaml, service.yaml] +resources: + - deployment.yaml diff --git a/apps/coral/deployment.yaml b/apps/coral/deployment.yaml index 8b0d5b6..c3635c0 100644 --- a/apps/coral/deployment.yaml +++ b/apps/coral/deployment.yaml @@ -2,7 +2,7 @@ apiVersion: apps/v1 kind: Deployment metadata: name: coral - namespace: demo + namespace: argocd spec: replicas: 2 selector: { matchLabels: { app: coral } } @@ -24,7 +24,7 @@ apiVersion: v1 kind: Service metadata: name: coral - namespace: demo + namespace: argocd spec: selector: { app: coral } ports: [{ name: http, port: 80, targetPort: 8080 }] diff --git a/apps/coral/kustomization.yaml b/apps/coral/kustomization.yaml index 492f0af..b97cf2c 100644 --- a/apps/coral/kustomization.yaml +++ b/apps/coral/kustomization.yaml @@ -1,3 +1,4 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization -resources: [deployment.yaml, service.yaml] +resources: + - deployment.yaml diff --git a/apps/kelp/deployment.yaml b/apps/kelp/deployment.yaml index 03a0d07..ecf04ca 100644 --- a/apps/kelp/deployment.yaml +++ b/apps/kelp/deployment.yaml @@ -2,7 +2,7 @@ apiVersion: apps/v1 kind: Deployment metadata: name: kelp - namespace: demo + namespace: argocd spec: replicas: 2 selector: { matchLabels: { app: kelp } } @@ -24,7 +24,7 @@ apiVersion: v1 kind: Service metadata: name: kelp - namespace: demo + namespace: argocd spec: selector: { app: kelp } ports: [{ name: http, port: 80, targetPort: 8080 }] diff --git a/apps/kelp/kustomization.yaml b/apps/kelp/kustomization.yaml index ab948eb..4df72bb 100644 --- a/apps/kelp/kustomization.yaml +++ b/apps/kelp/kustomization.yaml @@ -2,4 +2,5 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization -resources: [deployment.yaml, service.yaml] +resources: + - deployment.yaml diff --git a/apps/reef/deployment.yaml b/apps/reef/deployment.yaml index 2db7ee0..57f2bd5 100644 --- a/apps/reef/deployment.yaml +++ b/apps/reef/deployment.yaml @@ -2,7 +2,7 @@ apiVersion: apps/v1 kind: Deployment metadata: name: reef - namespace: demo + namespace: argocd spec: replicas: 1 selector: { matchLabels: { app: reef } } @@ -20,7 +20,7 @@ apiVersion: v1 kind: Service metadata: name: reef - namespace: demo + namespace: argocd spec: selector: { app: reef } ports: [{ name: http, port: 80, targetPort: 8080 }] diff --git a/environments/dev/app-kelp.yaml b/environments/dev/app-kelp.yaml index cbeeb46..c171534 100644 --- a/environments/dev/app-kelp.yaml +++ b/environments/dev/app-kelp.yaml @@ -12,6 +12,6 @@ spec: path: apps/kelp destination: server: https://kubernetes.default.svc - namespace: demo + namespace: argocd syncPolicy: automated: { prune: true, selfHeal: true } diff --git a/environments/dev/gateway.yaml b/environments/dev/gateway.yaml index bb306f0..54878ba 100644 --- a/environments/dev/gateway.yaml +++ b/environments/dev/gateway.yaml @@ -2,7 +2,7 @@ apiVersion: gateway.networking.k8s.io/v1 kind: Gateway metadata: name: blahaj-gw - namespace: demo + namespace: argocd spec: gatewayClassName: istio listeners: diff --git a/environments/dev/httproute.yaml b/environments/dev/httproute.yaml index 23f33b2..bc8e17b 100644 --- a/environments/dev/httproute.yaml +++ b/environments/dev/httproute.yaml @@ -2,7 +2,7 @@ apiVersion: gateway.networking.k8s.io/v1 kind: HTTPRoute metadata: name: blahaj-routes - namespace: demo + namespace: argocd spec: parentRefs: [{ name: blahaj-gw }] rules: diff --git a/environments/dev/namespace.yaml b/environments/dev/namespace.yaml index 56e8fa8..c7a97ed 100644 --- a/environments/dev/namespace.yaml +++ b/environments/dev/namespace.yaml @@ -1,6 +1,6 @@ apiVersion: v1 kind: Namespace metadata: - name: demo + name: argocd labels: istio.io/dataplane-mode: ambient diff --git a/run.sh b/run.sh index ecee300..75c3528 100644 --- a/run.sh +++ b/run.sh @@ -1,17 +1,101 @@ -# build locally and and load into minikube -docker build -t blahaj-bun:dev -f apps/blahaj-common/bun.Dockerfile apps/blahaj-common; -docker build -t blahaj-bun:dev -f apps/reef/Dockerfile apps/reef; -minikube image load blahaj-bun:dev; +#!/usr/bin/env bash +# simple, robust bootstrap for your blahaj demo on minikube -# apply k8s (plus existing kelp/coral/bubbles apps) -kubectl apply -f apps/reef/kustomization.yaml -n demo --server-side --force-conflicts || true; -kubectl -n demo apply -f apps/reef/deployment.yaml; -kubectl -n demo apply -f apps/reef/kustomization.yaml; +set -Eeuo pipefail; -# ensure gateway + route exist (from env files) -kubectl -n demo apply -f environments/dev/gateway.yaml; -kubectl -n demo apply -f environments/dev/httproute.yaml; +# ---- settings (tweak as you like) ------------------------------------------ +PROFILE="${PROFILE:-minikube}"; # minikube profile name +CPUS="${CPUS:-2}"; # cpu cores +MEMORY_MB="${MEMORY_MB:-15400}"; # memory in mb +ISTIO_VERSION="${ISTIO_VERSION:-1.22.1}"; # used only if INSTALL_ISTIO=1 +INSTALL_ISTIO="${INSTALL_ISTIO:-0}"; # set to 1 to install istio-minimal +OPEN_ARGO="${OPEN_ARGO:-1}"; # set to 1 to port-forward argo ui +# ---------------------------------------------------------------------------- -# open the gateway service -minikube service -n istio-gateway -l gateway.istio.io/managed=yes --url -# isit http://:80/ (cards!) +minikube delete || true; + +echo "==> starting minikube..."; +minikube start --driver="docker" + +echo "==> using minikube's docker daemon for local builds..."; +# eval "$(minikube docker-env)"; + +# build local images (only if paths exist) +if [[ -d apps/reef ]]; then + echo "==> building local image: blahaj-bun:dev (reef ui)..."; + docker build -t blahaj-bun:dev -f apps/reef/Dockerfile apps/reef; +fi + +if [[ -d apps/blahaj-common ]]; then + echo "==> optionally building common app image (same tag) if services use it..."; + docker build -t blahaj-bun:dev -f apps/blahaj-common/bun.Dockerfile apps/blahaj-common || true; +fi + +echo "==> installing argo cd (single-node) into namespace argocd..."; +kubectl create namespace argocd --dry-run=client -o yaml | kubectl apply -f -; +kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml; + +echo "==> waiting for argocd-server to be ready..."; +kubectl -n argocd rollout status deploy/argocd-server --timeout=180s; + +if [[ "${OPEN_ARGO}" == "1" ]]; then + echo "==> argo admin password:"; + kubectl -n argocd get secret argocd-initial-admin-secret \ + -o jsonpath="{.data.password}" | base64 -d; echo; + echo "==> port-forwarding argo on https://localhost:9999 (ctrl-c to stop)..."; + kubectl -n argocd port-forward svc/argocd-server 9999:443 >/dev/null 2>&1 & +fi + +echo "==> installing gateway api crds (if not present)..."; +kubectl get crd gateways.gateway.networking.k8s.io &>/dev/null || { + kubectl kustomize "github.com/kubernetes-sigs/gateway-api/config/crd?ref=v1.3.0" | kubectl apply -f -; +} + +if [[ "${INSTALL_ISTIO}" == "1" ]]; then + echo "==> installing istio (minimal profile) for gateway api controller..."; + curl -L https://istio.io/downloadIstio | ISTIO_VERSION="${ISTIO_VERSION}" sh -; + "./istio-${ISTIO_VERSION}/bin/istioctl" install --set profile=minimal -y; +fi + +# apply your demo manifests +echo "==> applying namespace, gateway and routes (environments/dev)..."; +[[ -f environments/dev/namespace.yaml ]] && kubectl apply -f environments/dev/namespace.yaml; +[[ -f environments/dev/gateway.yaml ]] && kubectl apply -f environments/dev/gateway.yaml; +[[ -f environments/dev/httproute.yaml ]] && kubectl apply -f environments/dev/httproute.yaml; + +echo "==> deploying reef ui (kustomize or direct)..."; +if [[ -f apps/reef/kustomization.yaml ]]; then + kubectl apply -k apps/reef; + elif [[ -f apps/reef/deployment.yaml ]]; then + kubectl apply -f apps/reef/deployment.yaml; + [[ -f apps/reef/service.yaml ]] && kubectl apply -f apps/reef/service.yaml; +fi + +# optional: apply argo app-of-apps or child apps if present +for f in environments/dev/app-*.yaml environments/dev/app.yaml environments/dev/app-root.yaml; do + [[ -f "$f" ]] && kubectl apply -f "$f"; +done + +echo "==> waiting briefly for services to appear..."; +sleep 3; + +# try to open the istio-managed gateway first (when istio is installed) +echo "==> discovering istio-managed gateway service..."; +GW_SVC="$(kubectl -n istio-gateway get svc -l 'gateway.istio.io/managed=yes' \ +-o jsonpath='{.items[0].metadata.name}' 2>/dev/null || true)"; + +if [[ -n "${GW_SVC}" ]]; then + echo "==> opening gateway service ${GW_SVC} via minikube..."; + minikube service -n istio-gateway "${GW_SVC}" --url; + exit 0; +fi + +# fallback: open the reef service wherever it is +echo "==> no istio-managed gateway found; falling back to reef service..."; +REEF_NS="$(kubectl get svc --all-namespaces -o jsonpath='{range .items[?(@.metadata.name=="reef")]}{.metadata.namespace}{"\n"}{end}' | head -n1)"; +if [[ -z "${REEF_NS}" ]]; then + echo "error: couldn't find a Service named 'reef' in any namespace."; exit 1; +fi + +echo "==> opening reef service (ns=${REEF_NS}) via minikube..."; +minikube service -n "${REEF_NS}" reef --url;